"""
知识提取相关 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
