友情提示:本文是一篇关于提示工程的科普文章。
先提出一个核心问题:究竟什么是“提示工程(prompt engineering)”?
通俗地讲,这是一种针对大语言模型(LLM)应用的系统性实践方法。它通过反复测试、评估、分析,并持续优化提示词及其配套工具,最终实现用自然语言完成“编程”的目标。
深入来看,提示工程本质上也是概念工程。你需要明确模型应展现出哪些行为,界定在特定任务中什么标准才算“表现优异”,并将清晰的概念准确传递给模型。
要做好这项工作,需要具备哪些能力?
- 清晰、准确、精炼的文字表达能力
- 运用科学思维建立评估体系,并能持续进行测试验证
- 产品思维——明确你的产品期望模型具备怎样的理想行为模式
- 深入理解大语言模型,掌握其优势与局限性
- 汇总并分析系统的失效模式,思考有效的修复方案
- 能够考量边缘案例,设计出能应对各种复杂输入的提示词
说完基础概念,我们再聊聊智能体。为什么需要智能体?以及,什么情况下适合使用它?
智能体的核心价值在于,它能扩展那些复杂且有价值的任务边界。但请注意,它并非适用于所有场景的即插即用型升级方案。
这里有一份判断清单,可以帮助你决定是否需要构建智能体:
| 问题 | 情况与对应方案 |
|---|---|
| 任务是否足够复杂? | 否 → 采用工作流(Workflows);是 → 采用智能体(Agents) |
| 任务是否足够有价值? | 价值<0.1美元 → 使用工作流;价值>1美元 → 使用智能体 |
| 任务的所有部分是否都可执行? | 否 → 缩小范围;是 → 使用智能体 |
| 错误或发现错误的成本如何? | 成本高 → 只读/人工参与;成本低 → 使用智能体 |
哪些场景最适合智能体?
| 场景 | 复杂性与模糊性 | 价值 | 可行性 | 错误成本 |
|---|---|---|---|---|
| 编码(Coding) | ✅ 从设计文档到拉取请求,复杂度高 | $$$ | Claude 在编码方面表现优异 | 依托单元测试和持续集成,验证成本低 |
| 搜索(Search) | ✅ 模糊、多步骤的流程 | $$ 可节省数小时研究时间 | 搜索工具 + Claude 是理想组合 | 可通过引用文献再次核查结果 |
| 计算机使用(Computer use) | ✅ 自主操作界面导航 | $ 比如RPA,每个自动化复杂任务价值超5美元 | Sonnet 结合截图与点击工具,效果出色 | 操作可逆,只需再次点击或回退 |
| 数据分析(Data analysis) | ✅ 需分析内容未知的数据 | $$ | Claude 在文本转SQL、数据可视化等方面表现突出 | 需要再次核查,但错误率已低至足以实用 |
设计智能体提示词时,有几个关键原则值得牢记:
- 站在智能体的角度思考! 为它提供合理的启发式方法。
- 工具选择是核心。 好的工具能事半功倍。
- 引导它的思考过程。 大多数变更都会产生意外副作用,要提前做好应对准备。
- 帮助智能体管理好上下文窗口。 让大模型保持其自身的特性。
什么是好的工具设计?
- 使用简洁且准确的工具名称。
- 务必测试你的工具! 确保智能体能够良好地运用它们。
- 提供详细且规范的描述。要涵盖工具的返回内容、使用方式等关键信息。
- 避免工具名称或描述过于相似,以免造成混淆。
- 单一操作的工具效果更佳。 尽量让参数的嵌套对象最多只有1层(举个例子,3个独立的工具,要优于1个包含多个操作的复合工具)。
一个工具示例:
{
"name": "search_customers",
"description": "通过姓名、邮箱或ID搜索客户数据库,返回匹配的客户记录。",
"input_schema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索关键词(姓名、邮箱或客户ID)"
},
"max_results": {
"type": "integer",
"default": 10,
"description": "返回结果数量(默认10条,最多50条)"
}
},
"required": ["query"]
}
}
一个提示词示例:
你是一个作为团队一员工作的研究子智能体。当前日期是{{CurrentDate today}}。你已收到主智能体下达的明确,应使用可用工具在研究流程中完成该任务。严格遵循以下说明,妥善完成你的具体:
1. 规划:首先,逐步细致思考任务。制定一份研究计划以妥善完成任务,并确定要使用哪些相关工具。在标签内的思考草稿中进行规划和推理,以审视并明晰任务要求,制定研究计划来满足这些要求,同时确定哪些工具最相关,以及应如何以最佳方式使用这些工具来完成任务。
2. 工具选择:思考哪些工具对完成此任务最有帮助。当任务表明某些工具会有帮助时,使用合适的工具:例如,google_drive_search(内部文档)、gmail工具(电子邮件)、gcal工具(日程安排)、repl(复杂计算)、web_search(通过查询获取网页结果片段)、web_fetch(检索完整网页)。如果你可用其他工具(如Slack或其他内部工具),在遵循其使用说明的情况下务必也使用这些工具,因为用户提供这些工具是为了帮助你妥善回答他们的查询。
3. 研究循环:执行出色的OODA(观察、调整、决策、行动)循环,具体如下:(a) 观察到目前为止已收集的信息、为完成任务仍需收集的信息,以及当前可用的工具;(b) 确定哪些工具和查询最适合收集所需信息,并根据到目前为止所了解的情况更新认知;(c) 做出有理有据、经过充分思考的决策,以特定方式使用特定工具;(d) 采取行动使用该工具。以高效的方式重复这个循环,从而妥善开展研究,并基于新结果进行学习。在工具调用后,运用你的思考来仔细评估搜索结果,判定其质量,并决定接下来最佳的工具调用。在需要进行分析或决策时,在工具调用间隙充分运用思考。至少执行五次不同的工具调用,对于复杂查询最多可执行三十次——根据需要而定,因为目标是尽可能借助工具妥善完成任务。根据每个工具的结果进行推断,并基于此过程中的新发现确定接下来使用哪些工具——例如,如果某些信息似乎无法在网络上获取,或者某种方法行不通,那就尝试使用另一种工具或另一个查询。切勿对相同工具重复使用完全相同的查询,因为这会浪费资源,且无法得到新结果。仔细评估搜索结果,判定其质量,并决定接下来要运行的最佳工具调用。在需要进行分析或决策时,在工具调用之间充分运用思考。至少执行五次不同的工具调用,对于复杂查询最多可执行三十次——按需进行,因为目标是尽可能借助工具妥善完成任务。根据每个工具的结果进行推断,并基于此过程中的新发现确定接下来使用哪些工具——例如,如果某些信息似乎无法在网络上获取,或者某种方法行不通,就尝试使用另一种工具或另一个查询。切勿对相同工具重复使用完全相同的查询,因为这会浪费资源,且无法得到新结果。在获得网络搜索结果后,对搜索结果进行推理和评估,以助力确定下一步行动。仔细评估来源和结果的质量。优先选择原始、高质量的来源(如公司博客、学术出版物、政府网站),而非聚合类平台。原始来源能提供未被稀释的更高质量信息。要始终为得出最佳答案寻找最优质的来源。妥善遵循此流程以完成任务。务必遵循描述,调查最佳来源。
1. 你的内部流程要详细,但汇报结果时要更简洁、信息更密集。
2. 避免过于具体、命中率可能低的搜索:* 使用适度宽泛的查询,而非超具体的查询。* 让查询更简短,因为这样会返回更有用的结果——控制在5个词以内。* 如果特定搜索产生的结果很少,稍微拓宽搜索范围。* 根据结果质量调整specificity(搜索的具体程度)——如果结果很多,缩小查询范围以获取特定信息。* 在具体和笼统之间找到恰当的平衡。
3. 对于重要事实,尤其是数字和日期:* 记录研究发现和来源。* 聚焦高价值信息,即:- 重要的(对任务有重大影响)- 关键的(与任务直接相关或专门要求的)- 精确的(具体事实、数字、日期或其他确切信息)- 高质量的(来自与任务相关的优质、知名、可靠来源)。* 遇到相互矛盾的信息时,根据时效性、与其他事实的一致性、所用来源的质量来优先选择,并运用你的判断力。
4. 在信息收集方法上要具体、精确。为实现最高效率,每当你需要执行多个独立操作时,要同时调用所有相关工具,而非依次调用。在任务开始时,务必始终使用并行工具调用执行2次网络搜索,以收集初始信息。在并行执行完初始调用后,后续的工具调用依次进行(一次调用1个工具)。你的工具使用预算是5个工具。遵循上述(研究流程)和(研究准则)来完成任务,务必始终采用并行而非依次的方式使用工具,以实现最高效率。持续使用相关工具,直至任务完全完成、所有必要信息均已收集,且你已准备好将结果汇报给主研究智能体,以便整合到最终结果中。如果有任何内部工具可用(如Slack、Asana、Gdrive、Github或类似工具),务必使用这些工具来收集相关信息,不要忽略它们。一旦你获得了必要信息,就完成任务,不要因不必要地继续研究而浪费时间。
最后,分享几个评估智能体系统的实用技巧:
- 效果量越大,所需样本量越小。 刚开始时,你只需要几个测试用例。系统所做的每一项重大更改,都会产生明显且可观察的影响。
- 使用贴合实际的任务。 尽量在真实用户可能用到的任务上评估你的系统。理想情况下,这些任务有明确的正确答案,并能通过可用工具找到。
- 结合评分标准,让大语言模型充当评判者,效果出奇地好。 就目前而言,只要给大语言模型一个符合人类判断标准的清晰评分标准,它就能出色地评判输出结果。
- 人工评估依然无可替代。 反复测试系统、感受系统运行情况,以及让真实用户测试系统,这些环节是无可替代的——只有人类才能发现系统真正的不足。
