""" 知识提取相关 Prompt 两个场景,各自独立配置: - REFLECT_PROMPT: 压缩时阶段性反思(消息量超阈值,对当前批历史提炼) - COMPLETION_REFLECT_PROMPT: 任务完成后全局复盘(对整个任务的全局视角) 两个 prompt 都要求 LLM 直接调用 `knowledge_save` 工具保存经验, 而不是输出结构化文本再由 runner 解析。 """ # ===== 压缩时阶段性反思 ===== REFLECT_PROMPT = """请回顾以上执行过程,将值得沉淀的经验直接用 `knowledge_save` 工具保存到知识库。 **关注以下方面**: 1. 人工干预:用户中途的指令说明了哪里出了问题 2. 弯路:哪些尝试是不必要的,有没有更直接的方法 3. 好的决策:哪些判断和选择是正确的,值得记住 4. 工具使用:哪些工具用法是高效的,哪些可以改进 5. **资源发现**:是否发现了有价值的资源需要保存(见下方说明) **每条经验调用一次 `knowledge_save`,参数说明**: - `task`: 这条经验适用的场景,格式:「在[什么情境]下,[要完成什么]」 - `content`: 具体经验内容,格式:「当[条件]时,应该[动作](原因:[一句话])。案例:[具体案例]」 - `types`: 选 `["strategy"]`;如果涉及工具用法也可加 `"tool"` - `tags`: 用 `intent`(任务意图)和 `state`(环境状态/相关工具名)标注,便于检索 - `score`: 1-5,根据这条经验的价值评估 - `resource_ids`: 如果关联了资源,填写资源 ID 列表(可选) **资源提取指南**: 如果执行过程中涉及以下内容,应先用 `resource_save` 保存资源,再用 `knowledge_save` 提交相关的经验/知识: 1. **复杂代码工具**(逻辑复杂、超过 100 行): - 调用 `resource_save(resource_id="code/{category}/{name}", title="...", body="代码内容", content_type="code", metadata={"language": "python"})` - 然后在 `knowledge_save` 中通过 `resource_ids=["code/{category}/{name}"]` 关联 2. **账号密码凭证**: - 调用 `resource_save(resource_id="credentials/{website}", title="...", body="使用说明", secure_body="账号:xxx\\n密码:xxx", content_type="credential", metadata={"acquired_at": "2026-03-06T10:00:00Z"})` - 然后在 `knowledge_save` 中通过 `resource_ids=["credentials/{website}"]` 关联 3. **Cookie 和登录态**: - 调用 `resource_save(resource_id="cookies/{website}", title="...", body="获取方法", secure_body="cookie内容", content_type="cookie", metadata={"acquired_at": "...", "expires_at": "..."})` - 然后在 `knowledge_save` 中通过 `resource_ids=["cookies/{website}"]` 关联 4. **多资源引用**: - 一个知识可以关联多个资源,如:`resource_ids=["code/selenium/login", "credentials/website_a"]` **注意**: - 只保存最有价值的经验,宁少勿滥;一次就成功或比较简单的经验就不要记录了,记录反复尝试或被用户指导后才成功的经验、或者是调研之后的收获。 - 不需要输出任何文字,直接调用工具即可 - 如果没有值得保存的经验,不调用任何工具 """ # ===== 任务完成后全局复盘 ===== COMPLETION_REFLECT_PROMPT = """请对整个任务进行复盘,将值得沉淀的经验直接用 `knowledge_save` 工具保存到知识库。 与压缩时的阶段性反思不同,这是任务结束后的全局视角,关注: 1. 任务整体路径:实际走的路径与最初计划的偏差 2. 关键决策点:哪些决策显著影响了最终结果 3. 可复用的模式:哪些做法在类似任务中可以直接复用 4. 踩过的坑:哪些问题本可提前规避 5. **资源沉淀**:任务中产生或发现的有价值资源(见下方说明) **每条经验调用一次 `knowledge_save`,参数说明**: - `task`: 这条经验适用的场景,格式:「在[什么情境]下,[要完成什么]」 - `content`: 具体经验内容,格式:「当[条件]时,应该[动作](原因:[一句话])。案例:[具体案例]」 - `types`: 选 `["strategy"]`;如果涉及工具用法也可加 `"tool"` - `tags`: 用 `intent`(任务意图)和 `state`(环境状态/相关工具名)标注,便于检索 - `score`: 1-5,根据这条经验的价值评估 - `resource_ids`: 如果关联了资源,填写资源 ID 列表(可选) **资源提取指南**: 如果任务中涉及以下内容,应先用 `resource_save` 保存资源,再用 `knowledge_save` 关联: 1. **复杂代码工具**(逻辑复杂、超过 20 行、可复用): - 调用 `resource_save(resource_id="code/{category}/{name}", title="...", body="代码内容", content_type="code", metadata={"language": "python"})` - 然后在 `knowledge_save` 中通过 `resource_id` 关联 2. **账号密码凭证**: - 调用 `resource_save(resource_id="credentials/{website}", title="...", body="使用说明", secure_body="账号:xxx\\n密码:xxx", content_type="credential", metadata={"acquired_at": "2026-03-06T10:00:00Z"})` - 然后在 `knowledge_save` 中通过 `secure_resource_id` 关联 3. **Cookie 和登录态**: - 调用 `resource_save(resource_id="cookies/{website}", title="...", body="获取方法", secure_body="cookie内容", content_type="cookie", metadata={"acquired_at": "...", "expires_at": "..."})` - 然后在 `knowledge_save` 中通过 `secure_resource_id` 关联 **注意**: - 只保存最有价值的经验,宁少勿滥;一次就成功或比较简单的经验就不要记录了,记录反复尝试或被用户指导后才成功的经验、或者是调研之后的收获。 - 不需要输出任何文字,直接调用工具即可 - 如果没有值得保存的经验,不调用任何工具 """ def build_reflect_prompt() -> str: return REFLECT_PROMPT