基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

如何通过 prompt 设计提升 Agent 的稳定性?

知识点图片

提升 Agent(智能体)的稳定性是当前大模型应用开发中的核心挑战。Agent 的“不稳定”通常表现为:指令遵循失效、输出格式错误、逻辑幻觉、陷入死循环或工具调用失败

通过精心设计的 Prompt(提示词),可以显著为 Agent 建立“护栏”和“思维导图”。以下是提升 Agent 稳定性的 7 个核心 Prompt 设计策略


1. 结构化输出约束 (Structured Output Enforcement)

Agent 通常需要与代码进行交互,如果输出格式混乱,整个工作流就会崩溃。

  • 策略: 强制要求 JSON、XML 或特定的 Markdown 格式,并提供 Schema 定义。
  • Prompt 示例:

    你必须严格按照以下 JSON 格式输出,不要包含任何 markdown 标记或额外的解释文本:

    json
    {
      "thought": "你对当前任务的思考过程",
      "action": "调用的工具名称",
      "parameters": { "key": "value" },
      "is_final_answer": boolean
    }
  • 原理: 降低了解析器的负担,减少了正则表达式匹配失败的概率。

2. 思维链 (Chain of Thought, CoT) 与 ReAct 框架

让模型直接给出结果容易导致逻辑跳跃或幻觉。强制模型“慢思考”能大幅提升复杂任务的准确率。

  • 策略: 在执行动作前,强制模型先输出“思考过程”。对于 Agent,最经典的是 ReAct (Reason + Act) 模式。
  • Prompt 示例:

    在回答用户问题之前,请遵循以下步骤:

    1. Thought: 分析用户的意图和当前上下文。
    2. Plan: 列出解决问题的步骤。
    3. Action: 选择合适的工具(如果需要)。
    4. Observation: (这一步由系统填充工具返回的结果)。
    5. Reflection: 检查结果是否满足需求,如果满足则输出最终答案。
  • 原理: 通过显式的推理步骤,模型更有可能发现逻辑漏洞并自我纠正。

3. 少样本提示 (Few-Shot Prompting)

这是提升稳定性最有效的手段之一。与其用千言万语描述规则,不如给它看几个完美的例子。

  • 策略: 在 System Prompt 中包含 1-3 个“输入 -> 理想输出”的完整示例,特别是针对边缘情况(Edge Cases)。
  • Prompt 示例:

    ...(前面的指令)...

    示例 1:
    用户:帮我查下明天的天气。
    助手:{"tool": "weather_api", "args": {"date": "tomorrow"}, "thought": "用户询问天气,需调用天气工具。"}

    示例 2(错误处理):
    用户:帮我预订去火星的票。
    助手:{"tool": "none", "response": "抱歉,我目前无法处理星际旅行服务。", "thought": "该请求超出了现有工具的能力范围。"}

  • 原理: 利用大模型的上下文学习能力(In-Context Learning),通过模仿来锁定输出模式。

4. 明确的边界与“负向约束” (Negative Constraints)

告诉模型“不要做什么”和“要做什么”一样重要,这能防止 Agent 跑偏或过度自信。

  • 策略: 明确列出禁止事项,以及当无法回答时的兜底策略。
  • Prompt 示例:
    • 不要 臆造工具不存在的参数。
    • 不要 假设当前的日期,必须使用 get_current_time 工具获取。
    • 如果你不知道答案,请直接回答“我不知道”,严禁 编造事实。
    • 仅使用提供的参考资料回答,不要 使用你的训练数据中的外部知识。
  • 原理: 减少幻觉(Hallucination)和非预期行为。

5. 角色定义与任务拆解 (Persona & Decomposition)

赋予 Agent 一个具体的专家身份,并要求它将大任务拆解。

  • 策略: 使用 "You are..." 开头,并要求 Agent 在执行复杂任务前先进行任务分解。
  • Prompt 示例:

    你是一位资深的 Python 代码审计专家(Agent)。你的目标是分析代码并修复 Bug。

    当面对一段长代码时,不要试图一次性修复所有问题。请先将任务拆解为:

    1. 语法检查
    2. 逻辑流分析
    3. 安全漏洞扫描
      然后逐一执行。
  • 原理: 专家角色能激活模型特定领域的潜在知识,任务拆解能避免上下文过载导致的注意力丢失。

6. 自我反思与验证 (Self-Reflection / Critic)

在 Agent 输出最终结果前,增加一个“自我审查”的步骤。

  • 策略: 在 Prompt 末尾要求模型检查自己的输出是否符合要求。
  • Prompt 示例:

    在输出最终 JSON 之前,请在内心自问:

    1. 这个 JSON 格式是否合法?
    2. 我调用的工具参数是否符合文档定义?
      如果发现错误,请在输出前修正它。
  • 原理: 大模型通常具备“识别自己错误”的能力,只要你提示它去检查。

7. 状态感知与记忆管理 (State Awareness)

Agent 在多轮对话中容易忘记之前的步骤或重复调用同一个工具。

  • 策略: 在每一轮 Prompt 中动态注入当前的“状态摘要”或“已完成步骤”。
  • Prompt 动态注入示例:

    [当前状态]

    • 已完成步骤:[1. 获取用户位置, 2. 查询附近餐厅]
    • 待执行步骤:[3. 筛选评分大于 4.5 的餐厅]
    • 历史工具报错:[工具 A 调用超时,请尝试备用方案]
  • 原理: 显式地告诉 Agent 它在流程中的位置,防止死循环(Looping)。

综合模板示例 (System Prompt)

将上述策略组合,一个高稳定性的 Agent Prompt 结构如下:

plaintext
# Role
你是一个专业的客户服务 Agent,专门负责处理订单退款。

# Objective
你的目标是根据公司政策,协助用户完成退款流程或解释为何无法退款。

# Tools
你拥有以下工具:
1. `check_order_status(order_id)`: 查询订单状态。
2. `process_refund(order_id)`: 执行退款。

# Constraints (负向约束)
- 禁止在未查询订单状态的情况下直接退款。
- 如果订单超过 30 天,严禁退款。
- 只能输出符合下方 Schema 的 JSON。

# Workflow (思维链)
1. Thought: 分析用户意图,提取订单号。
2. Action: 调用 `check_order_status`。
3. Observation: 根据返回的状态判断是否符合退款条件。
4. Response: 如果符合,调用 `process_refund`;否则解释原因。

# Output Format (结构化输出)
请严格遵循 JSON 格式:
{
  "thought": "string",
  "tool_use": { "name": "string", "params": object } | null,
  "user_reply": "string"
}

# Few-Shot Examples (少样本)
User: 我想退款,订单号是 123。
Agent: {
  "thought": "用户申请退款,需先查状态。",
  "tool_use": { "name": "check_order_status", "params": {"order_id": "123"} },
  "user_reply": "好的,正在为您查询订单 123 的状态。"
}

总结

提升 Agent 稳定性不是靠“运气”,而是靠对模型行为的约束
核心口诀:角色要清晰,输出要结构,思考要分步,例子不能少,边界要 锁死。

00:00
00:00