本文来自于 Anthropic 组织的线下分享会,从时间上看应该是 5 月前组织的线下分享会,里面不仅有 Claude 工程和算法团队的分享,还包括 Google、Amazon、Manus 甚至是创业者和学生的分享,特别值得观看,这里把其中我认为比较优质的视频内容整理出来分享给大家。本篇文章来自于视频 Prompting for Agents,以下为原视频精华。
你可能已经习惯了和AI聊天,让它帮你写邮件、总结文章。但你有没有想过,如何指挥一个AI去独立完成一项复杂任务?比如,只给它一份设计文档,就让它自己写代码、测试、然后提交一个PR(Pull Request)?
这就是AI智能体(AI Agent)的魔力。它不再是被动的一问一答,而是一个能自主规划、使用工具、并循环往复直到达成目标的“行动派”。
来自Anthropic应用AI团队的专家Hannah和Jeremy,通过一场深入的分享,揭示了如何为这些强大的智能体编写指令(Prompting)。这和我们平时在聊天框里输入问题可大不一样,它更像是在用自然语言进行“编程”。
什么是AI智能体,我什么时候该用它?
在我们深入探讨Prompt技巧之前,得先搞清楚一个基本问题:到底什么是智能体?
Anthropic给出的定义非常简洁:智能体就是“在循环中持续使用工具的模型”。
想象一下,你给它一个任务,它会:
- 思考:分析任务,规划步骤。
- 行动:调用它能使用的工具(比如搜索、读写文件、访问API)。
- 观察:分析工具返回的结果。
- 循环:根据新的信息,更新决策,继续思考、行动、观察,直到任务完成。
听起来很酷,但千万别滥用。智能体是为“复杂且有价值”的任务而生的,把它用在所有地方只会事倍功半。那么,什么时候才是智能体大显身手的最佳时机呢?
你可以用下面这四个问题来判断:
任务足够复杂吗? 如果你能清晰地列出完成任务的每一步,那你可能只需要一个自动化的工作流,而不是智能体。智能体的用武之地在于那些“你知道目的地,却不清楚具体路线”的场景。比如数据分析,你知道你想要获得某些洞察,但数据本身可能有错误、格式不一,需要智能体在探索中动态调整分析策略。
任务价值够高吗? 智能体的运行会消耗更多资源。如果任务本身价值不高,用智能体就有点“杀鸡用牛刀”了。相反,如果一个任务能为你创造显著价值(比如直接产生收入,或将工程师从繁琐的编码中解放出来),那智能体就是你的不二之选。
任务的子步骤可行吗? 智能体需要工具来与世界互动。如果你无法为智能体提供完成任务所需的工具(比如访问特定数据库的API、读写文件的权限),那它也无能为力。在设计任务时,要确保你能为它提供必要的“武器”。
犯错的成本高吗? 如果一个错误很难被发现,或者一旦出错就造成无法挽回的损失,那么让智能体完全自主工作可能不是个好主意,或许需要加入“人类审核”环节。但如果错误是可恢复的(比如网页搜索结果不佳,再搜一次就行),或者成本很低,那就可以放心地让智能体独立工作。
简单来说,编码、复杂研究、数据分析、需要和电脑桌面交互的任务,都是智能体的绝佳应用场景。
智能体Prompting的核心秘诀
好了,现在我们知道什么时候该用智能体了。接下来,Jeremy分享了他们在构建claude-code
(一个在终端里写代码的智能体)和claude.ai
高级研究功能时总结出的宝贵经验。这些技巧,才是让智能体从“能用”到“好用”的关键。
1. 像智能体一样思考
这是最重要的原则。你必须设身处地地站在智能体的角度,去理解它的“世界”——也就是它拥有的工具和它能从工具那里得到的回应。如果换作是你,面对同样的工具和信息,你会不会感到困惑?如果一个任务的说明连人都看不懂,AI更不可能明白。
2. 给予合理的“启发式原则” (Heuristics)
Prompt工程远不止于文字游戏,它是一种“概念工程”。你需要为智能体灌输一些核心的行为准则。
举个例子:“不可逆性” 在
claude-code
中,他们教会了模型一个概念叫“不可逆性”,即不要执行任何可能对用户环境造成永久性损害的操作。这个概念需要被清晰地定义,否则一个“过于热情”的智能体可能会误解你的意图,做出超出预期的行为。另一个例子:设置“预算” 在研究任务中,他们发现模型有时会没完没了地进行网页搜索,即便已经找到了答案。后来,他们在Prompt里加入了一条原则:“当你找到答案后,就可以停止搜索了”,并且给它设定了工具调用次数的“预算”——简单问题用少于5次工具调用,复杂问题可以用10到15次。
把智能体想象成一个刚毕业的实习生,你需要非常清晰地告诉他工作的原则和边界,而不是期望他什么都懂。
3. 工具选择是关键
最新的模型(如 Claude 3.5 Sonnet 和 Opus)可以同时处理上百个工具,但它并不知道在你的特定场景下,哪个工具是首选。你需要在Prompt里明确地指导它。
“在A公司,如果你要找内部信息,应该优先搜索Slack,而不是Google Drive。”
这样的具体指导,远比给一堆工具让模型自己猜要有效得多。另外,尽量避免给模型一堆名字和描述都非常相似的工具,这会把它搞糊涂。最好是将相似的工具合并成一个。
4. 引导它的“思考过程”
不要只是打开模型的“思考”开关(thinking block/chain-of-thought)就完事了。你可以更进一步,引导它如何思考。
- 规划在前:在执行任务前,让智能体在第一个“思考块”里就规划好整个流程:“这个任务有多复杂?我大概需要调用几次工具?我该去哪里找信息?我怎么判断任务成功了?”
- 事后反思:模型从工具(比如网页搜索)拿到信息后,默认会认为这些信息都是真的。你可以引导它进行“交错式思考”(interleaved thinking),在两次工具调用之间停下来反思一下:“这个搜索结果可靠吗?我需要交叉验证一下吗?或者我应该在最终报告里加个免责声明?”
5. 预料之外的“副作用”
智能体是自主循环的,所以你对Prompt的任何一个微小改动,都可能带来意想不到的连锁反应。比如,你告诉它“一定要找到最高质量的信源”,结果这个“完美信源”根本不存在,智能体就可能会陷入无限搜索的循环,直到耗尽上下文窗口。因此,你还需要告诉它:“如果几次尝试后找不到完美信源,那也没关系,可以停下来。”
6. 帮智能体管理它的“记忆”:上下文窗口策略
Claude 3.5 Sonnet 拥有200K的上下文窗口,对于大多数任务来说都足够了。但对于长时间运行的智能体,依然可能不够用。这里有几个好方法:
- 上下文压缩 (Compaction):当上下文快满时(比如达到19万tokens),自动调用一个工具,将所有对话历史浓缩成一个简短但精确的摘要,然后把这个摘要传递给一个新的模型实例,继续工作。Anthropic发现这个方法几乎能让智能体“无限运行”。
- 外部文件/草稿纸 (External File):让智能体把重要的记忆和中间过程写入一个外部文件。需要时再读取,这相当于拥有了无限的“外接硬盘”。
- 子智能体 (Sub-agents):对于极其复杂的任务,可以设计一个“主管”智能体和几个“员工”子智能体。“员工”负责具体的搜索和执行,然后把结果压缩提炼后汇报给“主管”,“主管”再整合所有信息生成最终报告。这样可以极大地节省“主管”智能体的上下文空间。
7. 让Claude做自己
最后,别忘了,Claude本身就很擅长扮演智能体的角色。所以,从一个最简单的Prompt和最基础的工具开始,看看它会怎么做,在它犯错的地方进行迭代。不要一开始就过度设计,你很可能会被它的能力所惊喜。
实战演练:一辆Rivian R1S里能装多少香蕉?
为了让这些理论更具体,Jeremy做了一个现场演示。他问了一个模型知识库里没有答案的问题:“一辆 Rivian R1S(一款新车)里能装下多少根香蕉?”
智能体的行动过程是这样的:
- 思考与规划:它意识到需要通过网络搜索来解决。计划是:找到车的货舱容量,找到一根香蕉的平均尺寸。
- 并行工具调用:它同时发起了两个Web搜索请求,一个查车辆规格,一个查香蕉尺寸。
- 反思与迭代:它找到了货舱容量(立方英尺),也找到了美国农业部对香蕉尺寸的定义(7-8英寸长)。它意识到单位不统一,需要转换。
- 再次调用工具:它继续搜索,将单位进行换算。
- 计算与总结:最后,它在思考块中进行计算,并给出了最终答案——大约48000根香蕉。
这个过程完美地展示了智能体如何规划、使用工具、反思和迭代,最终完成了一个它本不知道答案的复杂问题。
如何科学地“考评”你的智能体?
做出了智能体,你怎么知道它做得好不好?对智能体进行评估(Evaluation)比普通任务更难,因为它的过程不可预测。但别怕,这里有几个实用的心法:
- 从小处着手:别一开始就想着建立一个包含几百个案例的庞大自动化测试集。那是个反模式。从一小撮手动测试开始,如果你的Prompt改动带来的效果很明显,你根本不需要大量样本就能看出来。
- 使用真实场景:用你的用户真正会遇到的任务来测试。如果你在做金融智能体,就用真实的金融分析任务;如果是编程智能体,就用真实世界中的编码需求,而不是算法竞赛题。
- 请LLM当“考官”:让另一个语言模型(LLM as judge)来评估智能体的产出非常有效,尤其是当你给它一个清晰的评分标准(Rubric)时。比如,“检查最终答案是否在1万到5万之间”,或者“检查报告是否引用了可靠来源”。LLM能很好地处理各种格式的输出,比简单的关键词匹配要鲁棒得多。
当然,没有什么能完全替代人工评估。你最终还是需要亲自去看看它的运行记录,理解它的思考过程,才能真正地改进它。
问答精选:那些你可能也想问的问题
问:我应该如何开始构建一个智能体的Prompt?是从一个很长的Prompt开始,还是慢慢加? 答: 从一个非常简短、简单的Prompt开始。比如就写“请代理式地搜索网页”。然后运行它,看看会发生什么。当你发现它在某些边缘情况下会失败时,再把针对性的解决方案(比如一条新的行为准则)添加到Prompt里。这是一个不断迭代、不断收集失败案例并修复它们的过程。
问:对于智能体,传统的“少样本示例”(Few-shot Examples)还有用吗? 答: 对于最前沿的模型和智能体来说,效果不如以前。因为给模型太多具体的、按部就班的例子,反而会限制它的创造力。这些模型已经比你想象的更聪明。
与其给它一步步的模仿范例,不如指导它如何去思考。比如,你不需要给一个“思维链”(Chain-of-Thought)的例子,因为模型已经内置了这个能力。你应该告诉它:“用你的思考过程来规划你的搜索策略”,或者“在思考时,要特别注意XXX”。这样既能引导它,又不会限制它的发挥空间。
构建智能体是一场充满探索的旅程。它要求我们转换思维,从一个“提问者”变成一个“教练”。从简单的指令开始,大胆尝试,你会惊讶于Claude能为你做些什么。