大语言模型 (LLM) 与 AI Agent Harness Engineering 的本质区别
大语言模型与AI Agent Harness Engineering:从"会说话的百科全书"到"能干活的智能助手"的本质飞跃
关键词:大语言模型、AI Agent、Harness Engineering、智能体、提示工程、工具调用、自主决策
摘要:本文将从本质原理、核心能力、架构设计、应用场景等多个维度,深入浅出地剖析大语言模型(LLM)与AI Agent Harness Engineering的根本区别。我们会用生活中的生动故事类比核心概念,通过Mermaid图表展示架构与交互关系,结合Python代码实现实际案例,让读者真正理解:LLM是"被动的知识生成器",而AI Agent是"主动的问题解决者",Harness Engineering则是"构建智能体的工程方法论"。读完本文,你将明白为什么AI Agent被认为是LLM之后的下一个AI里程碑,以及如何通过Harness Engineering打造可靠、高效、安全的AI应用。
背景介绍
目的和范围
在2022年底ChatGPT横空出世之后,大语言模型(LLM)迅速成为全球科技领域最热门的话题。LLM展现出了惊人的文本生成、知识问答、代码编写能力,仿佛让我们看到了通用人工智能(AGI)的曙光。然而,随着大家对LLM的使用越来越深入,其局限性也逐渐暴露出来:LLM不会主动使用外部工具(比如查天气、搜资料、订机票),不会做长期规划,不会从错误中反思学习,甚至会一本正经地"胡说八道"(幻觉问题)。
为了解决这些问题,AI Agent(智能体)和Harness Engineering(智能体工程)应运而生。很多人可能会把LLM、AI Agent、Harness Engineering混为一谈,或者认为AI Agent只是"带工具的LLM"。但实际上,它们在本质上有着天壤之别。
本文的目的就是要拨开迷雾,讲清楚这三者的本质区别:
- 什么是LLM?它的核心能力和局限是什么?
- 什么是AI Agent?它和LLM的根本不同在哪里?
- 什么是Harness Engineering?它和提示工程(Prompt Engineering)有什么区别?
- 如何从原理、架构、能力、应用等维度对比它们?
- 如何通过实际代码案例直观感受它们的区别?
本文的范围主要聚焦于本质区别的探讨,不会深入到LLM的Transformer架构细节(当然会用通俗易懂的方式解释核心原理),也不会覆盖所有AI Agent框架(会以LangChain为例),但会给出足够的信息让读者建立起完整的认知体系。
预期读者
本文适合以下人群阅读:
- 对AI感兴趣的技术爱好者,想了解LLM和AI Agent的区别;
- 程序员、AI从业者,想学习如何构建AI Agent;
- 产品经理、技术管理者,想知道AI Agent能解决什么实际问题;
- 学生、研究者,想深入理解AI Agent的原理和工程实践。
本文会用"给小学生讲故事"的方式解释复杂概念,同时也会包含专业的技术内容(比如代码、公式、图表),所以无论你是新手还是专家,都能从中有所收获。
文档结构概述
本文的结构就像搭积木一样,从基础概念到实际应用,一步一步展开:
- 背景介绍:讲清楚为什么要讨论这个话题,本文的目的、范围、预期读者;
- 核心概念与联系:用故事引入核心概念,解释每个概念的定义,对比它们的属性,用图表展示关系;
- 核心算法原理 & 具体操作步骤:讲解LLM、AI Agent、Harness Engineering的核心原理,用Python代码展示具体操作;
- 数学模型和公式:用通俗易懂的方式讲解相关的数学公式(比如Transformer的自注意力机制、ReAct框架的决策逻辑);
- 项目实战:从零开始构建一个能查天气、订外卖、管理日程的AI Agent,展示完整的开发流程;
- 实际应用场景:对比LLM和AI Agent在不同场景下的应用,看看它们能解决什么问题;
- 工具和资源推荐:推荐常用的AI Agent框架、LLM接口、工具API,以及学习资源;
- 未来发展趋势与挑战:探讨AI Agent的未来发展方向,以及面临的挑战;
- 总结:回顾核心概念和它们的关系,强调本质区别;
- 思考题:提出一些问题,鼓励读者进一步思考和实践;
- 附录:常见问题与解答,扩展阅读与参考资料。
术语表
在开始之前,我们先定义一些核心术语,避免大家混淆:
核心术语定义
- 大语言模型(LLM, Large Language Model):一种基于Transformer架构的深度学习模型,通过学习海量文本数据,能够生成连贯、有逻辑的文本,回答问题,编写代码等。它的核心能力是"预测下一个单词",是被动的文本生成器。
- AI Agent(智能体):一种能够感知环境、做出决策、采取行动的自主系统。它通常包含LLM作为"大脑",但还具备记忆模块、工具调用能力、规划能力、反思能力等,是主动的问题解决者。
- Harness Engineering(智能体工程):一套工程化构建AI Agent的方法论,包括提示工程、工具集成、记忆管理、错误处理、评估优化等,关注的是如何让AI Agent可靠、高效、安全地工作。
- 提示工程(Prompt Engineering):通过设计高质量的提示词(Prompt),引导LLM生成更好的输出,是Harness Engineering的一部分,但不是全部。
- 工具调用(Tool Calling):AI Agent根据任务需要,主动调用外部工具(比如搜索API、天气API、数据库)获取信息或执行操作的能力。
- 自主决策(Autonomous Decision Making):AI Agent根据目标、环境、记忆,自主决定下一步做什么的能力,不需要用户一步步指示。
- 记忆模块(Memory Module):AI Agent用于存储历史交互、任务进度、外部信息的组件,分为短期记忆和长期记忆。
相关概念解释
- Transformer架构:LLM的核心架构,由Vaswani等人在2017年的论文《Attention Is All You Need》中提出,核心是自注意力机制(Self-Attention),能够让模型关注文本中不同位置的单词之间的关系。
- ReAct框架:一种常用的AI Agent框架,由"Reasoning(推理)"和"Acting(行动)"组成,让AI Agent在行动之前先推理,行动之后观察结果,再根据结果调整下一步行动。
- 幻觉(Hallucination):LLM生成的内容看起来很合理,但实际上是错误的或不存在的,这是LLM的一个主要局限。
- 零样本学习(Zero-Shot Learning):LLM不需要额外的训练数据,只通过提示词就能完成任务的能力。
- 少样本学习(Few-Shot Learning):LLM只需要几个示例就能完成任务的能力。
缩略词列表
- LLM:Large Language Model(大语言模型)
- AI:Artificial Intelligence(人工智能)
- AGI:Artificial General Intelligence(通用人工智能)
- NLP:Natural Language Processing(自然语言处理)
- API:Application Programming Interface(应用程序编程接口)
- SDK:Software Development Kit(软件开发工具包)
- JSON:JavaScript Object Notation(一种数据交换格式)
- HTTP:Hypertext Transfer Protocol(超文本传输协议)
核心概念与联系
故事引入:从"会说话的百科全书"到"能干活的私人助理"
让我们用一个生活中的故事来引出今天的主题:
假设你有一个朋友叫"小百科",他是一个超级聪明的人,读过几乎所有的书,知道天文地理、历史哲学、数学物理,你问他任何问题,他都能给你一个头头是道的回答。比如你问他"北京今天天气怎么样?“,他会说"根据我学到的知识,北京属于温带季风气候,夏季高温多雨,冬季寒冷干燥,但今天的具体天气我不太清楚,因为我的知识截止到2023年10月,而且实时天气信息我查不到。“你再问他"能帮我订一份披萨吗?”,他会说"我知道披萨是一种意大利美食,通常由面饼、奶酪、番茄酱和各种配料组成,但我没法帮你订,因为我没有手机,也不会用外卖APP。”
这就是LLM的真实写照:它是一本"会说话的百科全书",知识渊博,但被动、不会用工具、不会主动做事。
现在,你又有了一个朋友叫"小助手",他不仅像小百科一样聪明,还配备了手机、电脑、记事本,还学会了怎么用各种APP。你对他说"我今天晚上要请朋友吃饭,你帮我安排一下吧。"小助手会怎么做呢?
- 他先问你几个问题:“你有多少朋友?想吃什么口味的?预算多少?几点吃饭?”
- 然后他打开手机查了一下今天的天气:“今天晚上北京有小雨,我们选一个离你家近的餐厅吧。”
- 接着他用外卖APP或者点评软件搜索符合条件的餐厅,挑了几家评分高的,发给你看。
- 你选了一家之后,他帮你订了座位,还问你要不要提前点菜。
- 订好之后,他把餐厅的地址、电话、订座信息记在记事本上,还提醒你提前半小时出发。
- 到了晚上,他又提醒你该出门了,还查了一下路况,告诉你怎么走最快。
这就是AI Agent的真实写照:它是一个"能干活的私人助理",不仅聪明,还主动、会用工具、会规划、会记忆。
而"小助手"的手机、电脑、记事本,以及教他怎么用这些工具、怎么规划任务、怎么记录信息的方法,就是Harness Engineering:它是一套"装备和训练方法",让"小百科"变成了"小助手"。
核心概念解释(像给小学生讲故事一样)
现在,我们用更通俗易懂的语言,详细解释这三个核心概念:
核心概念一:大语言模型(LLM)—— 会预测下一个单词的"超级鹦鹉"
很多人觉得LLM很神秘,其实它的核心原理非常简单:预测下一个单词。
想象一下,你在玩一个"接龙游戏":我说"今天天气真",你会接"好";我说"我想吃一份",你会接"披萨";我说"北京是中国的",你会接"首都"。LLM就是一个玩这个游戏的超级高手,它读过几千亿个单词的文本(比如所有的书、网页、新闻、代码),所以它能非常准确地预测下一个单词是什么。
比如你给LLM输入"请写一首关于春天的诗",LLM会一个单词一个单词地预测:“春天"→"来了"→”,“→"花儿"→"开了"→”,“→"小草"→"绿了"→”……",最后生成一首完整的诗。
再比如你给LLM输入"请用Python写一个计算斐波那契数列的函数",LLM会一个单词(或者说一个代码 token)一个单词地预测:“def"→” fibonacci"→"(“→"n"→”)“→”:“→”……",最后生成一段完整的代码。
但LLM有几个很大的局限:
- 它是被动的:你不给它输入,它就不会输出;你让它做什么,它才会做什么,不会主动帮你做事。
- 它不会用工具:它没法查实时天气、没法搜最新新闻、没法订机票酒店,因为它没有"手"和"脚",只能用它脑子里记住的知识(而且知识截止到训练数据的时间)。
- 它不会规划:如果任务很复杂,比如"帮我安排一次去巴黎的旅行",它可能会给你一个大概的建议,但没法一步步帮你订机票、订酒店、办签证、做攻略。
- 它会"胡说八道":因为它只是在预测下一个单词,有时候会生成看起来很合理但实际上错误的内容(比如编造一个不存在的名人名言,或者写一段有bug的代码)。
- 它没有记忆:如果你和它聊了很久,它可能会忘记你之前说过的话(当然现在的LLM有上下文窗口,但窗口大小有限,而且不是真正的长期记忆)。
用一句话总结LLM:它是一个知识渊博、会说话的"超级鹦鹉",但它只是在"模仿"人类说话,不会真正"思考"和"做事"。
核心概念二:AI Agent(智能体)—— 能感知、决策、行动的"机器猫"
如果你看过《机器猫》(哆啦A梦),你就知道什么是AI Agent了:机器猫不仅聪明,还有一个装满工具的口袋,能帮大雄解决各种问题。
AI Agent就是这样的"机器猫",它通常由以下几个部分组成:
- 大脑(LLM):负责思考、推理、生成文本,就像机器猫的脑子。
- 眼睛和耳朵(感知模块):负责感知环境,比如接收用户的输入、观察工具的返回结果,就像机器猫的眼睛和耳朵。
- 口袋(工具库):装满了各种工具,比如搜索工具、天气工具、计算器、数据库,就像机器猫的四次元口袋。
- 记事本(记忆模块):负责记录历史交互、任务进度、外部信息,就像机器猫的记事本。
- 手脚(执行模块):负责调用工具、执行操作,就像机器猫的手脚。
AI Agent的工作流程通常是这样的:
- 感知:接收用户的请求或环境的变化。
- 推理:根据目标、记忆、感知到的信息,思考下一步该做什么。
- 决策:决定调用哪个工具,或者生成什么输出。
- 行动:执行决策,比如调用工具、回复用户。
- 观察:观察行动的结果,比如工具的返回信息、用户的反馈。
- 反思:根据观察结果,调整自己的策略,更新记忆。
- 重复:回到步骤2,直到任务完成。
和LLM相比,AI Agent有几个核心优势:
- 它是主动的:它有自己的目标,会主动想办法完成任务,不需要用户一步步指示。
- 它会用工具:它能调用各种外部工具,获取实时信息,执行实际操作。
- 它会规划:它能把复杂任务拆分成小步骤,一步步完成。
- 它会反思:它能从错误中学习,调整自己的策略。
- 它有记忆:它能记住历史交互、任务进度,不会忘记之前的事情。
用一句话总结AI Agent:它是一个能感知环境、做出决策、采取行动的"机器猫",不仅聪明,还能真正帮你"做事"。
核心概念三:Harness Engineering(智能体工程)—— 训练"机器猫"的"驯兽师"
有了LLM这个"大脑",有了工具这个"口袋",是不是就能造出AI Agent了?没那么简单。就像你有了一只聪明的猫,还有很多玩具和工具,但如果你不训练它,它还是不会帮你做事。
Harness Engineering就是训练"机器猫"的"驯兽师",它是一套工程化构建AI Agent的方法论,关注的是如何让AI Agent可靠、高效、安全地工作。
Harness Engineering主要包括以下几个方面:
- 提示工程(Prompt Engineering):设计高质量的提示词,引导LLM更好地推理、决策、行动。这是Harness Engineering的基础,但不是全部。
- 工具集成(Tool Integration):把各种外部工具(比如API、数据库、软件)集成到AI Agent中,让AI Agent能方便地调用它们。
- 记忆管理(Memory Management):设计合理的记忆结构(比如短期记忆、长期记忆、向量数据库),让AI Agent能有效地存储和检索信息。
- 规划与调度(Planning & Scheduling):设计任务规划和调度算法,让AI Agent能把复杂任务拆分成小步骤,合理安排顺序。
- 错误处理(Error Handling):设计错误处理机制,让AI Agent能识别和纠正错误,不会因为一个小错误就崩溃。
- 评估优化(Evaluation & Optimization):设计评估指标和优化方法,持续改进AI Agent的性能。
- 安全与对齐(Safety & Alignment):设计安全机制,确保AI Agent的行为符合人类的价值观,不会做坏事。
很多人会把Harness Engineering和提示工程混为一谈,但实际上,提示工程只是Harness Engineering的一小部分。Harness Engineering是一个更全面、更系统的工程方法论,它关注的是整个AI Agent的生命周期,从设计、开发、测试到部署、运维、优化。
用一句话总结Harness Engineering:它是训练"机器猫"的"驯兽师",是一套工程化构建可靠、高效、安全的AI Agent的方法论。
核心概念之间的关系(用小学生能理解的比喻)
现在,我们用几个生活中的比喻,来解释这三个核心概念之间的关系:
关系一:LLM是AI Agent的"大脑",Harness Engineering是"身体和训练方法"
如果把AI Agent比作一个人,那么:
- LLM就是这个人的大脑,负责思考、推理、说话。
- Harness Engineering就是这个人的身体(包括手、脚、眼睛、耳朵、记事本)和训练方法(教他怎么用身体、怎么做事)。
没有大脑,身体就是一堆废铁;没有身体和训练方法,大脑就是一个只会说话的"植物人"。只有把大脑、身体、训练方法结合起来,才能成为一个能干活的"正常人"。
关系二:LLM是"原材料",AI Agent是"产品",Harness Engineering是"生产工艺"
如果把AI Agent比作一辆汽车,那么:
- LLM就是这辆汽车的发动机,是核心动力来源。
- AI Agent就是这辆汽车,由发动机、轮胎、方向盘、座椅、导航系统等组成。
- Harness Engineering就是汽车生产工艺,包括设计、组装、测试、优化等流程。
没有发动机,汽车就跑不起来;没有生产工艺,发动机就是一堆零件,没法变成汽车。只有用生产工艺把发动机和其他零件组装起来,才能变成一辆能开的汽车。
关系三:提示工程是Harness Engineering的"一个零件",不是"全部"
很多人觉得Harness Engineering就是提示工程,其实不然。如果把Harness Engineering比作一个工具箱,那么提示工程就是这个工具箱里的一把螺丝刀,是很重要的工具,但不是全部。工具箱里还有扳手、锤子、钳子、电钻等其他工具,只有把这些工具结合起来,才能修好各种东西。
提示工程确实很重要,它能引导LLM更好地推理和决策,但如果只有提示工程,没有工具集成、记忆管理、错误处理等,AI Agent还是没法完成复杂任务。
核心概念原理和架构的文本示意图(专业定义)
现在,我们用更专业的语言,画出这三个核心概念的原理和架构文本示意图:
大语言模型(LLM)的原理和架构文本示意图
LLM的核心是Transformer架构,由以下几个部分组成:
1. 输入层(Input Layer):把文本转换成向量(Token Embeddings),加上位置编码(Positional Encoding),让模型知道每个单词的位置。
2. 编码器/解码器层(Encoder/Decoder Layer):由多个相同的层堆叠而成,每个层包含多头自注意力机制(Multi-Head Self-Attention)和前馈神经网络(Feed-Forward Neural Network)。
- 多头自注意力机制:让模型关注文本中不同位置的单词之间的关系,比如"它"指代的是前面的"猫"。
- 前馈神经网络:对每个位置的向量进行非线性变换,提取更高级的特征。
3. 输出层(Output Layer):把最后一层的向量转换成概率分布,预测下一个单词。
LLM的工作流程:
输入文本 → Token化 → 向量转换 + 位置编码 → 多层Transformer处理 → 输出概率分布 → 采样下一个单词 → 重复直到生成结束
AI Agent的原理和架构文本示意图
AI Agent的核心是"感知-推理-决策-行动-观察-反思"循环,由以下几个部分组成:
1. 感知模块(Perception Module):接收用户输入、环境变化、工具返回结果,转换成模型能理解的格式。
2. 记忆模块(Memory Module):存储历史交互、任务进度、外部信息,分为:
- 短期记忆(Short-Term Memory):存储当前会话的信息,比如用户之前的问题、工具的返回结果,通常放在LLM的上下文窗口中。
- 长期记忆(Long-Term Memory):存储过去的历史信息,比如用户的偏好、之前完成的任务,通常用向量数据库(Vector Database)存储。
3. 推理引擎(Reasoning Engine):基于LLM,根据目标、记忆、感知到的信息,进行推理,思考下一步该做什么。
4. 决策模块(Decision Module):根据推理结果,决定下一步的行动,比如调用某个工具、回复用户、结束任务。
5. 工具库(Tool Library):包含各种外部工具,比如搜索工具、天气工具、计算器、数据库,每个工具都有明确的输入输出格式。
6. 执行模块(Execution Module):执行决策模块的指令,比如调用工具、发送消息给用户。
7. 观察模块(Observation Module):观察执行模块的结果,比如工具的返回信息、用户的反馈。
8. 反思模块(Reflection Module):根据观察结果,调整推理策略,更新记忆,优化未来的决策。
AI Agent的工作流程:
1. 感知:接收用户请求 → 2. 推理:基于目标、记忆、感知信息思考 → 3. 决策:决定下一步行动 → 4. 行动:执行决策(调用工具/回复用户) → 5. 观察:观察行动结果 → 6. 反思:调整策略、更新记忆 → 7. 重复:回到步骤2,直到任务完成
Harness Engineering的原理和架构文本示意图
Harness Engineering是一套工程化构建AI Agent的方法论,覆盖AI Agent的整个生命周期,由以下几个部分组成:
1. 需求分析(Requirement Analysis):明确AI Agent的目标、功能、性能要求、安全要求。
2. 架构设计(Architecture Design):设计AI Agent的整体架构,比如感知模块、记忆模块、推理引擎、决策模块、工具库的选择和设计。
3. 提示工程(Prompt Engineering):设计高质量的提示词,包括系统提示(System Prompt)、少样本示例(Few-Shot Examples)、思维链提示(Chain-of-Thought Prompt)等。
4. 工具集成(Tool Integration):选择合适的工具,封装工具的API,定义工具的输入输出格式,集成到AI Agent中。
5. 记忆管理(Memory Management):设计记忆结构,选择合适的存储方式(比如上下文窗口、向量数据库),实现记忆的存储、检索、更新。
6. 规划调度(Planning & Scheduling):设计任务规划算法(比如ReAct、Tree-of-Thought),把复杂任务拆分成小步骤,合理安排顺序。
7. 错误处理(Error Handling):设计错误检测、错误纠正、错误恢复机制,比如当工具调用失败时,自动重试或者换一个工具。
8. 评估优化(Evaluation & Optimization):设计评估指标(比如准确率、完成率、响应时间),收集用户反馈,持续优化AI Agent的性能。
9. 安全对齐(Safety & Alignment):设计安全机制,比如内容过滤、用户授权、行为监控,确保AI Agent的行为符合人类的价值观。
10. 部署运维(Deployment & Operations):把AI Agent部署到生产环境,监控其运行状态,处理故障,进行版本更新。
Harness Engineering的工作流程:
需求分析 → 架构设计 → 提示工程 → 工具集成 → 记忆管理 → 规划调度 → 错误处理 → 开发测试 → 评估优化 → 安全对齐 → 部署运维 → 持续迭代
Mermaid 流程图
现在,我们用Mermaid流程图更直观地展示这三个核心概念的架构和交互关系:
Mermaid流程图一:LLM的工作流程
Mermaid流程图二:AI Agent的工作流程(ReAct框架)
Mermaid流程图三:LLM、AI Agent、Harness Engineering的交互关系
Mermaid ER实体关系图:核心概念之间的实体关系
核心概念原理 & 具体操作步骤
在这一部分,我们将深入讲解LLM、AI Agent、Harness Engineering的核心原理,并通过Python代码展示具体的操作步骤,让大家能直观感受它们的区别。
核心概念一:大语言模型(LLM)的核心原理 & 具体操作步骤
LLM的核心原理:Transformer与自注意力机制
前面我们说过,LLM的核心是Transformer架构,而Transformer的核心是自注意力机制(Self-Attention)。现在我们用通俗易懂的方式解释一下自注意力机制:
想象一下,你在读一句话:“小猫躺在沙发上,它在睡觉。“当你读到"它"的时候,你会自动想到"它"指代的是前面的"小猫”,而不是"沙发”。自注意力机制就是让LLM具备这种能力:关注句子中不同单词之间的关系。
自注意力机制的工作原理可以用三个步骤来解释:
- 计算查询(Query)、键(Key)、值(Value):给每个单词计算三个向量:查询向量(Q)、键向量(K)、值向量(V)。这三个向量是通过训练得到的,可以理解为每个单词的"身份特征"。
- 计算注意力分数(Attention Scores):对于每个单词的查询向量Q,计算它和所有单词的键向量K的相似度(通常用点积),然后用Softmax函数把这些相似度转换成概率分布,这就是注意力分数。注意力分数越高,说明这个单词越关注另一个单词。
- 加权求和值向量(Weighted Sum of Values):用注意力分数加权求和所有单词的值向量V,得到这个单词的最终表示。
用数学公式表示的话,自注意力机制的公式是:
Attention(Q,K,V)=softmax(QKTdk)V Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dkQKT)V
其中,dkd_kdk是键向量K的维度,除以dk\sqrt{d_k}dk是为了防止点积太大导致Softmax函数的梯度消失。
多头自注意力机制(Multi-Head Self-Attention)就是把Q、K、V分成多个"头"(Head),每个头关注不同的关系,然后把结果拼接起来。比如,一个头关注"指代关系"(比如"它"指代"小猫"),另一个头关注"动作关系"(比如"躺"和"沙发"的关系),这样模型能学到更丰富的特征。
LLM的具体操作步骤:用Python调用OpenAI的GPT-3.5-turbo
现在我们用Python代码展示如何调用LLM(这里以OpenAI的GPT-3.5-turbo为例),感受一下LLM的核心能力:
步骤1:安装OpenAI库
首先,我们需要安装OpenAI的Python库:
pip install openai
步骤2:设置API密钥
然后,我们需要设置OpenAI的API密钥(你需要先去OpenAI官网注册一个账号,获取API密钥):
import openai
# 设置API密钥(注意:不要把API密钥直接写在代码里,最好用环境变量)
openai.api_key = "your-api-key-here"
步骤3:调用LLM生成文本
现在我们调用GPT-3.5-turbo,让它写一首关于春天的诗:
# 定义提示词
prompt = "请写一首关于春天的七言绝句,要求押韵,意境优美。"
# 调用OpenAI的ChatCompletion API
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个才华横溢的诗人,擅长写古典诗词。"},
{"role": "user", "content": prompt}
],
temperature=0.7, # 控制生成的随机性,0.0是最确定的,1.0是最随机的
max_tokens=200 # 控制生成的最大长度
)
# 输出生成的文本
print("生成的诗:")
print(response.choices[0].message.content)
运行这段代码,你会得到一首关于春天的七言绝句,比如:
生成的诗:
春风送暖入屠苏,
柳绿桃红映碧湖。
燕子归来寻旧垒,
一年好景在今朝。
步骤4:展示LLM的局限
现在我们展示一下LLM的局限:比如它没法查实时天气。我们问它"北京今天的天气怎么样?":
# 定义提示词
prompt = "北京今天(2024年5月20日)的天气怎么样?"
# 调用OpenAI的ChatCompletion API
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个天气助手,能回答关于天气的问题。"},
{"role": "user", "content": prompt}
],
temperature=0.0,
max_tokens=200
)
# 输出生成的文本
print("LLM的回答:")
print(response.choices[0].message.content)
运行这段代码,你会得到类似这样的回答:
LLM的回答:
抱歉,我的知识截止到2023年10月,无法提供2024年5月20日的实时天气信息。你可以通过天气APP或网站查询最新的天气情况。
这就是LLM的局限:它没法查实时信息,因为它没有工具调用能力。
核心概念二:AI Agent的核心原理 & 具体操作步骤
AI Agent的核心原理:ReAct框架
前面我们说过,AI Agent的核心是"感知-推理-决策-行动-观察-反思"循环,而ReAct框架是实现这个循环的最常用方法之一。ReAct是"Reasoning(推理)"和"Acting(行动)"的结合,它让AI Agent在行动之前先推理,行动之后观察结果,再根据结果调整下一步行动。
ReAct框架的工作流程是:
- 思考(Thought):AI Agent根据用户的请求和当前的状态,思考下一步该做什么。
- 行动(Action):AI Agent决定调用哪个工具,并输入相应的参数。
- 观察(Observation):AI Agent观察工具的返回结果。
- 重复:回到步骤1,直到任务完成。
ReAct框架的提示词通常包含以下几个部分:
- 系统提示(System Prompt):告诉AI Agent它的角色、目标、可用的工具。
- 工具描述(Tool Descriptions):列出每个工具的名称、功能、输入输出格式。
- 输出格式(Output Format):告诉AI Agent如何输出思考、行动、观察。
- 少样本示例(Few-Shot Examples):给AI Agent几个示例,告诉它应该怎么做。
AI Agent的具体操作步骤:用LangChain构建一个能查天气的AI Agent
现在我们用LangChain(一个常用的AI Agent开发框架)构建一个能查天气的AI Agent,感受一下AI Agent和LLM的区别。
步骤1:安装必要的库
首先,我们需要安装LangChain、OpenAI、SerpAPI(一个搜索工具API,能查天气):
pip install langchain openai langchain-openai langchain-community google-search-results
步骤2:设置API密钥
然后,我们需要设置OpenAI和SerpAPI的API密钥(SerpAPI的API密钥可以去SerpAPI官网注册获取):
import os
from langchain_openai import ChatOpenAI
from langchain.agents import AgentType, initialize_agent, Tool
from langchain_community.utilities import SerpAPIWrapper
# 设置API密钥(最好用环境变量)
os.environ["OPENAI_API_KEY"] = "your-openai-api-key-here"
os.environ["SERPAPI_API_KEY"] = "your-serpapi-api-key-here"
步骤3:初始化LLM和工具
接下来,我们初始化LLM(GPT-3.5-turbo)和工具(SerpAPI搜索工具):
# 初始化LLM
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.0)
# 初始化SerpAPI搜索工具
search = SerpAPIWrapper()
# 定义工具列表
tools = [
Tool(
name="Search",
func=search.run,
description="当你需要查询实时信息(比如天气、新闻、股票)或者不知道的知识时,可以使用这个工具。输入应该是一个搜索查询。"
)
]
步骤4:初始化AI Agent
然后,我们用ReAct框架初始化AI Agent:
# 初始化AI Agent(使用ReAct框架)
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 使用零样本ReAct框架
verbose=True # 输出详细的推理过程
)
步骤5:调用AI Agent查天气
现在我们调用AI Agent,问它"北京今天的天气怎么样?":
# 调用AI Agent
response = agent.run("北京今天(2024年5月20日)的天气怎么样?")
# 输出结果
print("\nAI Agent的最终回答:")
print(response)
运行这段代码,你会看到详细的推理过程,比如:
> Entering new AgentExecutor chain...
我需要查询北京今天的实时天气信息,因为我的知识截止到2023年10月,无法提供2024年5月20日的天气。我应该使用Search工具。
Action: Search
Action Input: 北京2024年5月20日天气
Observation: 北京2024年5月20日天气:晴,气温18℃-28℃,南风3-4级,空气质量优。
Thought: 我已经获取到了北京今天的天气信息,现在可以回答用户的问题了。
Final Answer: 北京今天(2024年5月20日)的天气是晴,气温18℃-28℃,南风3-4级,空气质量优。
> Finished chain.
AI Agent的最终回答:
北京今天(2024年5月20日)的天气是晴,气温18℃-28℃,南风3-4级,空气质量优。
你看,AI Agent能主动调用搜索工具查实时天气,这就是它和LLM的核心区别!
核心概念三:Harness Engineering的核心原理 & 具体操作步骤
Harness Engineering的核心原理:工程化构建可靠的AI Agent
前面我们说过,Harness Engineering是一套工程化构建AI Agent的方法论,它关注的是如何让AI Agent可靠、高效、安全地工作。现在我们讲解Harness Engineering的几个核心原理:
- 提示工程的系统化:提示工程不是"碰运气",而是有系统化的方法,比如思维链提示(Chain-of-Thought)、少样本提示(Few-Shot)、角色提示(Role Prompt)等。
- 工具的标准化封装:工具需要有明确的输入输出格式、错误处理机制、权限控制,不能随便调用。
- 记忆的结构化管理:记忆需要有明确的结构(比如短期记忆、长期记忆、语义记忆、情景记忆),能有效地存储和检索信息。
- 任务的分层规划:复杂任务需要拆分成小任务,小任务再拆分成更小的任务,形成一个分层的任务树。
- 错误的可恢复处理:AI Agent需要能识别错误、纠正错误、从错误中恢复,不能因为一个小错误就崩溃。
- 性能的持续优化:需要有明确的评估指标,收集用户反馈,持续优化AI Agent的性能。
- 安全的严格保障:需要有内容过滤、用户授权、行为监控、价值对齐等机制,确保AI Agent的行为符合人类的价值观。
Harness Engineering的具体操作步骤:优化刚才的AI Agent
现在我们用Harness Engineering的方法,优化刚才的AI Agent,让它更可靠、更高效、更安全。
步骤1:优化提示工程(添加思维链和少样本示例)
首先,我们优化提示工程,添加思维链提示和少样本示例,让AI Agent的推理更清晰:
from langchain.prompts import PromptTemplate
# 定义优化后的提示模板
prompt_template = """
你是一个专业的天气助手,能帮助用户查询天气信息。你必须严格按照以下步骤工作:
1. 思考:首先,你需要思考用户的问题是什么,是否需要调用工具。
2. 行动:如果需要调用工具,请使用Search工具,输入一个清晰的搜索查询。
3. 观察:仔细观察工具的返回结果,提取有用的信息。
4. 回答:根据观察结果,给用户一个清晰、准确、友好的回答。
你只能使用以下工具:
{tools}
使用工具的格式必须严格遵循以下要求:
Thought: 你对当前问题的思考
Action: 要调用的工具名称,只能是 [{tool_names}] 中的一个
Action Input: 工具的输入参数
Observation: 工具的返回结果
(这个思考/行动/观察的过程可以重复多次)
当你有了足够的信息回答用户的问题时,你必须使用以下格式:
Thought: 我现在有足够的信息回答用户的问题了
Final Answer: 你对用户的最终回答
现在开始!
---
下面是几个示例:
示例1:
用户:上海今天的天气怎么样?
Thought: 我需要查询上海今天的实时天气信息,应该使用Search工具。
Action: Search
Action Input: 上海今天天气
Observation: 上海今天天气:多云,气温20℃-26℃,东风2-3级,空气质量良。
Thought: 我现在有足够的信息回答用户的问题了
Final Answer: 上海今天的天气是多云,气温20℃-26℃,东风2-3级,空气质量良。
示例2:
用户:什么是人工智能?
Thought: 这是一个知识问答问题,我脑子里有足够的信息,不需要调用工具。
Final Answer: 人工智能(AI)是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。
---
现在处理用户的问题:
用户:{input}
{agent_scratchpad}
"""
# 创建提示模板
prompt = PromptTemplate.from_template(prompt_template)
步骤2:优化工具集成(添加错误处理)
接下来,我们优化工具集成,添加错误处理机制,当工具调用失败时,AI Agent能自动重试或者换一个方法:
# 定义一个带错误处理的搜索工具
def safe_search(query):
try:
return search.run(query)
except Exception as e:
return f"搜索工具调用失败,错误信息:{str(e)}。请尝试换一个搜索查询,或者稍后再试。"
# 更新工具列表
tools = [
Tool(
name="Search",
func=safe_search,
description="当你需要查询实时信息(比如天气、新闻、股票)或者不知道的知识时,可以使用这个工具。输入应该是一个清晰的搜索查询。如果工具
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)