subagents.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """四个专业 Subagent(子智能体)的声明式配置。
  2. 每个字典会由 Deep Agents 转换成独立专业角色。不同角色使用独立 Prompt、
  3. Skill 和最小工具集合,但共享主管提供的文件后端,从而可以把详细发现写到
  4. ``/workspace/findings/`` 后再由主管汇总。
  5. """
  6. from __future__ import annotations
  7. from vendor_guard.tools import (
  8. lookup_security_incidents,
  9. query_vendor_registry,
  10. search_adverse_news,
  11. search_sanctions,
  12. )
  13. def build_subagents() -> list[dict]:
  14. """创建四个最小权限的同步专业子 Agent。
  15. 返回新列表而不是模块级可变单例,避免测试或框架内部对配置做原地修改后
  16. 污染下一次 build_vendor_guard()。
  17. """
  18. # 每个专家只获得本领域查询工具;完整证据写入共享 /workspace/findings/,
  19. # 返回给主管的内容则刻意压缩,避免多个领域的上下文同时挤占模型窗口。
  20. # description 用于主管选择委派对象;system_prompt 约束专家内部执行;
  21. # tools 决定硬权限边界;skills 提供该领域更详细、可维护的工作方法。
  22. return [
  23. {
  24. "name": "security-auditor",
  25. "description": "审查安全问卷、渗透报告、数据保护和安全事故。",
  26. "system_prompt": """
  27. 读取 /data-room/{供应商}/ 中的安全资料。
  28. 使用 security-review Skill 评分;无证据必须标记 unknown。
  29. 严格区分风险严重度和证据状态:问卷是自述证据,缺少独立佐证时标为
  30. “自述待验证”并降低置信度,不得自动改成 unknown。只有资料完全未涉及、
  31. 无法判断时才使用 unknown。存在未整改 medium 或关键 unknown 时总评不得为 low。
  32. 完整发现写入 /workspace/findings/security.md。
  33. 只返回风险等级、三条关键证据和待补材料,最多 300 字。
  34. """,
  35. "tools": [lookup_security_incidents],
  36. "skills": ["/skills/security-review/"],
  37. },
  38. {
  39. "name": "legal-auditor",
  40. "description": "审查合同、制裁、数据处理条款和合规红线。",
  41. "system_prompt": """
  42. 读取合同和 /policies/vendor-onboarding.md,检查红线与制裁命中。
  43. 完整发现写入 /workspace/findings/legal.md。
  44. 只返回红线、证据位置和建议修改,最多 300 字。
  45. """,
  46. "tools": [search_sanctions],
  47. "skills": ["/skills/legal-review/"],
  48. },
  49. {
  50. "name": "finance-analyst",
  51. "description": "分析财务健康、履约记录和供应中断风险。",
  52. "system_prompt": """
  53. 分析财务文件和供应商主数据,禁止虚构缺失指标。
  54. 完整发现写入 /workspace/findings/finance.md。
  55. 只返回关键指标、异常项和置信度,最多 300 字。
  56. """,
  57. "tools": [query_vendor_registry],
  58. "skills": ["/skills/finance-review/"],
  59. },
  60. {
  61. "name": "reputation-researcher",
  62. "description": "调查诉讼、负面新闻和声誉风险。",
  63. "system_prompt": """
  64. 检索近两年负面信息,区分事实、指控和重复转载。
  65. 完整发现写入 /workspace/findings/reputation.md。
  66. 只返回已核实事件、来源和置信度,最多 300 字。
  67. """,
  68. "tools": [search_adverse_news],
  69. "skills": ["/skills/reputation-review/"],
  70. },
  71. ]