knowledge.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. """
  2. 知识提取相关 Prompt
  3. 两个场景,各自独立配置:
  4. - REFLECT_PROMPT: 压缩时阶段性反思(消息量超阈值,对当前批历史提炼)
  5. - COMPLETION_REFLECT_PROMPT: 任务完成后全局复盘(对整个任务的全局视角)
  6. 两个 prompt 都要求 LLM 直接调用 `knowledge_save_pending` 工具暂存为待审核条目,
  7. 每条知识一次调用,不需要输出结构化文本。
  8. "pending" 语义:条目落到 cognition_log 的 extraction_pending 事件,
  9. 等待人工(或 reflect_auto_commit=True 时由框架自动)review + commit 才进入 KnowHub。
  10. 详见 agent/docs/memory.md 第三节"提取-审核-提交两阶段"。
  11. """
  12. # ===== 压缩时阶段性反思 =====
  13. REFLECT_PROMPT = """请回顾以上执行过程,将值得沉淀的内容通过 `knowledge_save_pending` 工具逐条暂存(每条知识一次调用)。
  14. 暂存的条目会进入审核队列(不立即入库),等待人工 review 后才会上传到 KnowHub。
  15. ## 两种保存模式
  16. ### 模式 1:经验反思(types=["experience"])
  17. 总结执行过程中的经验教训,关注:
  18. 1. 人工干预:用户中途的指令说明了哪里出了问题
  19. 2. 弯路:哪些尝试是不必要的,有没有更直接的方法
  20. 3. 好的决策:哪些判断和选择是正确的,值得记住
  21. 4. 工具使用:哪些工具用法是高效的,哪些可以改进
  22. **参数格式**:
  23. - `task`: 「在[什么情境]下,[要完成什么]」
  24. - `content`: 「当[条件]时,应该[动作](原因:[一句话])。案例:[具体案例]」
  25. - `types`: `["experience"]`
  26. - `tags`: `{"intent": "任务意图", "state": "环境状态/工具名"}`
  27. - `score`: 1-5(只保存最有价值的,宁少勿滥)
  28. ### 模式 2:原始知识(types=["tool"] / ["strategy"] / ["case"])
  29. 如果执行过程中**调研或发现了新知识**(如工具用法、工作流程、案例),原汁原味暂存:
  30. - `["tool"]`:工具知识(单个工具的功能、参数、用法、限制)
  31. - `["strategy"]`:工序知识(多步骤流程、方案、最佳实践)
  32. - `["case"]`:用例知识(真实案例、应用场景、效果数据)
  33. **参数格式**:
  34. - `task`: 知识的标题(如「Midjourney 的 --ar 参数用法」)
  35. - `content`: 原始知识内容(完整、详细、保留结构,不要过度总结)
  36. - `types`: 二选一
  37. - `tags`: `{"source": "来源网站/文档", "domain": "领域", ...}`
  38. - `resource_ids`: 关联的资源 ID(如果保存了原始文档)
  39. - `score`: 1-5(根据知识的价值和可靠性)
  40. ## 其他注意事项
  41. - **一条知识一次 `knowledge_save_pending` 调用**,不要把多条合并
  42. - 只保存最有价值的经验,宁少勿滥;一次就成功或比较简单的经验就不要记录了,记录反复尝试或被用户指导后才成功的经验、或者是调研之后的收获
  43. - 不需要输出任何文字,直接调用工具即可
  44. - 如果没有值得保存的经验,不调用任何工具
  45. - **完成经验暂存后立即停止,不要继续执行原有任务**
  46. """
  47. # ===== 任务完成后全局复盘 =====
  48. COMPLETION_REFLECT_PROMPT = """请对整个任务进行复盘,将值得沉淀的内容通过 `knowledge_save_pending` 工具逐条暂存(每条知识一次调用)。
  49. 暂存的条目会进入审核队列(不立即入库),等待人工 review 后才会上传到 KnowHub。
  50. ## 两种保存模式
  51. ### 模式 1:经验反思(types=["experience"])
  52. 任务结束后的全局视角,关注:
  53. 1. 任务整体路径:实际走的路径与最初计划的偏差
  54. 2. 关键决策点:哪些决策显著影响了最终结果
  55. 3. 可复用的模式:哪些做法在类似任务中可以直接复用
  56. 4. 踩过的坑:哪些问题本可提前规避
  57. **参数格式**:
  58. - `task`: 「在[什么情境]下,[要完成什么]」
  59. - `content`: 「当[条件]时,应该[动作](原因:[一句话])。案例:[具体案例]」
  60. - `types`: `["experience"]`
  61. - `tags`: `{"intent": "任务意图", "state": "环境状态/工具名"}`
  62. - `score`: 1-5(只保存最有价值的,宁少勿滥)
  63. ### 模式 2:原始知识(types=["tool"] / ["strategy"] / ["case"])
  64. 如果任务过程中**调研或发现了新知识**,完整保留结构和细节:
  65. - `["tool"]`:工具知识(工具的功能、参数、用法、限制、版本信息)
  66. - `["strategy"]`:工序知识(完整的多步骤流程、方案、最佳实践)
  67. - `["case"]`:用例知识(真实案例、应用场景、效果数据、对比结果)
  68. **参数格式**:
  69. - `task`: 知识的标题
  70. - `content`: 原始知识内容(完整详细,不要过度压缩)
  71. - `types`: 三选一
  72. - `tags`: `{"source": "来源", "domain": "领域", ...}`
  73. - `resource_ids`: 关联的资源 ID
  74. - `score`: 1-5
  75. ## 关于资源(resource)
  76. 如果过程中产出了可复用的代码/凭证/Cookie 等资源,先用 `resource_save` 工具保存,
  77. 再在 `knowledge_save_pending` 的 `resource_ids` 字段中关联资源 ID。
  78. ## 其他注意事项
  79. - **一条知识一次 `knowledge_save_pending` 调用**,不要把多条合并
  80. - 只保存最有价值的经验,宁少勿滥
  81. - 不需要输出任何文字,直接调用工具即可
  82. - 如果没有值得保存的经验,不调用任何工具
  83. - **完成经验暂存后立即停止,不要继续执行原有任务**
  84. """
  85. def build_reflect_prompt() -> str:
  86. return REFLECT_PROMPT