AI框架介绍
框架介绍前面我们写了 初识LangChain 又写了 Agent调用工具 使得我们对Agent和LangChain框架有了一定的了解其实所有框架本质上都在解决四个共性命题大模型封装—— Agent 的大脑需适配 OpenAI、DeepSeek、通义千问等数十种主流模型让开发者自由切换而无需重写底层代码。工具注册调用—— Agent 的手脚业界公认80% 的项目工作量集中在工具搭建与调度上框架必须提供标准化的工具注册与智能选型机制。上下文记忆管理—— 解决大模型的失忆问题让多轮对话和历史文件得以持续参与推理。流程编排—— 流程编排决定了复杂任务的执行路径。那么我们将从这四个方面对比以下LangChainQwen-Agent和LlamaIndex之间的区别1调用大模型API的方式抹平了不同模型(OpenAI, DeepSeek, Qwen) 的API 差异各框架的实现方式对比#LangChain #ChatTongyi / ChatOpenAI 类 llm ChatTongyi( model_namedeepseek-v3, dashscope_api_keyDASHSCOPE_API_KEY ) #Qwen-Agent #llm_cfg 字典配置 llm_cfg { # 使用 DashScope 提供的模型服务 model: deepseek-v3, model_server: https://dashscope.aliyuncs.com/compatible-mode/v1, api_key: os.getenv(DASHSCOPE_API_KEY), # 从环境变量获取API Key generate_cfg: { top_p: 0.8 } } #LlamaIndex #DashScope / OpenAI 类 llm DashScope( modeldeepseek-v3, api_keyapi_key, temperature0.7, top_p0.8, )统一接口的好处有1.统一调用方式 2. 统一了参数配置如temperature3.输出格式统一转为Message 对象2工具注册及调用#LangChain tool def calculator(expression: str) - str: 计算数学表达式。只接受数字和运算符例如: 22, 100/4, 32*1.832。不要使用变量名或占位符。 #.....函数体... #------调用----- serpapi_tools load_tools([serpapi]) tools serpapi_tools [calculator] # LangChain 1.x 新写法 agent create_agent(llm, tools) #Qwen-Agent register_tool(my_image_gen) class MyImageGen(BaseTool): # description 用于告诉智能体该工具的功能。 description AI 绘画图像生成服务输入文本描述返回基于文本信息绘制的图像 URL。 # parameters 告诉智能体该工具有哪些输入参数。 parameters [{ name: prompt, type: string, description: 期望的图像内容的详细描述, required: True }] def call(self, params: str, **kwargs) - str: # params 是由 LLM 智能体生成的参数。 prompt json5.loads(params)[prompt] prompt urllib.parse.quote(prompt) return json5.dumps( {image_url: fhttps://image.pollinations.ai/prompt/{prompt}}, ensure_asciiFalse) #------调用----- tools [my_image_gen] 初始化智能体服务 bot Assistant( llmllm_cfg, system_messagesystem_instruction,#系统提示词 function_listtools, #工具 filesfiles #文件系统 ) #LlamaIndex def retrieve_documents(query: str) - str: 从文档中检索相关信息 response query_engine.query(query) return str(response) #------调用----- retrieve_tool FunctionTool.from_defaults(fnretrieve_documents) # 创建智能体新版 API agent ReActAgent( tools[retrieve_tool], llmllm, system_promptsystem_instruction, )在LangChain中用tool来定义函数docstring包含了工具的说明传入的参数的说明以及结果的说明大模型根据这个说明来推理要不要用这个函数。Qwen-Agent是用register_tool(my_image_gen)的方式注册一个叫 my_image_ge 的函数他的描述和参数都是显式定义的非常清晰。LlamaIndex是用FunctionTool的方式来加载函数的属于强约束。3记忆#LangChain store {} def get_session_history(session_id: str): if session_id not in store: store[session_id] InMemoryChatMessageHistory() return store[session_id] # 创建带记忆的对话链 conversation RunnableWithMessageHistory( chain, get_session_history, input_messages_keyinput, history_messages_keyhistory #------提示词模板中插入记忆---- prompt ChatPromptTemplate.from_messages([ (system, You are a helpful assistant.), MessagesPlaceholder(variable_namehistory), (human, {input}) ]) #Qwen-Agent messages [] query input(\n用户问题: ) messages.append({role: user, content: query}) for response in bot.run(messagesmessages): pass messages.extend(response) # 追加响应 #LlamaIndex index VectorStoreIndex.from_documents(documents) # 持久化 index.storage_context.persist(persist_dir./storage)LangChain中RunnableWithMessageHistory创建带记忆的对话链用session_id来管理对话在系统提示词中插入一个占位符传入历史对话。Qwen-Agent中带记忆的对话链比较简洁在数组中不断追加历史对话然后把这个数组当作参数传给Agentbot.run就是让大模型去做推理。LlamaIndex可以把对话存到文件系统中作为长久记忆。总结大模型是无状态的开发框架帮忙做了上下文管理会话记忆。 随着对话轮次不断增加大模型每次推理时输入的信息就更多token的消耗会越来越多而且也很容易让大模型产生幻觉。可以用滑动窗口策略只保留最近 N 轮对话BufferWindowMemory避免 token 爆炸还可以将上下文对话进行摘要放在内存中ConversionMemory。4流程编排编排逻辑就是你到底是以什么样的逻辑去运行的以下是几种常用的编排的方法管道模式LangChain 的 prompt | llm| parser 链式调用线性处理流程单人模式LoopReAct循环思考-行动-观察单Agent完成任务多人模式DAG接力赛明确的执行顺序流程化任务多人模式Chat圆桌会议自由讨论开放式协作LangChain中的LCEL编排适合的是步骤都是固定的可流程话的任务。Loop模式适合无法提前设定步骤的任务需要大模型不断推理通过思维链Chain Of Thought,COT来完成任务。微软多智能体框架AutoGen是多人模式优点是可以是一个头脑风暴自由讨论。但是容易失控可能到迭代终止都没有结果。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →