langchain如何调用模型?一文详解
👋 各位CSDN的开发者朋友们,大家好!
欢迎来到我的技术专栏!如果你正在关注人工智能的最新浪潮,或者正摩拳擦掌准备亲手打造一个属于自己的AI应用,那么恭喜你,来对地方了。在接下来的系列文章中,我将带大家深入探索一个在AI应用开发领域如日中天的开源框架——LangChain,一起解锁大语言模型(LLM)的真正潜力。
🤖 为什么我们需要关注 LangChain?
在这个大模型技术飞速发展的时代,ChatGPT、文心一言等模型已经展现出了惊人的文本生成和理解能力。但很多开发者在实际落地时往往会发现一个痛点:单纯依赖大模型本身,很难构建出功能强大且实用的生产级应用。
大模型的知识往往存在“时间截止”的限制,它不知道今天的实时天气,无法直接访问你本地的私有数据库,也不能替你发送邮件或调用外部API。如果我们只是简单地调用API,不仅提示词难以复用和维护,多步骤的复杂业务流程更是无从下手。
这时候,LangChain 就应运而生了。它被誉为AI应用开发的“瑞士军刀”,核心目标就是解决大模型与真实世界连接的核心痛点。它提供了一套标准化的模块和接口,让我们不必从零开始“造轮子”,就能轻松把大模型与外部数据、计算逻辑以及各种工具连接起来。
🧱 LangChain 能帮我们做什么?
你可以把 LangChain 想象成一套数字世界的“乐高积木”。它通过高度模块化的设计,将复杂的AI开发过程拆解成了一个个可以灵活拼搭的组件:
模型抽象(Models):它统一了各种大模型的调用接口。无论你使用的是OpenAI、DeepSeek,还是本地的开源模型,都可以像换插件一样轻松切换,无需修改业务代码。
提示工程(Prompts):提供了强大的提示词模板管理,让动态构建和优化提示词变得极其简单,大幅提升模型的输出质量。
链式调用(Chains):这是它的名字由来,也是其核心特色。我们可以将多个LLM调用或组件串联成一个连贯的处理流程,轻松实现复杂的自动化任务。
智能代理(Agents):这是目前最激动人心的能力。通过Agents,我们可以让LLM作为决策中枢,自主判断何时调用什么工具(比如搜索引擎、计算器、自定义API),从而突破模型的知识边界。
数据连接与记忆(Data Connection & Memory):它是实现RAG(检索增强生成)的基石,能让AI读取你的私有文档;同时还能在多轮对话中持久化状态,让AI真正“记住”之前说过的内容。
🚀 开启你的 Agent 开发之旅LangChain 的出现,标志着AI应用开发进入了一个全新的范式。无论你是希望将AI能力集成到现有产品的软件工程师,还是寻求技术转型的程序员,亦或是想了解技术底层逻辑的产品经理,掌握 LangChain 都将成为你极具竞争力的技能。
在接下来的专栏中,我将拒绝枯燥的理论堆砌,坚持“真实项目驱动学习”。我们会从环境搭建开始,一步步亲手写出能调用工具的Agent,构建具备实时查询能力的智能助手,甚至探索多智能体协作等前沿话题。
让我们一起打破信息差,从入门到实战,用代码将天马行空的AI创意变为触手可及的现实!如果你准备好了,就请点个关注,我们马上发车!🚀
目录
一.直接调用模型
前置文章(初始化模型)
1.invoke(阻塞调用)
2.stream(流式调用)
二.在Agent中使用模型
1.创建智能体
2.调用智能体
①阻塞调用
②流式调用
注意
一.直接调用模型
前置文章(初始化模型)
langchain如何初始化模型?一文详解-CSDN博客
1.invoke(阻塞调用)
# 阻塞调用(invoke) response = model.invoke("什么是奥德赛时期?") print(response)查看运行结果
2.stream(流式调用)
# 阻塞调用(stream) stream = model.stream("你有什么建议给当下的年轻人吗?") # stream调用返回的结果是一个generator,方便我们循环获取结果 print(type(stream)) # 遍历stream结果,就是打印机的效果(一个字一个字地往外蹦) for chunk in stream: print(chunk.content, end="", flush=True)查看运行效果
二.在Agent中使用模型
1.创建智能体
from langchain.agents import create_agent from dotenv import load_dotenv # 1. 加载项目根目录下的 .env 文件,这样就可以让Langchain自动获取.env文件中的apikey了 load_dotenv() # 2.指定Model名称,由LangChain自动初始化模型 agent = create_agent(model="deepseek-chat")2.调用智能体
①阻塞调用
# 阻塞调用模型,需要传入一个消息列表 response = agent.invoke({ "messages": [{"role": "user", "content": "火烧是方的还是圆的?"}] }) print(response)查看运行结果
②流式调用
for token, metadata in agent.stream( {"messages": [{"role": "user", "content": "常说的LA是哪国的哪个城市?"}]}, stream_mode="messages" ): if token.content: # Check if there's actual content print(token.content, end="", flush=True) # Print token查看运行结果
注意
要注意,Agent的stream模式同样返回一个generator,但是其结构由
stream_mode参数决定:
messages: 返回LLM生成的每一个片段,是一个包含token和metadata的元组(Tuple)
updates: 返回Agent运行过程中的每一次事件,例如与LLM的对话、工具的调用等
custom: 返回通过stream writer记录的每一次自定义的输出
如果是为了流式输出AI返回的结果,使用messages模式即可。
