目标如下:
1.通过LangChain接入LLM
2.通过代码理解,如何定义链式结构
3.链式结构的底层逻辑
一:快速上手编码
调用LLM的流程:
接入并定义大模型->定义消息->调用大模型->输出结果
举个例子:
python
import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
# 1. 初始化模型(和你之前格式一模一样,只是换了提示场景)
model = ChatOpenAI(
model="deepseek-v4-pro",
base_url="https://api.deepseek.com/v1",
api_key=os.getenv("DEEPSEEK_API_KEY"),
)
# 2. 定义消息:系统提示 + 用户消息
messages = [
SystemMessage(content="你是一位耐心的学习助手,每次回答前都要先说'同学你好',然后再解答问题。"),
HumanMessage(content="Python 是什么?用一句话解释。"),
]
# 3. 调用模型
result = model.invoke(messages)
# 4. 输出结果
print(result.content)
这段代码是基于 LangChain 框架调用 DeepSeek 大模型的基础示例,首先实现了库的导入与环境配置。代码引入了 os 模块用于读取环境变量,同时从 langchain_openai 导入 ChatOpenAI 模型类,再从 langchain_core.messages 导入会话所需的消息类型,为后续调用大模型做好了工具准备。
其次完成了大模型实例的初始化配置。借助 ChatOpenAI 兼容 OpenAI 接口的特性,通过指定模型名称、DeepSeek 专属接口地址,再从系统环境变量中读取密钥,既成功连接了 DeepSeek 大模型,又遵循了开发安全规范,避免将 API 密钥直接写在代码中,保护接口信息安全。
再者学习了 LangChain 中会话消息的定义规则。代码运用了两种核心消息格式,SystemMessage 作为系统提示消息,用于提前给人工智能设定角色身份和回复规则;HumanMessage 代表用户输入的对话内容,两种消息以列表形式组合,构成完整的对话上下文,能够精准引导模型的回复风格。
最后掌握了大模型的调用与结果输出方式。通过 model.invoke () 方法传入消息列表,即可向大模型发起请求并获取返回结果,直接打印结果能够查看模型完整的返回对象,包含回复文本、角色信息等元数据,也可以提取 content 属性单独获取纯文字回复,这是 LangChain 同步调用大模型最基础且通用的使用方式。
整体而言,这段代码完整演示了第三方兼容接口大模型的调用流程,涵盖环境变量密钥管理、系统提示词设置、结构化消息定义、模型基础调用等核心知识点,是入门 LangChain 对接国产大模型的基础范例。
然后我们可以交给链去执行,这样子就可以注释掉那些了
python
import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
model = ChatOpenAI(
model="deepseek-v4-pro",
base_url="https://api.deepseek.com/v1",
api_key=os.getenv("DEEPSEEK_API_KEY"),
)
#定义消息
#用户消息HumanMessage
#系统提示消息,通常作为第一条消息传入
messages=[
SystemMessage(content="请叫我刘总,然后再回复"),
HumanMessage(content="hi!"),
]
#调用大模型
#result=model.invoke(messages)
#print(result)
#定义输出解析器,这个也是组件
parser=StrOutputParser()
#print(parser.invoke(result))
#定义链
#执行链
chain=model|parser
print(chain.invoke(messages))
二:Runnable和LCEL
Runnable接口是使用Langchain Component(组件)的基础,它提供了一系列的标准接口
接入原生大模型存在一个问题就是,切换大模型困难。
invoke:单次同步调用,输入单个参数,返回最终完整结果。
batch:批量同步调用,一次性传入多组参数,批量返回结果。
stream:流式同步调用,逐段返回输出,适合打字机实时效果。
ainvoke:异步单次调用,不阻塞主线程,适合并发场景。 abatch:异步批量调用,多组任务异步并行执行,效率更高。
astream:异步流式调用,异步 + 逐段输出,对话场景最常用。
LCEL是采用声明性方法,从现有的Runnalbe对象构建新的Runnalbe对象,称为RunnalbeSequence,表示可运行序列。是一个编排解决方案,上一个执行的结果作为下一个的输入。