knowledge.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. """
  2. 知识提取相关 Prompt
  3. 两个场景,各自独立配置:
  4. - REFLECT_PROMPT: 压缩时阶段性反思(消息量超阈值,对当前批历史提炼)
  5. - COMPLETION_REFLECT_PROMPT: 任务完成后全局复盘(对整个任务的全局视角)
  6. 两个 prompt 都要求 LLM 直接调用 `upload_knowledge` 工具保存经验,
  7. 而不是输出结构化文本再由 runner 解析。
  8. """
  9. # ===== 压缩时阶段性反思 =====
  10. REFLECT_PROMPT = """请回顾以上执行过程,将值得沉淀的内容直接用 `upload_knowledge` 工具保存到知识库。
  11. ## 两种保存模式
  12. ### 模式 1:经验反思(experience)
  13. 总结执行过程中的经验教训,关注:
  14. 1. 人工干预:用户中途的指令说明了哪里出了问题
  15. 2. 弯路:哪些尝试是不必要的,有没有更直接的方法
  16. 3. 好的决策:哪些判断和选择是正确的,值得记住
  17. 4. 工具使用:哪些工具用法是高效的,哪些可以改进
  18. **格式要求**:
  19. - `主题`: 「在[什么情境]下,[要完成什么]」
  20. - `内容`: 「当[条件]时,应该[动作](原因:[一句话])。案例:[具体案例]」
  21. - `类型`: `["experience"]`
  22. - `标签`: `{"intent": "任务意图", "state": "环境状态/工具名"}`
  23. - `评分`: 1-5(只保存最有价值的,宁少勿滥)
  24. ### 模式 2:原始知识上传(tool/strategy/case)
  25. 如果执行过程中**调研或发现了新知识**(如工具用法、工作流程、案例),直接上传原始知识:
  26. **要求**:
  27. - **完整性**:保留原始信息,不要过度总结
  28. - **来源清晰**:在 `resource_ids` 中关联来源资源,或在 `标签` 中标注来源
  29. - **原汁原味**:保持原文档/网页的结构和细节
  30. **知识类型选择**:
  31. - `["tool"]`:工具知识(单个工具的功能、参数、用法、限制)
  32. - `["strategy"]`:工序知识(多步骤流程、方案、最佳实践)
  33. - `["case"]`:用例知识(真实案例、应用场景、效果数据)
  34. **格式要求**:
  35. - `主题`: 知识的标题(如「Midjourney 的 --ar 参数用法」)
  36. - `内容`: 原始知识内容(完整、详细、保留结构)
  37. - `类型`: `["tool"]` / `["strategy"]` / `["case"]`
  38. - `标签`: `{"source": "来源网站/文档", "domain": "领域", ...}`
  39. - `resource_ids`: 关联的资源 ID(如果保存了原始文档)
  40. - `评分`: 1-5(根据知识的价值和可靠性)
  41. ## 参数说明
  42. **每条内容调用一次 `upload_knowledge`**:
  43. - `data`: 包含 knowledge/resources/tools 的字典
  44. - `knowledge`: 知识列表,每个知识包含:
  45. - `主题`: 标题或场景描述
  46. - `内容`: 知识正文(经验用总结格式,原始知识保持完整)
  47. - `类型`: `["experience"]` / `["tool"]` / `["strategy"]` / `["case"]`
  48. - `标签`: 键值对标签,便于检索
  49. - `评分`: 1-5
  50. - `resource_ids`: 关联的资源 ID 列表(可选)
  51. - `resources`: 资源列表(可选),每个资源包含:
  52. - `id`: 资源 ID(如 `code/{category}/{name}`)
  53. - `标题`: 资源标题
  54. - `内容`: 资源内容
  55. - `类型`: code/credential/cookie 等
  56. - `元数据`: 额外信息
  57. - `tools`: 工具列表(可选)
  58. - `finalize`: False(增量上传,不立即入库)
  59. **注意**:
  60. - 只保存最有价值的经验,宁少勿滥;一次就成功或比较简单的经验就不要记录了,记录反复尝试或被用户指导后才成功的经验、或者是调研之后的收获。
  61. - 不需要输出任何文字,直接调用工具即可
  62. - 如果没有值得保存的经验,不调用任何工具
  63. - **完成经验保存后立即停止,不要继续执行原有任务**
  64. """
  65. # ===== 任务完成后全局复盘 =====
  66. COMPLETION_REFLECT_PROMPT = """请对整个任务进行复盘,将值得沉淀的内容直接用 `upload_knowledge` 工具保存到知识库。
  67. ## 两种保存模式
  68. ### 模式 1:经验反思(experience)
  69. 任务结束后的全局视角,关注:
  70. 1. 任务整体路径:实际走的路径与最初计划的偏差
  71. 2. 关键决策点:哪些决策显著影响了最终结果
  72. 3. 可复用的模式:哪些做法在类似任务中可以直接复用
  73. 4. 踩过的坑:哪些问题本可提前规避
  74. **格式要求**:
  75. - `主题`: 「在[什么情境]下,[要完成什么]」
  76. - `内容`: 「当[条件]时,应该[动作](原因:[一句话])。案例:[具体案例]」
  77. - `类型`: `["experience"]`
  78. - `标签`: `{"intent": "任务意图", "state": "环境状态/工具名"}`
  79. - `评分`: 1-5(只保存最有价值的,宁少勿滥)
  80. ### 模式 2:原始知识上传(tool/strategy/case)
  81. 如果任务过程中**调研或发现了新知识**,直接上传原始知识:
  82. **要求**:
  83. - **完整性**:保留原始信息的完整结构和细节,不要过度压缩
  84. - **来源清晰**:标注信息来源(URL、文档名、API 响应等)
  85. - **原汁原味**:保持原始数据格式(如 API 参数列表、配置示例、步骤说明等)
  86. **知识类型选择**:
  87. - `["tool"]`:工具知识(工具的功能、参数、用法、限制、版本信息)
  88. - `["strategy"]`:工序知识(完整的多步骤流程、方案、最佳实践)
  89. - `["case"]`:用例知识(真实案例、应用场景、效果数据、对比结果)
  90. **格式要求**:
  91. - `主题`: 知识的标题
  92. - `内容`: 原始知识内容(完整详细)
  93. - `类型`: `["tool"]` / `["strategy"]` / `["case"]`
  94. - `标签`: `{"source": "来源", "domain": "领域", ...}`
  95. - `resource_ids`: 关联的资源 ID
  96. - `评分`: 1-5
  97. ## 参数说明
  98. **每条内容调用一次 `upload_knowledge`**:
  99. - `data`: 包含 tools/resources/knowledge 的字典
  100. - `knowledge`: 知识列表,每个知识包含:
  101. - `主题`: 这条经验适用的场景,格式:「在[什么情境]下,[要完成什么]」
  102. - `内容`: 具体经验内容,格式:「当[条件]时,应该[动作](原因:[一句话])。案例:[具体案例]」
  103. - `类型`: 知识类型,选择以下之一:
  104. - `["experience"]`: 执行经验(Agent 反思总结,应该/避免做什么)
  105. - `["strategy"]`: 工序知识(多步骤流程、方案)
  106. - `["tool"]`: 工具知识(单个工具的功能、用法)
  107. - `["case"]`: 用例知识(真实案例、应用场景)
  108. - `标签`: 用 `intent`(任务意图)和 `state`(环境状态/相关工具名)标注,便于检索
  109. - `评分`: 1-5,根据这条经验的价值评估
  110. - `resource_ids`: 关联的资源 ID 列表(可选,如果这条知识引用了某个资源)
  111. - `resources`: 资源列表(可选)
  112. - `tools`: 工具列表(可选)
  113. - `finalize`: False(增量上传,不立即入库)
  114. **资源提取指南**:
  115. 如果任务中涉及以下内容,应在 `data` 中包含 `resources` 字段:
  116. 1. **复杂代码工具**(逻辑复杂、超过 20 行、可复用):
  117. ```python
  118. {
  119. "id": "code/{category}/{name}",
  120. "标题": "...",
  121. "内容": "代码内容",
  122. "类型": "code",
  123. "元数据": {"language": "python"}
  124. }
  125. ```
  126. 2. **账号密码凭证**:
  127. ```python
  128. {
  129. "id": "credentials/{website}",
  130. "标题": "...",
  131. "内容": "使用说明和凭证",
  132. "类型": "credential",
  133. "元数据": {"acquired_at": "2026-03-06T10:00:00Z"}
  134. }
  135. ```
  136. 3. **Cookie 和登录态**:
  137. ```python
  138. {
  139. "id": "cookies/{website}",
  140. "标题": "...",
  141. "内容": "获取方法和cookie内容",
  142. "类型": "cookie",
  143. "元数据": {"acquired_at": "...", "expires_at": "..."}
  144. }
  145. ```
  146. **注意**:
  147. - 只保存最有价值的经验,宁少勿滥;一次就成功或比较简单的经验就不要记录了,记录反复尝试或被用户指导后才成功的经验、或者是调研之后的收获。
  148. - 不需要输出任何文字,直接调用工具即可
  149. - 如果没有值得保存的经验,不调用任何工具
  150. - **完成经验保存后立即停止,不要继续执行原有任务**
  151. """
  152. def build_reflect_prompt() -> str:
  153. return REFLECT_PROMPT