LangChain的核心组件之Models使用手册
目录
目标
版本
官方文档
概述
实战
LangChain调用OpenAI平台提供的在线LLM
LangChain调用本地Ollama LLM
以字符串作为输入
以消息列表作为输入
流式输出
批量处理
目标
- 了解LangChain的基本信息,并且理解Retrieval Augmented Generation(RAG)的核心思想。
- 使用Python语言集成LangChain,并通过案例来学习它的核心组件Models。本文虽然讲的是Models模块,但是并不涉及Agent对Models的集成使用(在后续的文章中再重点讲述),只将独立使用案例。
版本
官方文档
LangChain Docs
https://docs.langchain.com/oss/python/langchain/installOllama
https://ollama.com/
OpenAI平台
https://platform.openai.com/api-keys
概述
RAG是什么?
RAG由Retrieval(检索)、Augmented(增强)、Generation(生成)这三个单词的首字母组合而成。它是一个可以动态访问外部知识、并将用户的prompt与之结合增强生成新的prompt,然后将prompt输入LLM生成最终回答的设计思想。它的本质逻辑往往抽象为四个方面:
- 数据准备(把数据向量化)
- 检索(根据用户问题从向量库中找到最相关的内容)
- 增强(将检索到的内容与用户问题融合形成新的 prompt)
- 生成(把增强后的prompt输入LLM生成最终回答)
特别注意:RAG是一种设计思想或系统架构,而不是具体的框架或组件。不同的框架对RAG的实现侧重可能不一样(比如:LlamaIndex侧重RAG的数据结构化实现,LangChain侧重RAG的模块化流程。),所以单纯地问RAG是什么问的可能是RAG的概念,而问某个具体框架中的RAG是什么问的是该框架对于RAG的实现与侧重方向。
LangChain是什么?
在LangChain v1.0的官方文档中是这样描述的:
LangChain is the easiest way to start building agents and applications powered by LLMs. With under 10 lines of code, you can connect to OpenAI, Anthropic, Google, and more. LangChain provides a pre-built agent architecture and model integrations to help you get started quickly and seamlessly incorporate LLMs into your agents and applications.
意思是:LangChain是一个方便整合智能体、集成各个模块的框架。类比来看:LangChain之于各大语言模型,正如JDBC之于各大数据库。
LangChain的核心组件有哪些?
分别是:Agents、Models、Messages、Tools、Short-term memory、Streaming、Middleware、Structured output。
Models是什么?
Models不是指某个具体的模型(比如:GPT-4、文心一言、通义千问、本地Ollama等),而是指一个组件层(这一点在官网的API目录中也能看出来)。它的作用是为这些不同厂商或本地模型提供统一的使用接口和功能封装。

Models的使用方式有几种?
两种,附上官网的两段描述及总结如下:
Models are the reasoning engine of agents. They drive the agent’s decision-making process, determining which tools to call, how to interpret results, and when to provide a final answer.
Basic usage
Models can be utilized in two ways:
- With agents - Models can be dynamically specified when creating an agent.
- Standalone - Models can be called directly (outside of the agent loop) for tasks like text generation, classification, or extraction without the need for an agent framework.
The same model interface works in both contexts, which gives you the flexibility to start simple and scale up to more complex agent-based workflows as needed.
| 使用方式 | 概念 | 特点 | 使用场景 |
| 与Agent结合使用 | Models是Agent的推理引擎。Models驱动Agent的决策过程,决定调用哪些工具、如何解释结果以及何时给出最终答案。 | 复杂、动态、可扩展 | 工具调用、多步骤推理 |
| 独立使用 | Models独立运行,直接输入输出。 | 简单、直接、轻量 | 生成、分类、提取等任务 |
LangChain对语言模型的分类
两种,附上官网的描述及总结如下:
Language models.
LangChain has two main classes to work with language models: chat models and "old-fashioned" LLMs.
Chat models
Language models that use a sequence of messages as inputs and return chat messages as outputs (as opposed to using plain text).
Chat models support the assignment of distinct roles to conversation messages, helping to distinguish messages from the AI, users, and instructions such as system messages.
The key abstraction for chat models is
BaseChatModel. Implementations should inherit from this class.See existing chat model integrations.
LLMs
Language models that takes a string as input and returns a string. These are traditionally older models (newer models generally are chat models).
Although the underlying models are string in, string out, the LangChain wrappers also allow these models to take messages as input. This gives them the same interface as chat models. When messages are passed in as input, they will be formatted into a string under the hood before being passed to the underlying model.
总结起来,LangChain对语言模型的理解如下:
| 分类 | Chat models(对话模型) | LLMs(传统模型、也叫非对话模型) |
| 定义 | 返回消息作为输出的语言模型。 | 以字符串作为输入并返回字符串的语言模型。 |
| 输入 | 可以是字符串,也可以是消息列表 | 字符串 |
| 输出 | 消息,通常是langchain_core.messages.ai.AIMessage | 字符串 |
| 使用场景 | 对话、问答、聊天机器人 | 文本生成、摘要、翻译、提问回答、代码生成等。 |
| 备注 | 官方的描述中加了“输入的是消息”作为定义条件之一,实际上是不准确的。 | LangChain封装器也允许这些模型接受消息作为输入。这使得它们拥有与聊天模型相同的接口。 |
实战
LangChain调用OpenAI平台提供的在线LLM
第一步:去OpenAI平台申请秘钥。

