presets.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. """
  2. Agent Presets - Agent 类型预设配置
  3. 定义不同类型 Agent 的工具权限和运行参数。
  4. 用户可通过 .agent/presets.json 覆盖或添加预设。
  5. """
  6. from dataclasses import dataclass, field
  7. from typing import Optional, List
  8. @dataclass
  9. class AgentPreset:
  10. """Agent 预设配置"""
  11. # 工具权限
  12. allowed_tools: Optional[List[str]] = None # None 表示允许全部
  13. denied_tools: Optional[List[str]] = None # 黑名单
  14. # 运行参数
  15. max_iterations: int = 30
  16. temperature: Optional[float] = None
  17. # 描述
  18. description: Optional[str] = None
  19. # 内置预设
  20. AGENT_PRESETS = {
  21. "default": AgentPreset(
  22. allowed_tools=None,
  23. max_iterations=30,
  24. description="默认 Agent,拥有全部工具权限",
  25. ),
  26. "explore": AgentPreset(
  27. allowed_tools=["read", "glob", "grep", "list_files"],
  28. denied_tools=["write", "edit", "bash", "task"],
  29. max_iterations=15,
  30. description="探索型 Agent,只读权限,用于代码分析",
  31. ),
  32. "analyst": AgentPreset(
  33. allowed_tools=["read", "glob", "grep", "web_search", "webfetch"],
  34. denied_tools=["write", "edit", "bash", "task"],
  35. temperature=0.3,
  36. max_iterations=25,
  37. description="分析型 Agent,用于深度分析和研究",
  38. ),
  39. }
  40. def get_preset(name: str) -> AgentPreset:
  41. """获取预设配置"""
  42. if name not in AGENT_PRESETS:
  43. raise ValueError(f"Unknown preset: {name}. Available: {list(AGENT_PRESETS.keys())}")
  44. return AGENT_PRESETS[name]
  45. def register_preset(name: str, preset: AgentPreset) -> None:
  46. """注册自定义预设"""
  47. AGENT_PRESETS[name] = preset