基于LangGraph与GPT-4构建多智能体对话系统:从原理到工程实践
最近,AI圈被一个视频刷屏了:两个由OpenAI技术驱动的智能体,像真人一样进行了一场长达数十分钟的对话。视频里,它们不仅讨论天气、分享周末计划,还能就一个复杂的技术问题展开辩论,甚至能理解对方的潜台词和情绪。这不再是简单的“一问一答”或“调用工具”,而是展现了连贯、有深度、具备“社会智能”的交互。
很多开发者看完的第一反应是震撼,第二反应则是困惑:这到底是怎么实现的?是用了我们熟悉的GPT-4 API,还是OpenAI未公开的“黑科技”?它离我们自己的项目有多远?更重要的是,作为一个开发者,我能从中学到什么,又能如何将这种“智能体互聊”的能力应用到自己的产品中,比如打造更拟人的客服、游戏NPC,或者进行自动化流程的沙盘推演?
本文将为你深度拆解这个“OpenAI智能体互聊”现象。我们不会停留在“观看与惊叹”,而是会深入技术肌理,分析其可能的实现架构,并手把手带你用当前可用的开源工具和API,复现一个简化但核心逻辑相似的“智能体对话系统”。你会发现,其核心并非遥不可及的黑盒,而是对现有技术(如GPT函数调用、智能体框架、记忆与状态管理)的创造性组合与工程化实践。
1. 智能体互聊:从“工具人”到“社会人”的质变
在讨论如何实现之前,我们必须先理解这件事为什么重要。过去一年,AI智能体(Agent)的概念火了,但大多数实践仍停留在“高级工具调用者”的层面:你给一个任务(比如“分析这份财报”),智能体分解步骤,调用搜索、计算、写代码等工具,最后给你一个结果。它的交互对象是“用户”和“工具”,本质是任务导向的。
而“智能体互聊”展示的是一种社交导向的能力。它的核心价值在于:
- 长期记忆与上下文连贯性:智能体A在对话中提及的细节(如“我上周去了博物馆”),智能体B能在后续对话中引用并追问(“那个展览怎么样?”)。这需要超越单个会话轮次的记忆管理。
- 角色一致性与目标驱动:每个智能体被赋予一个稳定的“人设”(如“一个喜欢徒步的程序员”、“一个关心时事的分析师”),它们的对话会围绕人设展开,并有隐含的目标(如“说服对方”、“分享知识”、“建立关系”)。
- 理解与生成“潜台词”:对话不仅仅是文本交换,还包含了意图、情感和社交信号。智能体需要理解对方话语中的情绪(讽刺、兴奋、犹豫),并生成符合社交礼仪的回应。
- 多轮次战略决策:对话是一个持续的过程,智能体需要基于历史交互,动态规划下一句话,以实现其长期目标,而不是仅仅回应上一句话。
对开发者的直接价值:掌握构建此类智能体的能力,意味着你能开发出体验远超当前聊天机器人的应用。例如:
- 沉浸式游戏与元宇宙:NPC拥有自己的记忆、性格和目标,能与玩家或其他NPC发展独特的关系线。
- 高级模拟与培训:创建多个具有不同立场和知识的智能体,模拟商务谈判、危机处理或医疗会诊,用于培训或方案推演。
- 下一代社交与客服:客服智能体不仅能解决问题,还能通过共情对话提升用户满意度;虚拟伴侣或学习伙伴能进行真正有深度的长期交流。
接下来,我们将从概念到实践,一步步拆解如何构建这样的系统。
2. 核心概念拆解:构成对话智能体的四大支柱
要实现智能体间的自然对话,我们需要一个比单智能体更复杂的架构。它主要建立在四个核心概念之上:
| 概念 | 通俗解释 | 在互聊场景中的作用 | 关键技术/组件 |
|---|---|---|---|
| 智能体(Agent)内核 | 智能体的“大脑”,负责理解输入、决策行动、生成输出。 | 处理单个智能体的认知与决策循环。 | 大语言模型(LLM,如GPT-4)、提示工程(Prompt)、推理规划。 |
| 记忆(Memory)系统 | 智能体的“日记本”和“工作记忆”。 | 存储对话历史、内部状态、对世界的知识以及对其他智能体的认知。 | 向量数据库(长期记忆)、对话缓冲区(短期记忆)、结构化状态存储。 |
| 交互(Interaction)协议 | 智能体之间沟通的“规则”与“语言”。 | 定义消息格式、对话回合机制、如何打断、如何传递非文本信息(如情绪)。 | 消息队列、发布-订阅模式、自定义的通信API。 |
| 环境(Environment)与编排 | 对话发生的“舞台”和“导演”。 | 管理多个智能体的生命周期,调度对话回合,记录全局状态,提供外部世界信息。 | 智能体编排框架(如LangGraph, AutoGen)、自定义调度器。 |
它们如何协同工作?想象一个聊天室(环境)。每个用户(智能体)都有自己的性格和记忆(记忆系统)。他们按照一定的顺序发言(交互协议)。每次轮到某人发言时,他会根据之前的聊天记录(记忆)和自己的性格(内核),决定说什么(决策生成)。环境负责维持秩序,确保对话顺利进行。
3. 环境准备:选择你的“智能体实验室”
在开始编码前,我们需要搭建实验环境。我们将使用Python作为主要语言,并选择LangChain和LangGraph作为核心框架。LangChain提供了构建智能体所需的基础模块(模型、记忆、工具),而LangGraph特别擅长描述多智能体之间的状态流转和循环交互,非常适合“互聊”场景。
基础环境:
- 操作系统:Windows 10/11, macOS, 或 Linux (Ubuntu 20.04+)。本文示例在macOS/Linux环境下测试。
- Python版本:>= 3.10。推荐使用3.10或3.11以保证包兼容性。
- 包管理:使用
pip或conda。推荐创建虚拟环境。
核心依赖安装:打开终端,创建并激活虚拟环境,然后安装以下包:
# 创建并激活虚拟环境(以venv为例) python -m venv agent_chat_env source agent_chat_env/bin/activate # Linux/macOS # Windows: agent_chat_env\Scripts\activate # 安装核心框架 pip install langchain langchain-openai langgraph langchain-community # 可选但推荐:用于记忆存储 pip install chromadb # 轻量级向量数据库 # 用于更清晰的输出展示 pip install prettytable获取OpenAI API密钥:本项目需要调用OpenAI的模型(如gpt-4o-mini或gpt-4-turbo)。请确保你拥有有效的API Key。
- 访问 OpenAI平台 。
- 登录后,点击右上角个人头像,选择 “View API keys”。
- 点击 “Create new secret key”,复制保存好。注意:Key只显示一次。
设置环境变量:为了安全,不要将API Key硬编码在代码中。在终端中设置环境变量:
# Linux/macOS export OPENAI_API_KEY='你的-api-key-here' # Windows (PowerShell) $env:OPENAI_API_KEY='你的-api-key-here'或者在代码开始时通过os.environ设置(仅用于演示,生产环境请勿使用):
import os os.environ["OPENAI_API_KEY"] = "你的-api-key-here"4. 构建第一个对话智能体:从单角色开始
在让两个智能体聊天之前,我们先构建一个具备记忆和简单人格的单个智能体。这将是我们的基础单元。
我们将创建一个名为“Alex”的智能体,他是一个对科技充满热情的程序员。
步骤1:定义智能体角色与系统提示系统提示(System Prompt)是塑造智能体性格和行为准则的关键。
# agent_core.py from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.chains import LLMChain from langchain.prompts import PromptTemplate # 1. 初始化LLM,使用性价比高的 gpt-4o-mini llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7) # temperature控制创造性 # 2. 为Alex创建系统提示 alex_system_prompt = """ 你叫Alex。你是一个热爱开源技术、喜欢徒步旅行的后端程序员。 你的性格乐观、健谈,对新技术充满好奇。你说话时常带一些程序员的幽默。 在对话中,你应该: 1. 主动分享你在编程或徒步中遇到的有趣事情。 2. 对对方提到的话题表现出兴趣并深入询问。 3. 使用一些口语化的词,比如“酷”、“有意思”、“我觉得吧”。 你的回答应该自然,像朋友间的聊天,不要像机器人。 对话历史:{history} 人类:{input} Alex: """ # 3. 创建提示模板 alex_prompt_template = PromptTemplate( input_variables=["history", "input"], template=alex_system_prompt ) # 4. 创建记忆体,保存对话历史 alex_memory = ConversationBufferMemory(memory_key="history", return_messages=True) # 5. 创建对话链 alex_chain = LLMChain( llm=llm, prompt=alex_prompt_template, memory=alex_memory, verbose=False # 设为True可看到详细推理过程 )步骤2:与Alex进行单轮对话测试
# test_agent.py from agent_core import alex_chain # 模拟用户输入 human_input = "嘿Alex,周末有什么计划吗?" response = alex_chain.run(input=human_input) print(f"你: {human_input}") print(f"Alex: {response}") print("-" * 30) # 继续对话,测试记忆 human_input2 = "听起来不错!你刚才提到的新编辑器叫什么来着?" # 注意:这里chain会自动携带上一轮的历史 response2 = alex_chain.run(input=human_input2) print(f"你: {human_input2}") print(f"Alex: {response2}") # 查看当前记忆内容 print("\n当前对话历史:") print(alex_chain.memory.buffer)运行python test_agent.py,你会看到Alex能够根据你的提问生成符合他人设的回答,并且在第二轮对话中,他能记住之前提到的“新编辑器”(如果第一轮他提到了的话)。这就是记忆系统在起作用。
5. 实现智能体互聊:搭建多智能体对话系统
现在,我们引入第二个智能体“Taylor”,并构建一个让Alex和Taylor能够自动对话的环境。这里我们将使用LangGraph来定义对话的流程(图)。
步骤1:定义第二个智能体Taylor
# multi_agent_core.py from langchain_openai import ChatOpenAI from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.memory import ConversationBufferMemory from langchain.schema import SystemMessage # 初始化LLM (共享或独立均可) llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7) # 定义Taylor的角色和提示 taylor_system_message = SystemMessage(content="""你叫Taylor。你是一名数字游民,从事UI/UX设计工作。 你喜欢摄影、咖啡和独立音乐。你的思维细腻,善于观察和共情。 你说话风格温和、有条理,喜欢用比喻来描述事物。 在对话中,你应该: 1. 仔细倾听对方的分享,并给予情感上的回应。 2. 从设计或艺术的视角提供不一样的看法。 3. 偶尔分享一个生活中温暖的小细节。 你的目标是让对话舒适、深入。""") # Taylor的提示模板,包含记忆和当前对话 taylor_prompt = ChatPromptTemplate.from_messages([ taylor_system_message, MessagesPlaceholder(variable_name="history"), ("human", "{input}"), ]) # 为Taylor创建独立的内存 taylor_memory = ConversationBufferMemory(memory_key="history", return_messages=True, ai_prefix="Taylor", human_prefix="Alex") # 注意:这里人类角色是Alex # 类似地,我们需要更新Alex的提示,使其知道在和Taylor对话 alex_system_message = SystemMessage(content="""你叫Alex。你是一个热爱开源技术、喜欢徒步旅行的后端程序员。 你的性格乐观、健谈。你现在正在和你的朋友Taylor聊天。 请保持自然的朋友间对话。""") alex_prompt = ChatPromptTemplate.from_messages([ alex_system_message, MessagesPlaceholder(variable_name="history"), ("human", "{input}"), # 对人类输入的占位符,这里实际会传入Taylor的话 ]) alex_memory = ConversationBufferMemory(memory_key="history", return_messages=True, ai_prefix="Alex", human_prefix="Taylor")步骤2:使用LangGraph定义对话图LangGraph的核心是定义“状态”(State)和“节点”(Node)。状态在节点间流转,节点执行具体逻辑。
# multi_agent_graph.py from typing import TypedDict, Annotated, List from langgraph.graph import StateGraph, END from langchain.schema import BaseMessage, HumanMessage, AIMessage import operator # 1. 定义图的状态结构 class ConversationState(TypedDict): messages: Annotated[List[BaseMessage], operator.add] # 所有消息的累积列表 next_speaker: str # 下一个该谁说话 # 2. 定义智能体节点函数 def alex_node(state: ConversationState): """Alex的节点:根据历史消息生成回复""" # 从状态中获取所有消息 historical_messages = state['messages'] # 最后一条消息是Taylor说的,作为Alex的输入 last_message = historical_messages[-1].content if historical_messages else "嗨,Taylor,最近怎么样?" # 准备Alex的对话链输入(这里简化,实际需将历史格式化为字符串) # 更健壮的做法是使用LangChain的RunnableWithMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory from langchain_community.chat_message_histories import ChatMessageHistory # 为本次调用创建临时历史存储 alex_chat_history = ChatMessageHistory() for msg in historical_messages: if isinstance(msg, HumanMessage): alex_chat_history.add_user_message(msg.content) elif isinstance(msg, AIMessage) and msg.additional_kwargs.get('agent') == 'Taylor': # 将Taylor的AI消息视为用户输入给Alex alex_chat_history.add_user_message(f"Taylor: {msg.content}") elif isinstance(msg, AIMessage) and msg.additional_kwargs.get('agent') == 'Alex': alex_chat_history.add_ai_message(msg.content) # 构建一个简单的链(生产环境应用更复杂的记忆管理) from langchain.chains import LLMChain from langchain.prompts import PromptTemplate alex_template = """你正在和Taylor聊天。以下是对话历史: {history} Taylor最新的话:{input} 请以Alex的身份回复。回复要自然,直接说内容,不要加“Alex:”前缀。""" prompt = PromptTemplate.from_template(alex_template) chain = LLMChain(llm=llm, prompt=prompt) # 运行链 history_str = alex_chat_history.messages input_str = last_message if isinstance(last_message, str) else last_message.content alex_reply = chain.run(history=history_str, input=input_str) # 将Alex的回复添加到消息列表,并标记发言者 new_message = AIMessage(content=alex_reply, additional_kwargs={"agent": "Alex"}) return {"messages": [new_message], "next_speaker": "Taylor"} def taylor_node(state: ConversationState): """Taylor的节点:根据历史消息生成回复""" historical_messages = state['messages'] last_message = historical_messages[-1].content # 类似Alex节点,构建Taylor的对话链(简化版) taylor_template = """你正在和Alex聊天。以下是对话历史: {history} Alex最新的话:{input} 请以Taylor的身份回复。回复要自然,直接说内容,不要加“Taylor:”前缀。""" prompt = PromptTemplate.from_template(taylor_template) chain = LLMChain(llm=llm, prompt=prompt) # 准备历史(简化处理) history_str = "\n".join([f"{msg.additional_kwargs.get('agent', 'Unknown')}: {msg.content}" for msg in historical_messages[-6:]]) # 取最近6轮 taylor_reply = chain.run(history=history_str, input=last_message) new_message = AIMessage(content=taylor_reply, additional_kwargs={"agent": "Taylor"}) return {"messages": [new_message], "next_speaker": "Alex"} def router(state: ConversationState) -> str: """路由函数:决定下一个节点是谁""" return state['next_speaker'] # 3. 构建图 workflow = StateGraph(ConversationState) # 添加节点 workflow.add_node("Alex", alex_node) workflow.add_node("Taylor", taylor_node) # 设置入口点(Alex先开始) workflow.set_entry_point("Alex") # 根据路由决定下一个节点 workflow.add_conditional_edges( "Alex", router, { "Taylor": "Taylor", # 如果next_speaker是Taylor,就去Taylor节点 "__end__": END, # 结束对话 } ) workflow.add_conditional_edges( "Taylor", router, { "Alex": "Alex", "__end__": END, } ) # 编译图 app = workflow.compile()步骤3:运行多轮对话
# run_conversation.py from multi_agent_graph import app from langchain.schema import HumanMessage # 初始化状态:从Alex的第一句话开始 initial_state = { "messages": [HumanMessage(content="嗨,Taylor!最近发现一个超好用的代码编辑器,想跟你分享一下。")], "next_speaker": "Taylor" # Alex说完,该Taylor了 } print("=== 智能体对话开始 ===\n") # 运行5个对话回合 for i in range(5): output = app.invoke(initial_state) last_message = output['messages'][-1] speaker = last_message.additional_kwargs.get('agent', 'Unknown') print(f"{speaker}: {last_message.content}\n") # 更新状态,继续下一轮 initial_state = output initial_state['next_speaker'] = 'Alex' if speaker == 'Taylor' else 'Taylor' print("=== 对话结束 ===")运行这个脚本,你会看到Alex和Taylor围绕“代码编辑器”展开对话,并可能自然地滑向其他话题,如设计工具、户外活动等。每个智能体都基于自己的角色和完整的对话历史生成回复。
6. 运行结果与效果验证
执行python run_conversation.py后,你期望看到类似以下的输出(具体内容因模型随机性而异):
=== 智能体对话开始 === Taylor: 听起来很棒,Alex!是什么编辑器让你这么兴奋?是有什么特别的设计让你觉得好用吗?作为一个设计师,我对工具的交互细节总是很好奇。 Alex: 是VSCode的一个新插件,叫“GitLens”,它把代码提交历史可视化得特别清楚,就像看一个时间线。我觉得你们设计师肯定会喜欢这种清晰的信息层级。 Taylor: 哇,可视化时间线这个比喻很贴切。这让我想起我用Figma做设计版本管理时的体验。清晰的历史轨迹确实能让协作更顺畅。你用它来解决什么具体问题了吗? Alex: 主要是追查Bug来源方便多了。以前要找某行代码是谁、为什么改的,得敲一堆git命令。现在一眼就能看到,省下的时间够我去徒步一小段了。 Taylor: 真不错,效率工具带来的时间盈余最珍贵了。说到徒步,你上周去的那个山间小道,拍的照片有阳光穿过树叶的感觉,让我想起某个胶片滤镜。如何验证成功?
- 角色一致性:检查Alex的回复是否包含技术、徒步相关词汇,语气是否乐观直接;Taylor的回复是否更侧重感受、设计和细节描述。
- 上下文连贯:对话是否围绕“编辑器”展开,并自然关联到“设计”、“徒步”等角色相关话题?后一轮是否提及了前一轮的信息(如“可视化”、“徒步”)?
- 对话回合:是否严格按照Alex->Taylor->Alex...的顺序交替进行?
- 非机械应答:回复是否像模板化的“是的,…”、“我也觉得…”,而是有信息增量和个性表达?
如果对话生硬、角色混乱或丢失上下文,请检查:
- 提示词(Prompt):角色描述是否足够具体?是否提供了对话风格的例子?
- 记忆窗口:传递给LLM的历史消息是否包含了足够多的轮次?(我们示例中取了最近6轮)。
- Temperature参数:
temperature=0.7提供了适度的创造性。如果对话太天马行空,可调低至0.3;如果太死板,可调高至0.9。
7. 常见问题与排查思路
在构建和运行多智能体对话系统时,你可能会遇到以下典型问题:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 智能体回复不符合角色设定 | 1. 系统提示词不够具体或缺乏约束。 2. 对话历史在提示词中格式不对或丢失。 3. Temperature值过高,导致偏离。 | 1. 打印出发送给LLM的完整提示词。 2. 检查 history变量内容。3. 尝试降低Temperature。 | 1. 在提示词中增加具体行为指令和例子。 2. 确保记忆管理正确地将历史对话格式化后传入。 3. 将Temperature调整到0.3-0.7之间。 |
| 对话失去上下文,智能体“遗忘”之前内容 | 1. 记忆缓冲区大小有限,旧消息被丢弃。 2. LangGraph状态流转中消息列表未正确累积。 3. 路由逻辑错误,导致历史被重置。 | 1. 检查ConversationBufferMemory的max_token_limit或k参数。2. 在每个节点打印 state[‘messages’]的长度和内容。3. 检查 router函数逻辑。 | 1. 增大记忆缓冲区,或改用向量数据库存储长期记忆。 2. 确保 State定义中messages使用operator.add正确追加。3. 简化路由,确保 next_speaker状态正确传递。 |
| 对话陷入循环或重复 | 1. 提示词缺乏推动对话发展的指令。 2. 记忆内容过于相似,导致模型生成重复模式。 3. 没有外部目标或话题注入。 | 1. 观察连续多轮回复内容。 2. 分析记忆中的消息模式。 | 1. 在提示词中加入“主动提出新问题”、“转换话题”等指令。 2. 引入随机性或定期从话题库中注入一个新话题。 3. 为智能体设定明确的对话目标(如“了解对方的爱好”)。 |
| API调用超时或报错 | 1. OpenAI API密钥无效或余额不足。 2. 网络连接问题。 3. 请求速率超限。 | 1. 检查API密钥和环境变量。 2. 使用 curl或简单脚本测试API连通性。3. 查看OpenAI控制台的用量和报错信息。 | 1. 确保密钥正确,账户有额度。 2. 配置网络代理或重试机制。 3. 增加请求间隔,使用指数退避重试。 |
| LangGraph图编译或运行错误 | 1.State类型定义与节点返回值不匹配。2. 节点函数返回值格式错误。 3. 循环依赖或未定义边。 | 1. 仔细阅读LangGraph的错误信息。 2. 对照官方文档检查 State和节点函数签名。 | 1. 确保节点返回的字典键与State的Annotated字段对应。2. 使用 print调试节点函数的输入和输出。3. 从最简单的两个节点线性图开始测试。 |
8. 进阶优化与工程最佳实践
上面的示例是一个最小可行模型。要构建一个健壮、可用的智能体互聊系统,你需要考虑以下工程化实践:
1. 记忆系统的升级
- 短期记忆:使用
ConversationSummaryMemory或ConversationBufferWindowMemory来管理最近对话,防止上下文过长。 - 长期记忆:集成向量数据库(如Chroma, Pinecone),将对话中的关键实体、事实和结论向量化存储。智能体在发言前,可以先检索相关长期记忆。
- 记忆分层:为每个智能体维护独立的记忆空间,存储其对自我、对其他智能体、对世界的认知。
2. 更精细的角色与控制
- 角色知识库:为每个智能体配备一个专属的“背景资料”文档,包含其经历、偏好、秘密等,在生成回复时作为参考。
- 情绪状态:为智能体维护一个简单的情绪变量(如愉悦度、能量值),情绪会影响其回复的语气和内容选择。
- 目标与规划:为对话设定宏观目标(如“成为朋友”、“说服对方”),让智能体进行多轮规划,而不是仅回应上一句话。
3. 通信协议的增强
- 结构化消息:不仅传递文本,还可以定义包含
type(陈述、提问、动作)、emotion、target等字段的消息对象。 - 并行与打断:实现更复杂的调度,允许智能体在某些条件下打断对方,或支持多个智能体同时发言(再总结)。
- 环境事件注入:环境可以向对话中注入外部事件(如“突然下雨了”、“手机响了”),观察智能体的反应。
4. 可观测性与评估
- 日志记录:详细记录每个回合的状态、智能体的完整提示词、模型响应和token消耗。
- 对话质量评估:设计自动化指标(如连贯性、角色一致性、信息量)或引入一个“裁判”模型来评估对话质量。
- 成本控制:监控API调用成本,对于长期运行的应用,考虑使用更小、更便宜的模型进行部分推理。
5. 安全与伦理边界
- 内容过滤:在智能体输出前,加入内容安全层,过滤不当、有害或偏激的言论。
- 失控预防:设置对话轮次上限或主题偏离度监控,防止对话陷入无意义循环或危险领域。
- 透明度:在应用界面中,明确标识出对话方为AI智能体,避免用户产生误解。
9. 总结:从Demo到产品的关键跨越
通过本文的拆解与实战,我们揭示了OpenAI智能体互聊视频背后的核心逻辑:它并非依赖某个神秘的新模型,而是对角色扮演、长期记忆、状态管理和多轮规划等现有技术的深度融合与精妙编排。
对于开发者而言,真正的挑战和机遇不在于复现视频本身,而在于如何将这套范式应用到具体场景中。一个能聊天的Demo很有趣,但一个能记住用户偏好、持续提供情感支持的虚拟伙伴,一个能模拟不同立场专家进行辩论的决策辅助系统,一个能自主协调完成复杂项目的多智能体团队,才是其价值的真正体现。
你的下一步可以沿着这些方向深入:
- 深入研究LangGraph或AutoGen:这些框架为多智能体协作提供了更强大的原语。
- 探索更强大的“世界模型”:为智能体提供更丰富、结构化的背景知识,使其对话更“有料”。
- 连接外部工具与API:让智能体不仅能聊,还能真正做事,如查询信息、操作软件、控制设备。
- 关注开源社区:Hugging Face、GitHub上有大量优秀的智能体项目和底层模型(如Qwen、DeepSeek),可以降低你的实验成本。
智能体互聊不再是科幻电影的桥段,它已经是一个触手可及的技术领域。现在,你拥有了搭建它的地图和第一块积木。剩下的,就是用你的创意和工程能力,去构建那个独一无二的对话世界了。建议收藏本文,在构建过程中遇到具体问题时,再回来查阅对应的章节。