一、快速上手
1、安装OpenAI包
pip install -U langchain-openai
2、定义大模型,由于我们使用的是openAI可以兼容deepseek,我们用deepseek即可
key = os.environ.get('DEEPSEEK_API_KEY') model = ChatOpenAI( model='deepseek-v4-flash', base_url='https://api.deepseek.com', api_key=key )
3、定义消息列表
message = [ HumanMessage(content='apple'), SystemMessage(content='帮我翻译单词'), ]
4、调用大模型
result = model.invoke(message) print(result)
输出结果(调试可以看⻅ result 类型为 AIMessage)
content='苹果'
additional_kwargs={'refusal': None}
response_metadata={'token_usage': {'completion_tokens': 46, 'prompt_tokens': 8, 'total_tokens': 54, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 44, 'rejected_prediction_tokens': None}, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 8}, 'model_provider': 'openai', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_058df29938_prod0820_fp8_kvcache_20260402', 'id': 'cfcfbb3a-25e7-475e-92e7-505c07ce9dac', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019dfd36-15e5-7b22-bbc4-3d5cdfbe47c2-0' tool_calls=[] invalid_tool_calls=[]
usage_metadata={'input_tokens': 8, 'output_tokens': 46, 'total_tokens': 54, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 44}}
输出说明:
- AIMessage :来自AI 的消息。从聊天模型返回,作为对提示(输⼊)的响应。
- content :消息的内容。
- additional_kwargs :与消息关联的其他有效负载数据。对于来⾃ AI 的消息,可能包括模 型提供程序编码的⼯具调⽤。
- response_metadata :响应元数据。例如:响应标头、logprobs、令牌计数、模型名称。 侧重于 "响应"本⾝的信息,⽐如这次请求的 ID、使⽤的模型版本、以及服务提供商返回 的所有原始元数据。它主要⽤于调试、⽇志记录和获取请求的上下⽂信息。
- usage_metadata :消息的使⽤元数据,例如令牌计数。 侧重于 "资源消耗"的量化信息,即这次请求消耗了多少 Token。它主要⽤于成本计算、监控和预算控制
5、输出解析
若只想输出聊天模型返回的结果字符串,可以使⽤ StrOutputParser 输出解析器组件,将⼤模型输出结果解析为最可能的字符串。核心代码
parse = StrOutputParser() content = parse.invoke(result) print(content)
运行结果:
苹果
6、链式执行
我们进行完上述操作,并没有发现链式调用的过程,对于 LangChain,它给我们提供了链式执⾏的能⼒,即我们只需要定义各个"组件",将它们"链起来",⼀次性执行即可得到最终效果。
#定义大模型 key = os.environ.get('DEEPSEEK_API_KEY') model = ChatOpenAI( model='deepseek-v4-flash', base_url='https://api.deepseek.com', api_key=key ) #定义消息 message = [ HumanMessage(content='apple'), SystemMessage(content='帮我翻译单词'), ] #定义解析工具 parse = StrOutputParser() #定义链 chain = model | parse #执行链 print(chain.invoke(message))
运行结果:

二、LangChain相关概念
1、Runnable 接口
Runnable 接口是使用LangChain Components(组件)的基础。
概念说明:
Components(组件):⽤来帮助当我们在构建应⽤程序时,提供了⼀系列的核⼼构建块,例如语⾔模型、输出解析器、检索器、编译的 LangGraph 图等。
Runnable 定义了⼀个标准接⼝,允许 Runnable 组件:
- Invoked(调用): 单个输入转换为输出。
- Batched(批处理): 多个输入被有效地转换为输出。
- Streamed(流式传输): 输出在生成时进行流式传输。
- Inspected(检查): 可以访问有关 Runnable 的输入、输出和配置的原理图信
- Composed(组合): 可以组合多个 Runnable,可以使用LCEL 协同工作以创建复杂的管道。
在快速上手中,我们定义的语言模型(model)、输出解析器(StrOutputParser)都是Runnable 接口的实例!他们都使⽤了 Invoked(调用)的能力
2、LangChain Expression Language
LangChain Expression Language(LCEL):采用声明性方法,从现有 Runnable 对象构建新的 Runnable 对象。
通过 LCEL 构建出的新的 Runnable 对象,被称为 RunnableSequence ,表示可运行序列
RunnableSequence 就是⼀种 链 (参考步骤6)。通过调试 步骤6 就能发现,chain 的类型就是 RunnableSequence 。如下所示:

