LLM代理要有效规划和执行任务,特别是需要多步骤完成的任务,它必须先理解自己的目标。就像一个人在规划路线前需要知道目的地一样,代理在确定必要行动之前也需要一个明确的目标。明确定义的目标是代理运作的根本,并提供了制定它们的方法。为什么明确目标很重要想象一下,你让朋友“处理一下你凌乱的房间”。他们可能稍微整理一下,也可能把所有东西重新组织一遍,或者他们可能只是茫然地看着,不确定从何开始。这个指令太模糊了。LLM代理也面临类似的挑战。没有精确的目标,代理的行动可能会效率低下、方向错误或完全没有成效。明确的目标很重要,原因有几点:规划方向: 明确定义的目标是任何计划的起点。如果代理清楚地知道它需要完成什么,它就能确定所需的步骤顺序或工具。比如,一个“查找巴黎当前天气并将其通过电子邮件发送给我”这样的目标,能让代理规划:首先,使用天气工具查询巴黎;其次,使用电子邮件工具发送信息。集中与效率: 明确的目标可以防止代理在不相关的行动上浪费资源。它帮助代理将其“思考”(LLM的处理过程)集中在手头的问题上,从而带来更快、更相关的结果。可衡量结果: 当目标明确时,更容易判断代理是否成功或失败。如果目标是“总结关于AI伦理的最新消息”,你可以评估这个总结。如果目标仅仅是“消息”,那么成功的定义就更难了。工具选择: 如我们稍后讨论工具时将看到的,代理通常可以访问各种功能。明确的目标有助于代理(或指导它的LLM)选择最适合这项工作的工具。如果没有明确定义的目标,代理可能会陷入循环,产生无用的信息,或者无法令人满意地完成任务。良好目标的特点当你告诉代理要做什么时,请考虑如何使你的指令尽可能有效。一个好的LLM代理目标通常具有以下品质:具体: 目标应该精确说明需要做什么。避免模棱两可。不够具体: “帮我安排我的旅行。”更具体: “查找下周末旧金山三家可入住的宠物友好型酒店,每晚预算低于200美元。”行动导向: 目标应该暗示代理可以执行的一个或一组行动。行动导向性不足: “关于LLM的信息。”行动导向性更强: “列出大型语言模型在商业中的三个常见应用。”明确预期输出(如适用): 如果你期望特定的输出,请说明它。输出不明确: “告诉我这份文档的内容。”输出明确: “将附件文档总结为三个要点,突出主要结论。”可实现: 目标应该是代理通过其LLM能力和任何可用工具能够实际完成的事情。要求一个简单的代理“解决饥饿问题”不是一个可实现的目标。将制定目标想象成给你的代理一份非常清晰的任务简报。误解的空间越小,代理的表现就会越好。通过提示定义目标对于大多数LLM代理,你主要通过提示来传达目标。提示是你给代理的初始指令或查询。仔细编写此提示对于设定明确的目标非常重要。考虑以下示例:目标1: 获取特定信息模糊提示/目标: “找些关于木星的东西。”问题: 什么类型的“东西”?多少?什么格式?代理可能会返回一个随机事实、一篇长文章,或者要求澄清。清晰提示/目标: “木星的直径是多少公里?根据NASA,它官方有多少颗卫星?”优点: 这很具体(直径,卫星数量),指明了来源偏好(NASA),并暗示一个事实性的、简洁的答案。目标2: 使用工具执行任务(例如,日历工具)模糊提示/目标: “管理我的日程。”问题: 这太宽泛了。是意味着添加事件、清空日程,还是其他什么?清晰提示/目标: “下周二下午2点与'team@example.com'安排一个名为'项目同步'的会议,并在会议前1小时添加提醒。”优点: 这明确说明了行动(安排会议)、细节(标题、时间、参与者)以及相关的子任务(添加提醒)。编写用于定义目标的提示时:使用简单、直接的语言。如果可能,分解复杂请求,或确保整体目标清晰明确。如果重要,请指定你期望的响应格式或类型。下图说明了用户的请求如何转化为明确的目标,然后目标如何驱动代理的规划和执行。digraph G { rankdir=TB; graph [fontname="Arial", fontsize=10]; node [shape=box, style="filled,rounded", fontname="Arial", fontsize=10]; edge [fontname="Arial", fontsize=9]; user_request [label="用户请求 / 任务输入\n(例如,'伦敦天气如何?')", fillcolor="#a5d8ff"]; objective_formulation [label="目标定义\n(目标:提供伦敦当前气温\n和天气情况)", fillcolor="#96f2d7"]; planning [label="规划阶段\n(1. 确定需要天气工具。\n2. 确定工具输入:'伦敦'。\n3. 计划输出格式。)", fillcolor="#ffe066"]; execution [label="执行\n(1. 调用天气工具,输入'伦敦'。\n2. 接收天气数据。)", fillcolor="#ffc9c9"]; output [label="结果 / 产出\n(例如,'伦敦气温15°C,\n小雨。')", fillcolor="#b2f2bb"]; user_request -> objective_formulation [label=" 转化为 "]; objective_formulation -> planning [label=" 指导 "]; planning -> execution [label=" 引向 "]; execution -> output [label=" 产生 "]; }目标是从用户请求中得出的一个明确界定的目的,它指导着代理的规划和执行阶段。随着你构建更复杂的代理,你可能会遇到目标从正在进行的过程或先前的互动中衍生出的情况。然而,对于代理的基础开发,从通过提示传达的清晰、明确陈述的目标开始是最有效的方法。这种清晰性是一个代理能够制定合理行动计划的根本,当我们讨论任务分解时将进一步查看此主题。如果主要目的模糊不清,将其分解为清晰的步骤对代理来说会变得困难得多。