指导LLM代理执行任务,需要提供一套全面的指令,这不仅仅是像标准LLM界面那样问一个单一问题。对于代理,这些指令明确其身份、目的以及运作方式。这就像是给新团队成员提供他们的职位描述和初步入职指导;这些说明越清晰,他们就能越有效地开始贡献。这些初始指令通常是代理处理的第一个“消息”,它们对塑造其后续行为和决策发挥着主要作用。初始提示的作用当我们在这个语境中谈论“指导”你的代理时,我们主要是指精心编写一个强效初始提示的技巧。在许多LLM系统,特别是使用API时,这通常被称为“系统提示”或“预提示”。这是一个特殊的起始信息,在任何具体用户查询到来之前就奠定基础。这个提示远不止一个简单的命令。它是一段精心编写的文本,可以包含:代理的身份或职责(例如:“你是一个有用的助手”)。其主要目标或功能。必须遵守的限制或规则。其回复的偏好风格或格式。这个初始指令是代理的指导原则。它是其所有未来行动和交互的根本依据。对于你的第一个代理,即使以简单形式做好这一点,也能对其性能和可预测性产生显著影响。有效代理指令的组成部分为了使你的指令有效,你会希望考虑几个重要构成部分。虽然你不需要写一篇长文章,但一点点细节就能发挥很大作用。1. 确定代理的身份或职责为你的代理赋予一个身份有助于LLM保持一致的语气和风格。它告诉LLM它“应该”是什么。例如:如果你正在构建本章引言中提到的待办事项列表代理,你可能会这样开始:你是一个高效的待办事项列表管理器。 这个简单的陈述立即告诉LLM专注于与管理列表相关的任务,并采取高效、可能简洁的态度。2. 说明核心目标代理通常应该实现什么?这是对其目的的一个高层次概览。例如(对于待办事项列表管理器):你的主要功能是帮助用户创建、查看和管理他们的任务。 这明确了代理的主要职责范围。3. 提供必要的语境或限制代理是否有某些事情应该始终做,或者永远不应该做?它处理信息时是否有特定的方式?例如(对于待办事项列表管理器):你必须在删除任务前始终要求确认。(安全限制)不要提供意见或参与待办事项管理之外的对话。(范围限制)除非另有说明,否则假设所有任务都是针对当前用户的。(语境假设)4. 明确交互风格或输出格式代理应该如何沟通?它的回复应该是简洁还是详细?对于某些输出,它是否应该使用特定的格式?例如(对于待办事项列表管理器):保持你的回复清晰简洁。(交互风格)显示待办事项列表时,每项都在新行上显示,并编号。(输出格式)编写你的第一个指令:待办事项列表代理示例让我们将这些构成部分组合成一个连贯的初始指令集,用于我们即将使用的待办事项列表代理。这可能就是你提供的系统提示:你是一个高效的待办事项列表管理器。 你的主要功能是帮助用户创建、查看和管理他们的任务。 你可以添加任务、删除任务和显示当前任务列表。 操作说明: 1. 保持你的回复清晰简洁。 2. 显示待办事项列表时,每项都在新行上显示,并编号。 3. 你必须在删除任务前始终要求确认。 4. 不要提供意见或参与待办事项管理之外的对话。让我们分析一下为什么这个指令是有益的:身份:你是一个高效的待办事项列表管理器。 设定了基调和总体性质。目标:你的主要功能是帮助用户创建、查看和管理他们的任务。 清楚说明了其目的。能力:你可以添加任务、删除任务和显示当前任务列表。 告知LLM其允许的行动。虽然工具稍后会更具体地定义这些,但这为LLM做了准备。操作规则(限制与风格):保持你的回复清晰简洁。 指导沟通风格。显示待办事项列表时,每项都在新行上显示,并编号。 明确了输出格式。你必须在删除任务前始终要求确认。 施加了一项重要的安全规则。不要提供意见或参与待办事项管理之外的对话。 定义了其交互的范围。这组指令为我们的代理提供了一个扎实的起点。LLM作为代理的“大脑”,将使用这些指导方针来理解用户请求并生成适当的行动或回复。提示的迭代性为代理编写一套完美的指令很少是一次性的事情。它更像是一种技巧和一门迭代的科学,常被称为“提示工程”。你可能会发现自己会:编写初始指令。用各种输入测试你的代理。观察其行为,找出不符合预期的地方。调整你的指令来解决这些问题。重复此过程。这种编写、测试和调整的循环是开发LLM代理的基本组成部分。如果你的第一次尝试不完美,不要气馁。每次迭代都会帮助你更好地理解如何指导LLM。这些指令为何对你的第一个代理很重要即使对于一个基本代理,花时间编写清晰的初始指令也非常有益。它有助于LLM保持专注于其指定职责,减少它产生偏离主题或无益回复的可能性,并建立可预测的行为模式。这些指令是你将在此之上叠加更具体的任务目标,最终是工具和更复杂的规划机制的依据。有了这些基础指令,你的代理就能更好理解其职责和如何行动。接下来,我们将研究如何通过“明确代理的目标”来给你的代理安排一个具体的任务去完成。这将是它在你刚刚设定的操作框架内努力达到的具体目标。