很多 AI 代理并不是“模型能力不够”,而是提示词只描述了任务,却没有规定任务边界、判断依据和交付格式。结果往往是:用户想要一份可以直接发布的优惠信息,代理却写成泛泛而谈的介绍;用户要求输出 JSON,代理又夹带解释;用户只提供了部分资料,代理却自行补充看似合理的细节。
要减少这类“不符合预期”的输出,可以把代理提示词拆成三个要素:任务目标、执行上下文、输出契约。这三个要素分别解决“要做什么”“依据什么做”和“最终交付成什么样”的问题。
任务目标不能只写“帮我处理这段内容”或“生成一篇文章”。这类表达给模型留下了太多解释空间,代理可能会自行决定任务范围、处理方式和完成标准。
更有效的写法,需要同时说明动作、对象和判断标准。例如:
任务:整理用户提供的优惠活动资料。 目标:筛选出普通用户可以直接参与的活动,并改写成简洁说明。 判断标准:只保留资料中明确出现的活动名称、参与方式、适用范围和时间。
这里的重点不是把提示词写得很长,而是让模型知道“完成任务”的具体含义。对于代理来说,任务目标还应包含异常情况的处理方式,例如资料不足时停止推测、信息冲突时标记待确认,而不是强行给出结论。
代理通常要处理用户输入、历史对话、检索资料或工具返回结果。如果没有明确这些信息的优先级,模型可能把用户的猜测当成事实,也可能使用过期上下文,甚至自行填补缺失内容。
可以在提示词中把上下文分成几类:
可用信息: - 用户输入:本次任务的直接需求。 - 资料内容:允许引用和改写的事实依据。 - 历史记录:仅用于理解用户偏好,不作为新的事实来源。 使用规则: - 资料没有明确出现的信息,不得写成确定事实。 - 不同资料存在冲突时,保留冲突并提示人工确认。 - 缺少关键字段时,不要自行编造,返回缺失字段。
这部分相当于给代理划定“活动范围”。尤其是带有搜索、知识库或工具调用的代理,必须明确哪些内容可以使用,哪些内容只能作为背景,哪些内容完全不能推断。
很多输出偏差并非内容错误,而是格式不符合后续流程。例如下游程序需要结构化数据,代理却输出了说明段落;运营人员需要短文案,代理却附带了分析过程。
输出契约至少应包含格式、字段、长度和失败处理方式:
输出要求: 1. 只返回 JSON,不添加 Markdown 代码围栏。 2. 字段必须包含 title、summary、steps、warnings。 3. steps 必须是数组;没有步骤时返回空数组。 4. 无法确认的信息填 null,不得使用猜测内容代替。 5. 如果资料不足以完成任务,status 返回 "insufficient_data"。
如果最终结果是给人阅读的文章,也可以采用自然语言契约:
输出要求: - 先给出一句结论,再给出具体操作说明。 - 使用简体中文。 - 不重复用户已经提供的背景。 - 不要添加资料中没有出现的品牌、价格、时间和链接。 - 如果存在不确定信息,用“待确认”明确标记。
任务目标决定方向,上下文决定边界,输出契约决定交付质量。三者缺一不可。只有任务目标,没有上下文,代理容易胡乱补充;只有上下文,没有输出契约,结果难以接入工作流;只有格式要求,没有清晰目标,代理可能生成“格式正确但内容无用”的结果。
假设你想做一个“优惠信息整理代理”。最初的提示词可能是:
你是一个优惠助手,请根据用户提供的内容整理优惠信息,并写得清楚一点。
这句话看起来已经说明了角色和任务,但仍然存在几个问题:
第一,“优惠信息”没有定义范围,代理可能把普通促销、抽奖、会员活动混在一起。第二,“写得清楚一点”不是可执行标准,模型无法判断文章应该多长、保留哪些字段。第三,没有规定资料不足时怎么办,代理很容易补充不存在的活动时间或参与条件。
可以改写为:
你是优惠信息整理代理。 ## 任务目标 将用户提供的活动资料整理成普通用户可以直接理解的活动说明。 只处理资料中明确存在的活动,不负责寻找或补充其他活动。 ## 资料规则 - 活动名称、参与条件、有效时间、参与步骤和限制条件,只能来自用户输入或资料内容。 - 缺少某个字段时,标记为“未说明”。 - 资料之间出现冲突时,不要自行判断,列出冲突内容并标记“需要确认”。 - 不得虚构价格、名额、中奖概率、官方承诺或活动链接。 ## 输出格式 使用以下结构: 活动名称: 适用人群: 参与条件: 操作步骤: 时间与限制: 需要确认: 每个活动单独整理,不要把多个活动合并成一段。 语言简洁,优先保留会影响用户是否能够参与的信息。
这次优化的关键,不是增加“请认真处理”之类的提醒,而是把代理的判断路径写出来了。它先确定处理对象,再规定资料边界,最后固定交付格式。
如果这个代理还需要决定是否调用搜索或其他工具,可以继续补充工具使用条件:
工具使用规则: - 用户只要求整理已提供资料时,不调用外部工具。 - 用户明确要求核验活动状态时,才允许调用核验工具。 - 工具没有返回结果时,说明“暂未核验”,不得用常识替代结果。
这样可以避免代理为了显得完整而主动搜索,或者在工具失败后继续编写未经确认的信息。
再看一个更常见的场景:你需要一个 AI 代理,根据产品资料生成短视频口播稿。原始提示词可能是:
请根据资料写一篇吸引人的短视频文案,要有开头、卖点和结尾。
这类提示词的问题在于“吸引人”过于主观。代理可能使用夸张承诺、虚构用户反馈,或者把资料中的所有信息都塞进文案,导致口播稿冗长。
可以将要求改成三个层次:
你是短视频口播稿生成代理。 ## 任务目标 根据输入资料生成一份适合普通用户理解的口播稿。 重点是清楚说明产品解决什么问题、适合谁使用,以及用户下一步可以做什么。 ## 内容边界 - 只能使用输入资料中明确出现的功能、使用方式和适用人群。 - 不得虚构销量、评价、收益、排名或限时信息。 - 没有证据时,不使用“最好”“第一”“百分百有效”等绝对表达。 - 如果资料没有说明价格,不主动补充价格。 - 如果资料中没有明确行动入口,结尾只写“请根据页面说明操作”,不要编造链接。 ## 输出契约 输出四段: 1. 开头:用一个具体使用场景引出问题,控制在两句话内。 2. 核心说明:解释产品能做什么,必须对应输入资料。 3. 适用人群:说明哪些用户可能更适合使用。 4. 行动建议:给出资料中明确存在的下一步操作。 总长度控制在适合口播的范围内,句子短一些,不输出标题、分析过程和括号说明。
如果代理仍然容易跑题,可以加入一个“生成前自检、输出时不展示”的内部判断要求:
生成前请检查: - 每个具体事实是否都能在输入资料中找到依据? - 是否出现了资料没有提供的数字、品牌、时间或承诺? - 是否完整回答了产品用途、适用人群和下一步操作? - 如果资料不足,是否明确保留不确定性? 只输出最终口播稿,不输出检查过程。
这里的自检不是让模型展示思考过程,而是要求它在交付前核对结果。对于有固定内容格式的代理,这种“输出前验证”通常比单纯重复“请严格遵守要求”更有效。
很多人发现代理输出不稳定后,会不断追加规则:
要准确、专业、简洁、有吸引力、符合用户需求、不要出错、不要跑题。
这些词表达了愿望,却没有告诉模型如何判断“准确”“简洁”和“符合需求”。更好的做法是把抽象要求改成可检查的标准:
准确:每个事实都必须能在输入资料中找到依据。 简洁:删除不影响用户决策的背景介绍。 不跑题:只回答用户指定的任务,不扩展相关但未要求的内容。
提示词优化的方向,不是单纯增加字数,而是把主观形容词转换成具体判断规则。
一个代理同时负责资料提取、事实核验、内容改写和格式转换时,提示词往往越来越复杂。模型需要在同一轮中处理太多目标,最终可能出现格式正确但事实遗漏,或者内容完整但没有按要求输出的情况。
更稳妥的做法是按阶段拆分:
阶段一:从资料中提取事实字段。 阶段二:检查字段是否缺失或冲突。 阶段三:根据已确认字段生成用户可读内容。 阶段四:按照最终格式输出。
如果工作流支持多个节点,可以让每个节点只承担一个主要职责。即使仍然使用同一个模型,也应在提示词中明确当前阶段的输入和输出,避免代理一边提取、一边发挥、一边改写。
示例确实可以帮助模型理解格式,但只提供“资料完整、结果理想”的示例还不够。代理真正容易出错的,往往是缺字段、内容冲突或用户要求超出资料范围的情况。
因此,示例最好覆盖至少一种异常输入:
输入: 活动名称:春季优惠 参与方式:资料未说明 有效时间:资料未说明 期望输出: 活动名称:春季优惠 参与条件:未说明 操作步骤:未说明 时间与限制:未说明 需要确认:参与方式和有效时间尚未提供
这个例子传达的不是具体活动内容,而是处理缺失信息的方法。对于代理而言,异常示例往往比再增加一条“不要编造”更有指导价值。
提示词在聊天窗口里能正常工作,不代表放进代理工作流后仍然稳定。工作流中的输入可能来自表单、文件、搜索结果或上一个节点,字段名称和内容完整度都可能变化。
因此,提示词中最好明确输入接口:
输入字段: - user_request:用户本次需求,可能为空。 - source_material:待处理资料,可能包含多个来源。 - output_format:可选的输出格式要求。 处理规则: - user_request 为空时,先返回缺少需求说明。 - source_material 为空时,不生成事实性内容。 - output_format 未提供时,使用默认格式。
这能减少代理把整段原始数据当成一句自然语言来理解的情况,也方便后续调整工作流。
你可以根据具体场景替换括号中的内容:
你是【代理角色】,负责完成【具体任务】。 ## 任务目标 最终要交付:【可验证的结果】。 成功标准是:【判断结果是否合格的标准】。 ## 输入说明 你会收到: - 【输入字段一】:用途和可能的缺失情况 - 【输入字段二】:用途和可信范围 - 【输入字段三】:用途和优先级 ## 执行规则 1. 先确认任务对象和处理范围。 2. 只使用允许的资料来源。 3. 缺少关键资料时,返回缺失项,不要自行补充。 4. 资料冲突时,保留冲突并标记待确认。 5. 只有在满足【工具调用条件】时,才调用工具。 ## 输出契约 输出格式:【自然语言 / JSON / 表格 / 固定字段】 必须包含:【字段或内容模块】 不得包含:【分析过程、无依据事实、额外说明等】 失败时返回:【明确的失败格式或提示】 ## 输出前检查 确认结果是否: - 完成了任务目标; - 使用了正确的资料范围; - 遵守了格式和字段要求; - 对缺失或冲突信息进行了标记。
实际使用时,不要一开始就把所有可能情况写进去。先用一个真实任务测试代理,记录它在哪个环节出错,再针对性补充规则。例如它经常虚构时间,就加强资料边界;它经常输出多余解释,就收紧输出契约;它经常遗漏字段,就增加固定结构或异常示例。
提示词优化本质上是把“我希望代理聪明一点”,改写成“代理在什么条件下,按照什么依据,交付什么结果”。当任务目标、执行上下文和输出契约彼此对应时,代理的输出质量通常会比单纯堆叠角色设定和形容词更稳定。
Δ
Ctrl+D