重要的是, RunnableSequence 也是 Runnable 接口的实例 ,它实现了完整的 Runnable 接口, 因此它可以⽤与任何其他 Runnable 相同的姿势使用。
三、聊天模型核心能力
1、定义聊天模型
大语言模型 (LLM) 在各种与语言相关的任务中表现出色。现代 LLM 通常通过聊天模型接口访问,该接口将消息列表作为输入,并返回消息作为输出,二不是使用纯文本。
这⾥需要注意 LLM 与 LangChain 中 聊天模型 的关系:
- 在 LangChain 的官方文档中,认为 LLM 大多数是纯文本补全模型。这些纯文本模型封装的 API 接受⼀个字符串提示作为输入,并输出⼀个字符串补全结果,OpenAI 的 GPT-5 就是作为 LLM 来实现的。
- LangChain 中的聊天模型通常由 LLM 提供⽀持,但经过专门调整以用于对话。关键在于,它们不是接受单个字符串作为输入,二是接受聊天消息列表,并返回⼀条 AI 消息作为输出。
1.1、通过 API 定义聊天模型
1.1.1、方式1:ChatOpenAI
|--------------------------|----------------------------------------------|
| 参数名称 | 参数描述 |
| model | 要使⽤的 OpenAI 模型的名称 |
| temperature | 采样温度,温度值越高,AI 回答越离谱;温度越低,回答越保守靠谱。 |
| max_tokens | 要⽣成的最⼤令牌数 |
| timeout | 请求超时时间 |
| max_retries | 最⼤重试次数 |
| openai_api_key / api_key | OpenAI API 密钥。如果未传⼊,将从环境变量中读取 OPENAI_API_KEY |
| base_url | API 请求的基本 URL |
| 。。。。 | |
model = ChatOpenAI( model='deepseek-v4-flash', base_url='https://api.deepseek.com', api_key=os.environ.get('DEEPSEEK_API_KEY') )
1.1.2、invoke() 调用
方法定义
abstractmethod invoke(
input: Input,
config: RunnableConfig | None = None,
**kwargs: Any,
) → Output
请求参数:
input :输⼊⼀个 Runnable 实例
config (默认空):⽤于 Runnable 的配置。
返回值: 返回⼀个 Runnable 实例
|--------------|---------------------------------------------------------------|
| 参数名 | 参数描述 |
| configurable | 通过 .configurable_fields()在此 Runnable 或⼦ Runnable 上配置的属性的运⾏时值。 |
| run_id | 针对此调⽤运⾏的跟踪器的唯⼀标识符。如果未提供,将⽣成新的 UUID。 |
| run_name | 此调⽤的跟踪器运⾏的名称。默认为类的名称。 |
| metadata | 此次调用和任何子调用的元数据。键是字符串,值是 JSON。 类型:dict[str, Any] |
调用
print(model.invoke("你是谁"))
调用结果:

1.1.3 ⽅式2:init_chat_model
上⾯的 ChatOpenAI ⽤于明确创建 OpenAI 聊天模型的实例。⽽而init_chat_model() 是⼀个工厂函数,它可以初始化多种⽀持的聊天模型,不仅仅是OpenAI 的聊天模型
init_chat_model() 函数定义
langchain.chat_models.base.init_chat_model(
model: str,
*,
model_provider: str | None = None,
configurable_fields: Literal[None] = None,
config_prefix: str | None = None,
**kwargs: Any,
) → BaseChatModel
init_chat_model() 常⽤参数说明
|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数名 | 参数描述 |
| model | 要使⽤的模型的名称 |
| model_provider | 模型提供⽅。⽀持的 model_provider 值和相应的集成包有: * openai -> langchain-openai * anthropic -> langchain-anthropic * google_genai -> langchain-google-genai * ollama -> langchain-ollama * deepseek -> langchain-deepseek 如果未指定,将尝试从模型推断 model_provider。 |
| configurable_fields | 设置哪些模型参数是可配置的。若配置为: * None: 没有可配置的字段。 * 'any' :所有字段都是可配置的,类似api_key 、 base_url 等可以在运⾏时更改。 * Union[List[str], Tuple[str, ...]]:指定的字段是可配置的。 |
| config_prefix | * 配置为非空字符串,则模型将在运行时通过查找 config["configurable"]["{config_prefix}_{param}"] 字段设置配置项 。 * 配置为空字符串,那么模型将可以通过 config["configurable"] [" {param}"] 字段设置配置项 。 |
| temperature | 采样温度,温度值越高,AI 回答越离谱;温度越低,回答越保守靠谱 |
| max_tokens | 要生成的最大令牌数 |
| timeout | 请求超时时间 |
| 。。。 | |
init_chat_model() 返回值说明:
函数返回⼀个与指定的 model_name 和 model_provider 相对应的 BaseChatModel (如ChatOpenAI , ChatAnthropic 等)。注意要是模型可配置,则返回⼀个聊天模型模拟器,该模拟器在传入配置后,于运行时才会初始化底层模型
1、基本用法
deeoseek_model = init_chat_model(model='deepseek-v4-flash', model_provider='deepseek', base_url="https://api.deepseek.com" ) print(deeoseek_model.invoke("你是谁"))
运行结果:

2、创建可配置的模型
deepseek_model = init_chat_model(temperature=0) result = deepseek_model.invoke( input="你是谁", config={ "configurable":{ "model":"deepseek-chat", } } ).content print(result)
调用结果:

3、创建具有默认值的可配置模型
deepseek_model = init_chat_model( model="deepseek-v4-flash", model_provider="deepseek", base_url="https://api.deepseek.com", max_tokens=1024, configurable_fields=("model",), config_prefix="first", ) result = deepseek_model.invoke( input="你是谁", ) print(result) 改后 result = deepseek_model.invoke( input="你是谁", config={ "configurable":{ "first_model":"deepseek-v4-pro" } } )
改前

改后

1.2 通过本地部署的 LLM 定义聊天模型
首先在自己的电脑上需要有一个本地模型

调用代码
from langchain_ollama import ChatOllama model = ChatOllama(model="deepseek-r1:1.5b",base_url="http://localhost:11434") print(model.invoke("你是谁"))
调用结果
