LangChain能力详解 - 1
申请配置
申请 API key 并配置环境变量
- 申请 API key
以 OpenAI 为例,官⽹地址:https://platform.openai.com/(魔法上⽹)
如果没有账号先注册账号,登录成功后,出现 settings 图标,点击 settings,选择 API keys 配置⻚⾯:
点击 “Create new secret key” 按钮,新增 API key:

将 API Key 在⾃⼰本地保存好,后续接⼊ ChatGPT 时需要使⽤。
配置环境变量
将 API Key 配置在环境变量中主要是为了保证其隐私性。由于 api key ⽐较隐私,为避免在程序中暴露,可提前将各个 api key 配置在环境变量中,这样在程序中就可以通过获取对应环境变量拿到 apikey,保证了 api key 的隐私。
定义⼤模型
步骤一:安装 OpenAI 包
pip install -U langchain-openai
步骤二:定义⼤模型
# 定义⼤模型
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-5-mini")
步骤3:定义消息列表
# 定义消息列表
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="Translate the following from English into Chinese"),
HumanMessage(content="hi!"),
]
参数说明:
- SystemMessage :表⽰ 系统⻆⾊ 消息,系统消息通常作为输⼊消息序列中的第⼀条传⼊,是⽤来启动 AI ⾏为的消息。
- HumanMessage :表⽰ ⽤⼾⻆⾊ 消息,是来⾃⽤⼾的、从⽤⼾传递到模型的消息。
步骤4:调⽤⼤模型
model 是 LangChain Runnable (可运⾏)接⼝的实例,这意味着 model 提供了⼀个标准接⼝供我们与之交互。要简单地调⽤模型,我们可以将 消息列表 传递给 .invoke ⽅法。
使⽤ .invoke ⽅法进⾏⼤模型调⽤,核⼼代码:
result = model.invoke(messages)
print(result)
输出结果(调试可以看⻅ result 类型为 AIMessage):
content='你好!' additional_kwargs={'refusal': None} response_metadata=
{'token_usage': {'completion_tokens': 2, 'prompt_tokens': 20, 'total_tokens':
22, 'completion_tokens_details': {'accepted_prediction_tokens': 0,
'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0},
'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}},
'model_name': 'gpt-5-mini-2024-07-18', 'system_fingerprint': 'fp_560af6e559',
'id': 'chatcmpl-C5l29mi6KkQSFO3qaElDJD5Lj9nBn', 'service_tier': 'default',
'finish_reason': 'stop', 'logprobs': None} id='run--777ef0be-55c2-411a-a4ab-
104a45c22f20-0' usage_metadata={'input_tokens': 20, 'output_tokens': 2,
'total_tokens': 22, 'input_token_details': {'audio': 0, 'cache_read': 0},
'output_token_details': {'audio': 0, 'reasoning': 0}}
输出说明:
- AIMessage :来⾃ AI 的消息。从聊天模型返回,作为对提⽰(输⼊)的响应。
◦ content :消息的内容。
◦ additional_kwargs :与消息关联的其他有效负载数据。对于来⾃ AI 的消息,可能包括模型提供程序编码的⼯具调⽤。
◦ response_metadata :响应元数据。例如:响应标头、logprobs、令牌计数、模型名称侧重于 “响应”本⾝的信息,⽐如这次请求的 ID、使⽤的模型版本、以及服务提供商返回
的所有原始元数据。它主要⽤于调试、⽇志记录和获取请求的上下⽂信息。
◦ usage_metadata :消息的使⽤元数据,例如令牌计数。侧重于 “资源消耗”的量化信息,即这次请求消耗了多少 Token。它主要⽤于成本计算、监控和预算控制。
步骤5:输出解析
若只想输出聊天模型返回的结果字符串,可以使⽤ StrOutputParser 输出解析器组件,将⼤模型输出结果解析为最可能的字符串。
# 定义str字符串输出解析器
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
print(parser.invoke(result))
输出结果:
你好!
步骤6:链式执⾏
通过上述步骤,⽆论是调⽤⼤模型,还是输出解析,我们发现,每次都调⽤了⼀个 invoke() ⽅法,最终才会得到我们想要的结果。
对于 LangChain,它给我们提供了链式执⾏的能⼒,即我们只需要定义各个“组件”,将它们“链起来”,⼀次性执⾏即可得到最终效果。

# 定义⼤模型
model = ChatOpenAI(model="gpt-5-mini")
# 定义消息列表
messages = [
SystemMessage(content="Translate the following from English into Chinese"),
HumanMessage(content="hi!"),
]
# 定义输出解析器
parser = StrOutputParser()
# 定义链
chain = model | parser
# 执⾏链
result = chain.invoke(messages)
print(result)
输出结果:
你好
快速上⼿完整代码参考:
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# 定义⼤模型
model = ChatOpenAI(model="gpt-5-mini")
# 定义消息列表
messages = [
SystemMessage(content="Translate the following from English into
Chinese"),
HumanMessage(content="hi!"),
]
# 定义输出解析器
parser = StrOutputParser()
# 定义链
chain = model | parser
# 执⾏链
result = chain.invoke(messages)
print(result)
LangChain 相关概念
Runnable 接⼝
Runnable 接⼝是使⽤ LangChain Components(组件)的基础。
概念说明:
Components(组件):⽤来帮助当我们在构建应⽤程序时,提供了⼀系列的核⼼构建块,例如语⾔模型、输出解析器、检索器、编译的 LangGraph 图等。
Runnable 定义了⼀个标准接⼝,允许 Runnable 组件:
• Invoked(调⽤): 单个输⼊转换为输出。
• Batched(批处理): 多个输⼊被有效地转换为输出。
• Streamed(流式传输): 输出在⽣成时进⾏流式传输。
• Inspected(检查): 可以访问有关 Runnable 的输⼊、输出和配置的原理图信息。
• spected(检查): 可以访问有关 u able 的输⼊、输出和配置的原理图信息。
• Composed(组合): 可以组合多个 Runnable,以使⽤ LCEL 协同⼯作以创建复杂的管道。
因此,在快速上⼿中,我们定义的语⾔模型(model)、输出解析器(StrOutputParser)都是Runnable 接⼝的实例!他们都使⽤了 Invoked(调⽤)的能⼒,回顾⼀下:
# 语⾔模型(model)
model = ChatOpenAI(model="gpt-5-mini")
result = model.invoke(messages) # 语⾔模型是 Runnable 接⼝实例,允许invoke调⽤
# 输出解析器(StrOutputParser)
parser = StrOutputParser()
parser.invoke(result) # 输出解析器是 Runnable 接⼝实例,允许invoke调⽤
LangChain Expression Language
LangChain Expression Language(LCEL):采⽤声明性⽅法,从现有 Runnable 对象构建新的Runnable 对象。
通过 LCEL 构建出的新的 Runnable 对象,被称为 RunnableSequence ,表⽰可运⾏序列。RunnableSequence 就是⼀种 链 。通过调试 就能发现,chain 的类型就是RunnableSequence 。如下所⽰:
重要的是, RunnableSequence 也是 Runnable 接⼝的实例 ,它实现了完整的 Runnable 接⼝,因此它可以⽤与任何其他 Runnable 相同的姿势使⽤。
chain = model | parser
chain.invoke(messages) # 链是 Runnable 接⼝实例,允许invoke调⽤
可以看到,LCEL 其实是⼀种编排解决⽅案,它使 LangChain 能够以优化的⽅式处理链的运⾏时执⾏。任何两个 Runnable 实例都可以“链”在⼀起成序列。上⼀个可运⾏对象的 .invoke() 调⽤的输出作为输⼊传递给下⼀个可运⾏对象。⽅法就是使⽤ | (管道/运算符):
chain = model | parser
它通过两个 Runnable 对象去创建⼀个 RunnableSequence 。实际上 LangChain 重载了 | 运算符,使⽤ | 运算符就相当于:
from langchain_core.runnables import RunnableSequence
chain = RunnableSequence(first=model, last=parser)
除此之外,可以使⽤ .pipe ⽅法代替。这也相当于 | 运算符:
chain = model.pipe(parser)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)