LangChain写AI Agent系列 之 模型调用、提示词、输出解析

本文。我们通过API调用大模型,使用提示模板构建简单的 LLM 应用。正式开始学习之前,我们先了解一下LangChain的整体架构。

一. LangChain架构

LangChain 框架由多个开源库组成。请在架构页面阅读更多内容。

  • langchain-core:聊天模型和其他组件的基本抽象。
  • 集成包(例如,langchain-openailangchain-anthropic等):重要的集成已被拆分为轻量级软件包,由 LangChain 团队和集成开发人员共同维护。
  • langchain:构成应用程序认知架构的链、代理和检索策略。
  • langchain-community:由社区维护的第三方集成。
  • langgraph:用于将 LangChain 组件组合成可用于生产的应用程序的编排框架,具有持久性、流式传输和其他关键功能。请参阅LangGraph 文档。

img

二. 安装依赖库

需要安装 langchain-core,langchain-openai。运行命令如下:

在这里插入图片描述

例如:

img

三. 使用大模型

我们使用现在最火的国产大模型DeepSeek,DeepSeek官网的API最近暂停服务了,所以选用腾讯云的API。

在这里插入图片描述

运行输出如下:

img

BaseChatOpenAI对你接收messages对象作为输入,并生成messages对象作为输出。

除了文本内容之外,messages对象还传递对话角色并保存重要数据,例如工具调用和 token 使用计数。

LangChain 还支持通过字符串或OpenAI 格式的聊天模型输入。以下内容是等效的。

在这里插入图片描述

四. 流式传输

直接调用model.invoke,会等模型输出全部结束以后一次性返回。可能会等待比较长时间。

大模型的工作模式其实是流式的,所以它们公开了一个标准接口,其中包括异步和流式调用模式。这允许我们从聊天模型流式传输单个 token。调用代码如下:
在这里插入图片描述

flush要设置为True, 不然不会马上输出,看到的效果还是等到全部结果才输出。

五. 提示词模板

上面的示例,我们直接将消息列表传递给语言模型。通常,消息列表是从用户输入和应用程序逻辑的组合中构建的。此应用程序逻辑通常接收原始用户输入并将其转换为准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。

提示词模板是 LangChain 中旨在帮助进行此转换的概念。它们接收原始用户输入并返回准备传递到语言模型的数据(提示词)。

下面,让我们创建一个提示词模板,它接收两个用户变量

    • language:要将文本翻译成的语言
    • text:要翻译的文本

在这里插入图片描述
在这里插入图片描述

执行结果如下:

img

我们可以看到,prompt_template.invoke返回一个由两条消息组成的 ChatPromptValue

如果我们想直接访问这些消息,还可以这样做:

prompt.to_messages()

六. 结论

本文,我们学习了如何创建您的第一个简单的 LLM 应用程序。您学习了如何使用语言模型、如何创建提示模板。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

<think>好的,我现在需要帮助用户了解如何在LangChain中实现代理的流式输出。首先,我要回想一下LangChain的基本结构,特别是AgentAgentExecutor的运作机制。根据之前学过的知识,Agent通过结合语言模型和工具来执行任务,而AgentExecutor负责驱动整个流程。 用户提到流式输出,也就是希望看到逐步的输出结果,而不是等待所有处理完成后一次性返回。这通常涉及将中间步骤的结果实时反馈给用户。我需要考虑如何截获Agent执行过程中的各个步骤,比如工具的选择、输入的处理、模型的响应等,并将这些信息逐步输出。 接下来,查阅相关文档,比如《LangChain Agent 原理解析》中提到,AgentExecutor通过循环处理模型输出,直到生成最终结果。这提示我可以通过回调函数或自定义执行流程来捕获中间步骤。可能需要在调用AgentExecutor时传入一个回调处理器,或者在自定义的循环中逐步执行并输出结果。 然后,我需要一个示例代码。根据《LangChain AgentExecutor究竟是怎样驱动模型和工具完成任务的》,标准的Agent执行是同步的,但可以通过异步或生成器的方式实现流式输出。可能需要覆盖部分方法,或者在每一步执行后手动触发输出。 另外,参考《LangChain文档》中的流式输出示例,通常是通过将模型的stream参数设为True,但Agent涉及到工具调用,所以需要更细致的处理。例如,在每次模型生成token时捕获,或者在每次工具调用前后发送信息。 现在需要将这些思路整合成一个教程。首先,导入必要的模块,如Agent、工具、回调处理器。然后,设置模型,这里可能使用OpenAI模型,并启用流式。接着,定义工具,比如搜索工具或计算工具。之后,创建代理,并自定义执行流程,使用生成器函数逐步产生输出。在每一步处理中,比如选择工具、执行工具、获取结果时,将相关信息通过yield返回,实现流式传输。 可能遇到的问题包括:如何正确处理异步操作,如何确保回调函数在正确的时间被触发,以及如何处理可能出现的错误或中断。需要测试代码,确保每个步骤的输出都能实时显示,并且代理能正确完成整个流程。 最后,总结实现的关键点:使用回调或生成器函数截获中间步骤,自定义执行循环,以及正确设置模型的流式参数。同时,提醒用户注意代理的复杂性和可能的优化方向,比如错误处理和性能调整。</think>### LangChain代理流式输出实现教程 在LangChain中实现代理的流式输出,需要通过回调机制截获中间执行过程。以下是基于ReAct框架的实现方法: ```python from langchain.agents import AgentExecutor, initialize_agent from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler from langchain.llms import OpenAI from langchain.tools import Tool class StreamAgentExecutor(AgentExecutor): def stream_execute(self, input_str): intermediate_steps = [] result = "" for step in self.iter(input_str): if isinstance(step, dict): # 工具调用步骤 yield f"调用工具: {step['tool']}\n输入: {step['input']}" intermediate_steps.append((step['action'], step['observation'])) else: # 最终结果 result = step yield f"最终答案: {result}" # 初始化组件 llm = OpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()], temperature=0) tools = [ Tool( name="Search", func=lambda q: "搜索结果: " + q, # 替换为实际搜索工具 description="用于问题搜索" ) ] # 创建代理 agent = initialize_agent( tools, llm, agent="react-docstore", verbose=True ) # 转换为流式执行器 stream_agent = StreamAgentExecutor.from_agent_and_tools( agent=agent.agent, tools=tools, llm=llm ) # 使用示例 for chunk in stream_agent.stream_execute("北京的人口数量?"): print(chunk) print("---") # 模拟流式输出分隔 ``` 关键实现点: 1. 继承`AgentExecutor`并重执行流程,通过生成器逐步输出 2. 在工具调用阶段捕获动作和输入参数[^1] 3. 使用流式LLM配置(`streaming=True`)保证模型输出实时性[^2] 4. 通过`yield`机制实现分块输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值