AI Agent应用类型及Function Calling开发实战(一)
在上一节中我们介绍了近两年大模型技术的迅速发展及其技术演进这包括从大模型自身的能力持续突破原生能力和涌现能力基本的函数调用功能到引入 RAG检索增强生成技术再到当前的 AI Agent代理技术。如果说 2023 年是检索增强生成年那么 2024 年毫无疑问就是代理年。全球各地的公司都在探索使用机器人代理。究其原因还是在于虽然大模型结合RAG技术已经突破了语言生成的可能性界限但是其存在着极大的局限性。首先我们来看大语言模型自身的特性。它能够类似于人类大脑那样处理和生成语言其功能可以就像一个庞大的信息库里面存储着丰富的语言知识和数据。这使得大模型不仅能理解复杂的语言结构还能创造出流畅的文本输出。如上图所示展示了一个神经网络的简化示意图。输入词how和are通过多层神经网络其中的每个节点代表神经网络中的一个神经元而连接线代表不同神经元之间的连接。这些连接权重会根据训练数据进行调整以便大模型能够更好地预测输出。其终点指出大模型的输出是“you?”这是在给定输入“how are”后大模型预测的下一个最可能的词。RAG技术通过查找相关信息来改进大模型的输出使其能够根据特定的信息进行响应生成。可以看到当大模型和RAG技术组合在一起重点仍然是知识和文本生成。它们侧重于根据训练数据中的模式生成类似人类的文本主要处理单个输入并据此提供响应这就导致了这样的架构组合一定是缺乏以灵活、明智的方式设定和追求特定目标的能力。人工智能代理的一个重要方面是它们的学习和适应能力。通过集成大语言模型和RAG等技术它们在交互的基础上不断提高性能随着时间的推移演变成更复杂、更智能的助手。通过不同场景的对比分析可以非常明确的感受到- 面向目标的行为大模型 和 RAG 模型主要通过模仿训练数据中的模式来生成类似人类的文本。然而它们通常缺乏以灵活且明智的方式设定和追求具体目标的能力。与之相比人工智能代理能被设计来拥有明确的目标并通过计划及行动来实现这些目标。- 记忆和状态跟踪大多数现有的大语言模型不具备持久记忆或状态跟踪能力通常将每个输入视为孤立事件处理。相反人工智能代理能维持记忆状态随时间积累知识并利用这些状态信息支持未来的决策和行动。- 与环境的交互大模型仅在文本层面上操作与物理世界无直接互动。人工智能代理则能感知并与其所处的环境互动无论是在数字领域、机器人系统还是通过传感器和执行器的物理环境中。- 迁移和泛化能力尽管大模型 在处理与训练数据相似的语言任务方面表现出色它们往往难以将所学知识迁移到全新的领域或任务上。人工智能代理则展现了在新情况下学习、推理和计划的能力可能更有效地迁移和泛化。- 持续学习大部分大语言模型在训练完成后便固定下来不再更新。而人工智能代理能够在与新环境和情况交互时持续学习和调整不断优化其知识和技能。- 多任务能力大模型 通常专注于特定的语言处理任务。而人工智能代理被设计为能处理多种任务的通用系统可以整合语言处理、推理、感知和控制等多方面技能以解决复杂的问题。通过上述对比分析相信大家已经对大模型、RAG 和 AI Agent 三者在大模型的应用技术领域中的不同之处有了初步的认识。而接下来我们将探讨这三者之间的紧密联系和相互作用。1. 聊天机器人我们在【大模型应用发展及Agent前沿技术趋势】的最后一部分内容中借助 [AI Agent 代理框架汇总]介绍了目前多元化的AI Agent 构建框架除了单独的开源项目LangGraph 和 LlamaIndex Workflows 等框架也正在帮助世界各地的开发人员构建结构化代理。但目前的现状是尽管智能体很受欢迎但它们尚未在人工智能生态系统之外引起轰动。很少有成熟的代理能够在消费者或企业用户中取得成功。团队如何驾驭新框架和新代理方向有哪些工具可用我们应该使用哪些工具来构建应用程序思考这个问题很关键因为AI Agent是一个涵盖范围极广的概念。从简单的智能问答到复杂的工作流程均可被归类为 AI Agent但不同的场景需求它们背后所依赖的技术和框架可能相差甚远。我们可以像定义人工智能发展阶段的方式一样来区分狭义和广义的 AI Agent。但无论采用何种称呼大家非常容易陷入的误区就是简单任务、复杂实现。目前市面上的大模型智能应用产品如 ChatGPT、智谱清言 和 Coze等如果从背后技术栈的角度来看可以被分为三类聊天机器人、人工智能助手和人工智能代理。这三类应用代表着不同的技术应用体系也是最容易导致大家出现简单任务复杂化的主要原因。例如有时候仅需大模型加上 RAG 就能解决的问题却非要引入外部函数调用或者在函数调用足以应对的场景中却过度构建代理框架。这种现象的根本原因在于对这三种应用类别的理解不够透彻或对各种技术栈的潜在效能理解不清。所以在深入探讨构建 AI Agent 的不同开发框架之前我们将通过三个实际案例在介绍AI Agent必须掌握的基础知识的同时分别来实际的构建聊天机器人、人工智能助手和人工智能代理三个场景让大家深入理解这些概念同时帮助大家在接收到实际的开发任务时能够迅速做出最正确的的技术选型。首先我们从用户的角度直观的感受这三种智能应用带给我们的使用体验- 聊天机器人主要设计用于进行对话回答简单问题或提供客户服务。这些机器人有的非常基础仅依靠预设的回复而更先进的聊天机器人可以靠RAG等技术来提升对话质量尽管如此它们处理的问题范围通常相对有限。- 人工智能助手这些工具的功能更为全面和复杂。它们不仅能搜索信息和生成内容还能管理家中的智能设备等。通过使用人工智能理解上下文和用户偏好这些助手就像个人定制的私人助理。- 人工智能代理这些系统是所有智能应用中功能最强大的。它们被设计来自主执行多种任务、做出决策和解决问题并且能够与现实世界互动。例如它们能为您预订航班、在线购物甚至在合同谈判中代表您行事。在这里大家可能会有疑问像ChatGPT这样的应用在对话过程中也能执行搜索信息等任务为什么它们还是被认为是聊天机器人这正是我们接下来要解释的问题。事实上这些应用具备人工智能助手的功能只不过是通过聊天机器人的形式为我们提供服务。通过即将展示的案例大家将能更深刻地理解这一点。接下来我们就以ChatGPT应用为例来进行第一个案例聊天机器人的实现。ChatGPT 于 2022 年 11 月推出建立在 OpenAI 的 GPT-3最初是 GPT-3.5模型 大语言模型系列之上并使用监督学习和强化学习技术进行微调。此后ChatGPT 引发了人工智能热潮推出仅两个月就拥有 1 亿用户。除了使用其官方提供的应用服务ChatGPT对于开发人员来说我们可以通过底层的开发语言将大模型集成到我们个人的应用程序中。这里我们选择使用 Python 进行演示。当我们通过大模型的API进行会话交互时数据交换的格式如下图所示上图中展示的JSON结构是API交互中常用的数据格式。不仅仅是OpenAI的GPT模型其他在线模型或者开源模型均遵循这种规范。在这个例子中我们看到有一个对象包含两个键值对role: user和content: your question。这表示交互中用户的角色被标识为user并且用户的输入内容为your question。这种格式化的数据结构允许API清晰地解析出发送者的角色和对话内容从而进行有效的处理和响应。要发送到 GPT 模型的问题必须包含在字典列表中。我们使用OpenAI的Python客户端库来调用GPT模型以获取聊天回复来看代码实现from openai import OpenAI client OpenAI() response client.chat.completions.create( modelgpt-4o-mini, messages[ {role: user, content: 请你详细的介绍一下什么是人工智能}, ] )当大模型处理完用户的输入它会返回一个响应对象。此时我们便可以从响应体中大提取模型生成的消息内容。response.choices[0].message print(response.choices[0].message.content)输出人工智能Artificial Intelligence简称AI是计算机科学的一个分支旨在创造能够模拟人类智能的系统和技术。其目标是让机器可以执行通常需要人类智慧的任务。这些任务包括学习、推理、问题解决、理解自然语言、感知环境以及做出决策等。 ### 人工智能的基本概念 1. **学习能力** - **机器学习Machine LearningML**通过算法和数据让计算机从经验中学习并改进其性能。机器学习的子领域还包括深度学习Deep Learning它模仿人脑神经网络的结构和功能。 2. **推理与逻辑** - AI系统可以运用逻辑推理来解决问题或做决策。它们能够基于已有的信息进行推论得出新的结论。 3. **自然语言处理NLP** - 使计算机能够理解、解释和生成自然语言以便更好地与人类进行互动。 4. **感知能力** - AI可以通过视觉、听觉等感官技术如计算机视觉和语音识别来感知周围的环境从而作出相应的反应。 5. **机器人技术** - 结合人工智能机器人能够执行复杂的任务从制造业的自动化到医疗和服务行业的应用。 ### 人工智能的分类 1. **传统人工智能** - 主要基于规则和逻辑推理的系统能够解决特定的问题。 2. **现代人工智能** ... ### 结论 人工智能是一个迅速发展的领域它正在深刻改变我们生活和工作的方式。从提高生产力到改善人们的生活质量AI 具有巨大的潜力但同时也需要我们认真思考其带来的挑战和影响以确保它在安全和伦理的框架内发展。上述的交互过程如下图所示接下来围绕这种一问一答的逻辑我们就可以构建非常简单的While循环来生成一个持续对话的交互程序代码如下所示from openai import OpenAI client OpenAI() while True: prompt input(\n用户提问) if prompt 退出: break # 如果输入的是“退出”则结束循环 completion client.chat.completions.create( modelgpt-4o-mini, messages[{role: user, content: prompt}], max_tokens1024, temperature0.8) message completion.choices[0].message.content print(f模型回复:{message})输出用户提问 你好请你介绍一下你自己 模型回复:你好我是一个人工智能助手旨在提供信息和帮助解决问题。我可以回答各种问题提供建议或者帮助你获取你所需要的信息。无论是学习、工作还是生活中的疑问欢迎随时向我提问你有什么想了解的呢 用户提问 你好我叫木羽 模型回复:你好木羽很高兴认识你。有什么我可以帮助你的吗 用户提问 请问我叫什么 模型回复:抱歉我无法知道您的名字。您可以告诉我您叫什么或者如果您有其他问题我很乐意帮助您 用户提问 退出如上所示的例子正如我们之前所讨论的单个大模型并不具备记忆和状态跟踪的能力它仅将每个输入视为一个独立的事件来处理。这在多轮对话中带来的实际的问题就是如上图所示我们需要将每次的对话和大模型的回复 不断地追加到传递给 API 的消息字典列表中。这样大模型就能够知道我们之前提出的问题及其提供的答复。所以代码更新如下from openai import OpenAI client OpenAI() # 创建一个会话列表来不断地追加历史对话纪律 messages [] while True: prompt input(\n用户提问 ) if prompt 退出: break # 如果输入的是“退出”则结束循环 messages.append( { role:user, content:prompt }) completion client.chat.completions.create( modelgpt-4o-mini, messages messages) response completion.choices[0].message.content print(f模型回复:{response}) messages.append( { role:assistant, content:response })用户提问 你好请你介绍一下你自己 模型回复:你好我是一款由OpenAI开发的人工智能语言模型旨在回答问题、提供信息、协助撰写文本和进行多种语言的互动。我可以帮助你寻找知识、解决问题、提供创意建议等。如果你有任何具体问题或者需要帮助的地方随时问我 用户提问 我是木羽很高兴认识你 模型回复:你好木羽很高兴认识你如果你有什么想聊的或需要帮助的地方尽管告诉我 用户提问 请问我叫什么 模型回复:你刚刚告诉我你叫木羽。如果我理解错了请告诉我。 你有什么想讨论的或者需要帮助的地方吗 用户提问 退出messages[{role: user, content: 你好请你介绍一下你自己}, {role: assistant, content: 你好我是一款由OpenAI开发的人工智能语言模型旨在回答问题、提供信息、协助撰写文本和进行多种语言的互动。我可以帮助你寻找知识、解决问题、提供创意建议等。如果你有任何具体问题或者需要帮助的地方随时问我}, {role: user, content: 我是木羽很高兴认识你}, {role: assistant, content: 你好木羽很高兴认识你如果你有什么想聊的或需要帮助的地方尽管告诉我}, {role: user, content: 请问我叫什么}, {role: assistant, content: 你刚刚告诉我你叫木羽。如果我理解错了请告诉我。 你有什么想讨论的或者需要帮助的地方吗}]如上案例所示大模型可以通过不断追加会话消息列表来模拟记忆功能这是聊天机器人应用的一种常见实践。借助于大模型的处理能力和这种短期记忆机制构造出来的问答系统能够与用户进行交互并帮助解答问题。当然为了解决大模型知识的局限性问题我们经常采用RAG技术来增强其信息检索能力。但需要明确的是尽管结合了RAG技术LLM和RAG的组合主要还是用于知识问答。因此如果没有其他技术的结合这种系统还是属于聊天机器人的范畴。所以如果大家需求仅限于让大模型回答问题或者基于本地数据提供回复那么只需要大模型和RAG技术栈并不涉及任何更复杂的代理Agent相关技术。让我们先回顾一下聊天机器人、人工智能助手和人工智能代理之间的区别以便清楚地了解聊天机器人是那些基本上被设计用来进行对话、回答小问题或提供客户服务帮助的小朋友。有些非常简单有些则通过机器学习更先进但它们的范围是有限的。然后我们还有人工智能助手这完全是另一回事了。这些小工具可以处理大量不同的任务例如搜索信息、生成内容甚至管理家中的智能设备。他们使用人工智能来了解上下文并了解您的偏好就像您的小私人助理一样但真正成为炸弹的是人工智能特工。这些才是真正的交易。它们旨在自主执行各种任务、做出决策、解决问题最重要的是与现实世界互动想象一下他们为您预订航班、购物甚至谈判合同。1.1 聊天机器人在你应该已经听说过ChatGPT Chat Generative Pre-trained Transformer ——一个由OpenAI开发的聊天机器人。 ChatGPT 于 2022 年 11 月推出建立在 OpenAI 的 GPT-3特别是GPT-3.5 大型语言模型 ( LLMs ) 系列之上并使用监督学习和强化学习技术进行微调。此后ChatGPT 引发了人工智能热潮推出仅两个月就拥有 1 亿用户。from openai import OpenAI client OpenAI() response client.chat.completions.create( modelgpt-4o-mini, messages[ {role: system, content: 你是一位乐于助人的智能助理}, {role: user, content: 帮我介绍一下什么是人工智能}, ] )要发送到 ChatGPT 的问题必须包含在字典列表中。例如上述问题按照以下格式发送到ChatGPTwhile True: prompt input(\n提出一个问题) if prompt 退出: break # 如果输入的是“退出”则结束循环 completion client.chat.completions.create( modelgpt-4o-mini, messages[{role: user, content: prompt}], max_tokens1024, temperature0.8) message completion.choices[0].message.content print(message)ChatGPT 不记得您之前的问题。因此为了与它进行有意义的对话您需要将对话反馈给 API。还记得需要传递给 API 的字典列表吗要将之前的对话反馈给 ChatGPT您首先将 ChatGPT 的回复附加到列表中这样ChatGPT 就能够知道您之前提出的问题及其提供的答复。以下是更新后的代码允许用户与 ChatGPT 进行有意义的对话messages [] while True: prompt input(\n提出一个问题 ) if prompt 退出: break # 如果输入的是“退出”则结束循环 messages.append( { role:user, content:prompt }) completion client.chat.completions.create( modelgpt-4o-mini, messages messages) response completion.choices[0].message.content print(response) messages.append( { role:assistant, content:response })存在的问题是 输出 无法给到下游。 要解决的根本两点问题就是1. 如何让 大模型产生结构化的输出2. 如何让 大模型在一次对话中自动执行多个步骤。