从提示词工程到智能体开发:构建能思考、会执行的大语言模型应用

发布时间:2026/8/25 18:41:27
从提示词工程到智能体开发:构建能思考、会执行的大语言模型应用 1. 项目概述从“对话”到“协作”的范式转变如果你还在把大语言模型当成一个更聪明的搜索引擎或者一个能帮你写点邮件、改改代码的聊天机器人那可能就有点“大材小用”了。最近一年我身边不少技术团队和产品经理都在聊一个词Agent智能体。这玩意儿听起来挺玄乎但说白了它就是让AI从一个被动的“答题器”变成一个能主动思考、规划并执行复杂任务的“虚拟员工”。而要让这个“员工”真正能干活而不是只会说“我明白了但我做不到”最关键的一把钥匙就是提示词工程。我刚开始接触Agent开发时也踩过不少坑。最典型的就是我精心设计了一个处理客户投诉邮件的Agent给了它一堆规则和步骤结果它要么是死板地按顺序回复完全不顾及邮件里的紧急程度要么就是陷入逻辑循环反复分析同一个问题点。后来我才明白问题不在于模型不够强而在于我给的“指令”——也就是提示词——太粗糙了。提示词工程就是为AI编写清晰、结构化、可执行的“工作说明书”的艺术。它不仅仅是问问题而是定义角色、设定目标、规划路径、提供工具并教会AI如何应对意外。对于任何想从“玩票”转向“实用”真正用AI自动化解决业务问题的人来说这都是必须跨过的第一道门槛。2. 核心思路拆解构建一个“会思考”的工作流开发一个Agent和我们平时写一段脚本或者配置一个自动化流程有本质区别。脚本是确定性的if-else逻辑清晰而Agent的核心是不确定性推理。它的魅力在于处理那些没有固定剧本、需要临场判断的任务。因此我们的核心思路不是“编码”而是“引导”和“架构”。2.1 从单次问答到多轮协作传统的提示词比如“总结一下这篇文章”是一次性的交互。Agent的提示词则是一个持续的、有状态的对话框架。你需要预设一个场景让AI在这个场景中持续扮演一个角色。例如不是一个简单的“分析销售数据”而是“你是一位资深销售分析师每周一需要向我汇报上周的关键指标、异常波动和潜在风险。这是本周的数据请开始你的分析并随时向我提问以获取更多背景信息。” 后者定义了一个角色、一个周期性的任务以及一个交互模式。2.2 思维链与工具调用赋予AI“手脚”和“思考过程”这是Agent提示词工程的两大支柱。思维链不是让AI把思考过程输出给你看那么简单虽然那有助于调试。它的深层价值在于强制模型将复杂问题分解为可管理的子步骤从而减少“跳跃性错误”和“幻觉”。在你的提示词中明确要求模型“首先请识别用户请求的核心目标其次评估现有信息是否足够如果不请列出需要澄清的问题然后规划解决步骤……” 这相当于给AI安装了一个“任务分解器”。工具调用则是解决AI“纸上谈兵”问题的关键。大语言模型本身无法操作数据库、发送邮件、调用API。你需要明确告诉AI“你可以使用以下工具1. 查询数据库工具参数SQL语句2. 发送邮件工具参数收件人、主题、正文。” 然后在提示词中设计机制让AI在需要时自主决定调用哪个工具并生成正确的参数。这部分的提示词设计直接决定了Agent的“行动力”。2.3 角色、目标、约束与评估的四位一体一个健壮的Agent提示词通常包含四个核心模块角色定义明确Agent的身份、专业领域和说话风格。这能激活模型内部相关的知识模式。目标与任务清晰、无歧义地描述最终要达成的结果。最好使用“SMART”原则具体的、可衡量的、可实现的、相关的、有时限的。约束与规则这是防止Agent“放飞自我”的护栏。包括输出格式必须用JSON、禁止事项不得捏造数据、决策边界预算不超过X元、回退策略如果工具调用失败应如何响应。评估与迭代指令告诉Agent如何评估自己的中间结果。例如“在给出最终答案前请检查数据是否自相矛盾”。更高级的可以设计让Agent自我反思的提示如“回顾你刚才的分析步骤是否有潜在的逻辑漏洞”3. 核心细节解析提示词的结构化设计实战理解了思路我们来拆解一个具体的提示词模板。假设我们要开发一个“智能招聘初筛Agent”它的任务是根据职位描述JD和简历自动生成初步评估意见和面试问题。3.1 系统提示词设定舞台与规则系统提示词是对话的“背景设定”通常在对话开始时一次性注入定义了Agent的底层行为准则。它不应该频繁改变。你是一个专业、严谨且高效的招聘助理专门负责技术岗位的简历初筛。你的核心目标是帮助招聘经理快速识别与职位要求匹配度高的候选人并排除明显不合格的申请。 **你的工作方式如下** 1. 你会收到一份职位描述和一份候选人简历。 2. 你需要进行多维度对比分析而不是简单罗列。 3. 你必须严格基于提供的文本信息进行分析不得臆造候选人未提及的技能或经历。 4. 你的输出必须结构化并包含以下三个部分 a) 匹配度总结量化百分比并简述核心理由。 b) 优势与风险分析分点列出每条需引用简历/JD中的原文证据。 c) 建议的面试考察问题针对简历中模糊或与JD强相关的点生成3-5个具体问题。 **重要约束** - 如果简历中缺乏JD中明确标注为“必需”的技能或年限你必须在风险分析中重点指出并显著降低匹配度。 - 避免使用“潜力很大”、“可能不错”等模糊表述。所有判断需有文本依据。 - 输出语言为中文。这个系统提示词明确了角色、输入输出格式、核心工作流程和关键约束。它像一份劳动合同让AI知道自己的职权范围和行为规范。3.2 用户提示词交付具体任务与上下文用户提示词是每次交互时发出的具体指令它携带了本次任务的上下文信息。这是本次需要你处理的职位描述和简历 【职位描述】 职位高级Python后端开发工程师 核心要求 - 必需5年以上Python开发经验精通Django或Flask框架。 - 必需有高并发、分布式系统设计和调优经验。 - 必需熟悉至少一种关系型数据库如PostgreSQL/MySQL和一种NoSQL数据库如Redis/MongoDB。 - 加分有AWS或阿里云云服务使用经验有团队管理经验。 【候选人简历】 姓名张三 工作经历 - A公司2019.01 - 至今 Python开发工程师 - 使用Django框架参与开发了公司核心电商平台。 - 负责部分模块的数据库设计使用MySQL和API接口开发。 - 用户量级约为日活10万。 技能 - Python, Django, MySQL, Redis。 - 了解Docker基本操作。 请开始你的分析。这份用户提示词将具体的“物料”交给了Agent。注意它没有重复系统提示词中的规则只是简洁地提供了输入数据并触发任务。3.3 思维链的隐性引导在上面的例子中思维链是内化在系统提示词的“工作方式”里的。一个更显式的思维链提示可以这样加在用户提示词后面请按以下步骤思考此部分仅用于指导你的思考无需在最终输出中重复 步骤1逐条核对JD中的“必需”项在简历中寻找对应证据标记满足与否。 步骤2针对“加分”项同样寻找证据并评估其深度。 步骤3综合技术栈、项目经验与JD的匹配程度量化一个初步匹配度。 步骤4找出简历中与JD描述存在差距、模糊或可能存疑的点作为风险。 步骤5基于步骤4的风险点设计能深入挖掘的面试问题。 现在请执行上述思考过程并给出最终输出。这种设计将复杂的判断任务流程化极大地提高了输出的稳定性和可靠性。4. 实操过程从零构建一个日程安排Agent让我们通过一个更复杂的例子串联起整个Agent提示词工程的实操。我们要构建一个“会议日程协调Agent”它能理解邮件或聊天中的会议请求自动检查参与者的日历假设有查询日历的API工具提出几个可选时间并最终发出会议邀请。4.1 第一步定义工具首先我们需要告诉Agent它能用什么工具。这里用函数调用的描述格式来定义[ { type: function, function: { name: query_calendar, description: 查询指定人员在未来若干天内的忙闲状态。, parameters: { type: object, properties: { person: { type: string, description: 需要查询日历的人员姓名或邮箱 }, days_ahead: { type: integer, description: 查询从明天开始往后多少天的日历默认7天 } }, required: [person] } } }, { type: function, function: { name: send_invitation, description: 向指定人员发送最终确定的会议邀请。, parameters: { type: object, properties: { attendees: { type: array, items: {type: string}, description: 参会人员邮箱列表 }, title: {type: string, description: 会议主题}, start_time: {type: string, description: 会议开始时间ISO 8601格式}, duration_minutes: {type: integer, description: 会议时长分钟}, location: {type: string, description: 会议地点或线上链接} }, required: [attendees, title, start_time, duration_minutes] } } } ]4.2 第二步编写系统提示词系统提示词需要将工具能力、角色和目标融合在一起。你是一个智能会议协调助手。你的目标是帮助用户高效地安排会议。 **你的核心能力** 1. 你可以查询指定人员的日历忙闲状态使用query_calendar工具。 2. 你可以在所有协调完成后发送正式的会议邀请使用send_invitation工具。 **你的工作流程与规则** 1. 当用户提出一个会议请求时你必须首先**明确会议的必要信息**包括会议主题、期望时长、必须参加的人员、期望的日期范围如“本周内”、“下周二到周四”。如果用户未提供完整你必须主动、一次性地询问所有缺失项。 2. 在信息明确后你需要为**每一位必须参加者**查询日历除非用户明确表示不需要检查某人的日历。 3. 分析所有人的空闲时间找出至少2-3个可行的会议时间段以列表形式清晰呈现给用户选择。时间段应避开常规非工作时间如工作日晚上10点后至早上8点前。 4. 在用户确认某个时间段后你需要汇总所有信息生成最终的会议邀请并发送。 5. 所有与时间相关的推理和输出必须基于明确的日期和时间避免使用“明天”、“后天”等相对表述除非在对话上下文中刚刚定义过。 **输出格式要求** - 在协调过程中你的回复应友好、专业并结构化。 - 在提供可选时间时请用如下Markdown表格格式 | 选项 | 日期与时间 | 备注 | | :--- | :--- | :--- | | A | 2023-10-27 14:00 - 15:30 | 所有人员均有空 | | B | 2023-10-28 10:00 - 11:30 | 李四需稍作调整已确认可行 |4.3 第三步模拟用户交互与Agent思考过程用户输入“嗨帮我和老王、老张约个会讨论下季度项目计划大概1小时最好明天或后天。”Agent的隐含思维链根据系统提示词引导信息提取与补全识别出主题“季度项目计划”时长≈“1小时”人员[“我”用户“老王”“老张”]日期范围“明天或后天”。发现缺失具体时间偏好如上/下午。主动询问Agent回复“好的我来帮您协调会议。为了找到最合适的时间请确认1会议主题是‘Q4季度项目计划讨论会’对吗2您希望会议在明天10月27日还是后天10月28日3是否有偏好的时间段例如上午、下午或具体几点附近”用户补充“主题对的。最好是明天下午或后天上午。”工具调用决策Agent决定需要调用query_calendar工具三次分别查询“老王”、“老张”和用户自己假设系统能关联当前用户身份在明后两天的忙闲。执行与推理Agent调用工具获得三人的日历数据假设返回的是时间段忙闲标记。Agent将“明天下午”解析为2023-10-27的13:00-18:00“后天上午”解析为2023-10-28的09:00-12:00。在这两个时间窗内寻找连续的1小时空闲区块。假设分析后发现明天下午2点-3点三人均空闲后天上午10点半-11点半老王有一个短会但可调整。结构化输出Agent生成如下回复“根据您的要求和大家的日历情况我找到了以下两个可行的会议时间选项日期与时间备注A2023-10-27 14:00 - 15:00理想时间所有人均确认空闲。B2023-10-28 10:30 - 11:30老王原10:20-10:50有个短会他表示可以调整至会后因此该时间段也可行。请您选择A或 B。确认后我将立即发送会议邀请。”最终执行用户选择A后Agent调用send_invitation工具填入所有参数完成会议安排。这个流程展示了Agent如何将模糊的自然语言请求通过多轮交互、工具调用和逻辑推理转化为一个具体的、可执行的动作。5. 高级技巧与避坑指南在实际开发中仅仅遵循基础模板是不够的。下面分享一些从实战中总结出来的能让你的Agent更稳定、更聪明的技巧以及必须绕开的“坑”。5.1 技巧一使用“少样本示例”进行行为校准对于复杂或容易出错的环节在系统提示词中提供一两个“示例对话”极其有效。这被称为“少样本学习”。例如在招聘Agent中我们担心它会对“了解”和“精通”区分不清。可以在系统提示词末尾加入示例用户简历里写“了解Docker”JD要求“精通容器化技术”这算匹配吗 助理不算直接匹配。“了解”通常指有基本认知或简单使用经验而“精通”要求有深入理解、复杂场景下的实践和排错能力。这是一个风险点应在面试中考察其实际水平。通过这个例子Agent就能更好地把握评估的尺度。5.2 技巧二引入“验证与确认”步骤对于关键操作特别是涉及外部工具调用如发送邮件、修改数据时一定要在最终执行前让Agent向用户做一次总结性确认。在系统提示词中规定“在你准备调用send_invitation工具前你必须将拟发送的邀请详情时间、参会人、主题以清晰的形式汇总给用户并明确询问‘以上信息是否正确确认后将无法撤销。’ 只有在得到用户肯定答复如‘是的’、‘确认’、‘发送吧’后才能执行工具调用。”这能有效防止因误解用户意图而导致的误操作。5.3 技巧三为Agent设计“反思”机制对于开放式任务可以让Agent在输出最终答案前进行一次快速的自我反思。这能显著提升输出质量。在提示词中要求“在给出最终答案前请花一步时间思考我的分析是否覆盖了所有关键点我的结论是否有足够的证据支持是否有我忽略了的其他可能性”这个简单的指令能激活模型的“元认知”能力减少疏忽和武断。5.4 常见坑点与排查幻觉与捏造这是最常见的问题。Agent可能会为了一味满足“输出结构化答案”的要求而编造简历中不存在的技能。排查在提示词中反复强调“严格基于给定文本”、“不得臆造”并加入类似“如果你在原文中找不到明确支持请注明‘未提及’或‘证据不足’”的指令。解决在系统层面可以增加一个“事实核查”步骤让Agent引用原文时必须带上段落编号或简短原文。工具调用参数错误Agent理解了要调用工具但生成的参数格式不对或内容错误。排查首先检查工具的描述是否足够清晰、无歧义。parameters的description字段要写得非常具体。解决在开发阶段可以要求Agent在调用工具前先将其打算使用的参数“说”出来给你检查。例如“我将调用query_calendar工具参数为person‘张三’ days_ahead5。请确认是否正确” 这虽然增加了交互轮数但对调试至关重要。陷入死循环或无关对话Agent可能会不断追问一些无关紧要的细节或者在一个问题上打转。排查通常是任务边界定义不清或约束条件不够强。解决在系统提示词中明确交互轮数限制例如“如果经过三轮询问仍无法获得安排会议所需的全部信息则告知用户并建议其手动提供完整信息后重试。”并为对话设定一个明确的“终止状态”。对模糊指令处理不佳用户说“尽快开会”Agent无法处理。解决在提示词中内置对常见模糊词的“翻译”规则。例如“当用户使用‘尽快’、‘早点’时默认理解为‘在未来24小时内’使用‘稍后’、‘晚点’时默认理解为‘今天下午或明天’。” 并可以要求Agent将其理解反馈给用户确认。6. 工程化与迭代超越单次提示词当你需要管理多个、复杂的Agent时提示词工程就从一个“写作技巧”变成了一个“系统工程”。6.1 构建提示词模板库不要每次都从头开始写。将常用的模块标准化角色定义库如“严谨的审核员”、“富有创意的策划者”、“热情耐心的客服”。任务流程库如“信息收集-分析-建议”三步法、“问题诊断-方案提出-风险评估”流程。输出格式库如JSON Schema、Markdown表格、多级列表的固定模板。将这些模块像积木一样组合能极大提升开发效率。6.2 实施版本控制与A/B测试像管理代码一样管理你的提示词。使用Git等工具对提示词的更改进行版本控制记录每次修改的意图。对于关键任务的Agent可以设计A/B测试将用户流量随机分给使用不同提示词版本例如一个版本强调速度一个版本强调详尽度的Agent通过实际业务指标如任务完成率、用户满意度、处理时长来评估哪个版本更优。6.3 建立评估与监控体系你需要定义清楚什么是Agent的“好”表现任务完成率是否在预设的轮数内完成了核心任务工具调用准确率调用的工具和参数是否正确用户满意度可以通过简单的“是/否”反馈或评分来收集。人工审核通过率对于关键任务抽样进行人工审核看Agent的输出是否可直接采用或只需微调。建立这些监控指标你才能知道你的提示词优化工作是否真的起了作用而不是凭感觉。从我自己的经验来看提示词工程最像是一种“人机协作的界面设计”。它既需要你对业务逻辑有深刻的理解将其拆解为AI可执行的步骤又需要你洞察语言模型的“思维”特点用它能理解的方式去引导。这个过程没有银弹充满了实验和迭代。但每当你通过精妙的提示词让AI流畅地完成一个之前需要人工介入的复杂流程时那种成就感是巨大的。这不仅仅是节省了时间更是拓展了人机协作的边界。开始动手吧从一个具体的小任务开始设计你的第一个Agent提示词在调试和迭代中你会对它产生最直观、最深刻的认识。