一、快速上手

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("你是谁"))

调用结果

Logo

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

更多推荐