在上一节中,我们介绍了近两年大模型技术的迅速发展及其技术演进,这包括从大模型自身的能力持续突破(原生能力和涌现能力),基本的函数调用功能,到引入 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( model="gpt-4o-mini", messages=[ {"role": "user", "content": "请你详细的介绍一下:什么是人工智能?"}, ] )当大模型处理完用户的输入,它会返回一个响应对象。此时我们便可以从响应体中大提取模型生成的消息内容。
response.choices[0].message print(response.choices[0].message.content)输出:
人工智能(Artificial Intelligence,简称AI)是计算机科学的一个分支,旨在创造能够模拟人类智能的系统和技术。其目标是让机器可以执行通常需要人类智慧的任务。这些任务包括学习、推理、问题解决、理解自然语言、感知环境以及做出决策等。 ### 人工智能的基本概念 1. **学习能力**: - **机器学习(Machine Learning,ML)**:通过算法和数据,让计算机从经验中学习并改进其性能。机器学习的子领域还包括深度学习(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( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], max_tokens=1024, temperature=0.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( model="gpt-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( model="gpt-4o-mini", messages=[ {"role": "system", "content": "你是一位乐于助人的智能助理"}, {"role": "user", "content": "帮我介绍一下什么是人工智能"}, ] )要发送到 ChatGPT 的问题必须包含在字典列表中。例如,上述问题按照以下格式发送到ChatGPT:
while True: prompt = input('\n提出一个问题:') if prompt == "退出": break # 如果输入的是“退出”,则结束循环 completion = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], max_tokens=1024, temperature=0.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( model="gpt-4o-mini", messages = messages) response = completion.choices[0].message.content print(response) messages.append( { 'role':'assistant', 'content':response })存在的问题是: 输出 无法给到下游。 要解决的根本两点问题就是:
1. 如何让 大模型产生结构化的输出
2. 如何让 大模型在一次对话中,自动执行多个步骤。