第二步:把申请号的秘钥配置到环境变量中,推荐大家使用配置文件的方式(把秘钥配置在.env中)。
OPENAI_API_KEY=密钥
OPENAI_BASE_URL=https://api.openai.com/v1
第三步:使用LangChain集成在线的OpenAI LLM。
import dotenv
from langchain_openai import ChatOpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")#调用大模型
response = llm.invoke("说一下荒野求生中必备的技能")
print(type(response))
print(response)
LangChain调用本地Ollama LLM
第一步:在.env中配置好模型名称。
OLLAMA_MODEL="qwen3-vl:2b"
第二步:使用LangChain集成本地Ollama LLM。
import os
from dotenv import load_dotenv
from langchain_community.llms import Ollama# 加载本地配置
load_dotenv()
model_name = os.getenv("OLLAMA_MODEL")# 创建 Ollama LLM 实例
llm = Ollama(model=model_name,
)# 调用 LLM
prompt = "说一下荒野求生中必备的技能"
response = llm.invoke(prompt)# 输出结果
print(response)

以字符串作为输入
对话模型
import dotenv
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")#调用大模型
response = llm.invoke("说一下荒野求生中必备的技能")
print(type(response))
print(response)
非对话模型
import dotenv
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = OpenAI(model="gpt-4o-mini")#调用大模型
response = llm.invoke("说一下荒野求生中必备的技能")
print(type(response))
print(response)
以消息列表作为输入
这里只以常见的三种消息类型(AIMessage、HumanMessage、SystemMessage)作为输入。
import dotenv
from langchain_core.messages import AIMessage, SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")#创建大模型实例
# Create an AI message manually (e.g., for conversation history)
ai_msg = AIMessage("你是一名荒野求生专家。")# Add to conversation history
messages = [SystemMessage("我很乐意教你一些野外求生的知识。"),HumanMessage("你能教我野外求生的知识吗?"),ai_msg,HumanMessage("怎么生火?")
]#调用大模型
response = llm.invoke(messages)
print(type(response))
print(response)
流式输出
大语言模型生成文本时,不是一次性返回整段文本,逐字(或逐句)输出。官方文档这里有详细的解释和案例:
https://docs.langchain.com/oss/python/langchain/models#stream
http://Stream
import dotenv
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例,开启流式输出。
llm = ChatOpenAI(model="gpt-4o-mini",streaming=True)message=[HumanMessage(content="请告诉我荒野求生的各种技能。")]#调用大模型
for chunk in llm.stream(message):print(chunk.content,end="",flush=True)
批量处理
把一组彼此独立的请求一起发送给模型,可以显著提升性能、降低成本,因为它们会被并行处理。摘自官方文档:
Batching a collection of independent requests to a model can significantly improve performance and reduce costs, as the processing can be done in parallel.
案例一
import dotenv
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")responses = llm.batch(["1+1=?","2+2=?","3+3=?"
])
for response in responses:print(response.content)
案例二
import dotenv
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")message1=[SystemMessage(content="你是数学家。"),HumanMessage(content="告诉我1+1等于几。")]
message2=[SystemMessage(content="你是荒野求生专家。"),HumanMessage(content="告诉我钻木取火的步骤。")]
message3=[SystemMessage(content="你是英语老师。"),HumanMessage(content="告诉我AI是什么意思。")]message=[message1,message2,message3]
responses=llm.batch(message)for response in responses:print(response.content)