在这里插入图片描述

📃个人主页:island1314

⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞

  • 生活总是不会一帆风顺,前进的道路也不会永远一马平川,如何面对挫折影响人生走向 – 《人民日报》


一、快速上手

1. 配置 API Key

① 申请 API key

如果没有账号先注册账号,登录成功后,出现settings图标,点击settings,选择 API keys 配置页面:

image-20260304230951658

将APIKey在自己本地保存好,后续接入ChatGPT时需要使用。

② 配置环境变量

将 API Key 配置在环境变量中主要是为了保证其隐私性。由于 api key 比较隐私,为避免在程序中暴露,可提前将各个 api key 配置在环境变量中,这样在程序中就可以通过获取对应环境变量拿到 api key,保证了api key 的隐私。

image-20260307153444819

2. 定义大模型

① 安装 OpenAI 包

pip install -U langchain-openai

image-20260307153610872

② 定义大模型

核心代码如下:

# 定义大模型 
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-5-mini") 

3. 定义消息列表

# 定义消息列表 
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
    SystemMessage(content="请帮我进行翻译,由英文翻译成中文!"),
    HumanMessage(content="my name is xiaoming")
]

参数说明:

  • SystemMessage:表示系统角色消息,系统消息通常作为输入消息序列中的第一条传入,是用来启动AI行为的消息。
  • HumanMessage:表示用户角色消息,是来自用户的、从用户传递到模型的消息。

4. 调用大模型

modelLangChain Runnable(可运行)接口的实例,这意味着model提供了一个标准接口供我们与之交互。要简单地调用模型,我们可以将消息列表传递给 .invoke 方法。

使用 .invoke 方法进行大模型调用,核心代码:

result = model.invoke(messages)
print(result)

输出结果如下:

content='我的名字是小明' 
additional_kwargs={'refusal': None} 
response_metadata={
	'token_usage': {
	'completion_tokens': 4, 
	'prompt_tokens': 21, 
	'total_tokens': 25, 
	'completion_tokens_details': None, 
	'prompt_tokens_details': {
		'audio_tokens': None, 
		'cached_tokens': 0}, 
		'prompt_cache_hit_tokens': 0, 
		'prompt_cache_miss_tokens': 21
    }, 
    'model_provider': 'openai', 
    'model_name': 'deepseek-chat', 
    'system_fingerprint': 'xx', 
    'id': 'xx', 
    'finish_reason': 'stop', 
    'logprobs': None
} 
id='xxx' 
tool_calls=[] 
invalid_tool_calls=[] 
usage_metadata={
	'input_tokens': 21, 
	'output_tokens': 4, 
	'total_tokens': 25, 
	'input_token_details': {
		'cache_read': 0
    }, 
    'output_token_details': {}
}

分析

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,它给我们提供了链式执行的能力,即我们只需要定义各个“组件”,将它们“链起来”,一次性执行即可得到最终效果。

image-20260415221508074

完整示例代码如下:

# 定义⼤模型 
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)

7. LangChain 相关概念

7.1 Runnable 接口

Runnable接口是使用 LangChain Components (组件)的基础。

概念说明:
Components(组件):用来帮助当我们在构建应用程序时,提供了一系列的核心构建块,例如i言模型、输出解析器、检索器、编译的LangGraph图等。

Runnable定义了一个标准接口,允许Runnable组件:

  1. Invoked(调用):单个输入转换为输出。
  2. Batched(批处理):多个输入被有效地转换为输出。
  3. Streamed(流式传输):输出在生成时进行流式传输。
  4. Inspected(检查):可以访问有关Runnable的输入、输出和配置的原理图信息。
  5. 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调⽤
7.2 LangChain Expression Language

LangChain Expression Language (LCEL):采用声明性方法,从现有Runnable 对象构建新的Runnable 对象。

通过LCEL构建出的新的Runnable 对象,被称为RunnableSequence,表示可运行序列。就是一种 链(参考步骤6)。通过调试步骤6就能发现,chain的类型就是RunnableSequence,如下所示:

image-20260415231152719

重要的是,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 方法代替。这也相当于| 运算符: 在Unix/Linux系统中, pipe() 系统调用和| 管道操作符都用于实现进程间通信,这里同样也 是迁移过来的⽤法。

chain = model.pipe(parser)

★,°:.☆( ̄▽ ̄)/$:.°★ 】那么本篇到此就结束啦,如果有不懂 和 发现问题的小伙伴可以在评论区说出来哦,同时我还会继续更新关于【LangChain】的内容,请持续关注我 !!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