1. 引出LangChain相关概念

1.1. Runnable接口

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

概念说明:

Components(组件):用来帮助当我们在构建应用程序时,提供了一系列的核心构建块,

例如语⾔模型、输出解析器、检索器、编译的 LangGraph 图等。

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

  • Invoked(调用):当个输入转化为输出
  • Batched(批处理):多个输入转化为输出
  • Streamed(流式处理):多个输入被有效的转化为输出
  • Inspected(检查):可以访问有关的Runnable的输入和输出
  • Composed(组合):可以醋和多个Runnable,以使用LCEL协同工作以创建复杂的管道

因此,我们定义的聊天模型,输出解析器都是Runnable接口的实例,他们都使用了Invoked(调用)的能力

1.2. LangChain Expression Language

LangChain Expression LanguageLCEL):采用声明性方法,从现有Runnable 对象构建新的 Runnable 对象。通过LCEL 构建出的新的Runnable 对象,被称为,表示可运行序列。RunnableSequence 就是一种链,chain 的类型就是RunnableSequence。如下所示:

重要的是,RunnableSequence也是Runnable 接口的实例,它实现了完整的Runnable 接口,因此它可以用与任何其他Runnable 相同的姿势使用。

2. 定义聊天模型

2.1. 通过API定义聊天模型

2.1.1. 方式1:ChatOpenAI

class langchain_openai.chat_models.base.ChatOpenAI 是 LangChain为OpenAI 旗下的聊天模型提供的具体实现类,其继承了 class langchain_openai.chat_models.base.BaseChatOpenAI,并且BaseChatOpenAI实现了标准的Runnable接口。

ChatOpenAI 常用初始化参数说明

参数名 参数描述
model 使用的模型名称

temperature

采样温度,温度值越⾼,AI 回答越天⻢⾏空;温度越低,回答越保守靠谱

max_tokens

要生成的最大令牌数

timeout

请求超时时间

max_retries

最大重试次数

openai_api_key / api_key

OpenAI API密钥。如果未传入,将从环境变量中读取 OPENAI_API_KEY

base_url

API 请求的基本URL

organization

OpenAI组织,如果不传入,将从env var OPENAI_ORG_ID中去读

代码实例:

from langchain_openai import ChatOpenAI
model = ChatOpenAI(
    model="gpt-5-mini",
    temperature=0 ,
    max_tokens=None ,
    timeout=None ,
    max_retries=2 ,
    # api_key ="...",
    #base_url="...",
    #organization ="...",
    #other params ..
)

若使用其它与OpenAI兼容的大模型,例如DeepSeek,则可以使用以下定义方式:

from langchain_openai import ChatOpenAI
model = ChatOpenAI(
    model="deepseek-chat",
    base_url="https://api.deepseek.com/v1",
    openai_api_key=OPENAI_API_KEY
}

参数说明:

  • base_url:出于与OpenAI 兼容考虑,要将base_url 设置为

    https://api.deepseek.com/v1 来使用,但注意,此处v1 与模型版本无关。

  • openai_api_key:需要单独申请DeepSeek API Key,然后重新进行环境变量配置。

    DeepSeek API Key 申请地址:https://platform.deepseek.com/api_keys

2.1.2. invoke()调用

在介绍方式2之前,需要先了解一下关于Runnable 接口中的invoke()调用。该方法是将单个的输入转化为对应的输出。例如对于聊天模型,就是根据用户的输入进行回答。

invoke()方法的定义:

abstractmethod invoke(
      input : Input ,
      config : RunnableConfig | None = None ,
      **kwargs :Any ,
  ) → Output

参数说明:

  • input:输入一个Runnable实例
  • config:出入的Runnable实例的配置参数,默认为空

返回值:

  • 返回一个Runnable实例

class langchain_core.runnables.config.RunnableConfig常用的参数说明:

参数名 参数描述

configurable

通过.configurable_fields()在此Runnable 或子Runnable 上配置的属性的运行时值。

run_id

针对次调用与运行的跟踪器的唯一标识符。如果未提供,将生成新的UUID。

run_name

此调用的跟踪器运行的名称。默认为类的名称。

metadat

此次调用和任何子调用的元数据。键是字符串,值是JSON

类型:dict [strAny]

......

2.1.3. 方式2:init_chat_model

上面的ChatOpenAI 用于明确创建OpenAI 聊天模型的实例。而init_chat_model ()是一个工厂函数,它可以初始化多种支持的聊天模型(如OpenAIAnthropicFireworksAI 等),不仅仅是 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推断

configurable_fields

设置那些模型参数是可以配置的。若该参数配置为:

  • None:没有可以配置的字段
  • 'any':所有的自读那都是可以配置的,类似api_key,base_url等可以在运行时更改
  • Union[List[str], Tuple[str, ...]]:指定的字段是可以配置的

config_prefix

  • 配置为非空字符串,则模型将在运行时通过查找 config["configurable"]["{config_prefix}_{param}"]字段设置配置项
  • 配置为空字符串,那么模型将可以通过onfig["configurable"]["{param}"]字段设置配置项

temperature

采样温度,温度值越高,AI回答越天马行空;温度越低,回答越保守靠谱。

max_tokens

生成的最大令牌数

timeout

请求超时时间

max_retries 最大的重试次数

openai_api_key /api_key

OpenAI API密钥。如果未传入,将从环境变量中读取OPENAI_API_KEY

base_url

API 请求的基本URL

...

init_chat_model()返回值说明

函数返回一个与指定的model_name和mode_provider相对应的BaseChatModel(如ChatOpenAI, ChatAnthropic)。注意要是模型可配置,则返回一个聊天模型模拟器,该模拟器在传入配置后,在运行的时候才会初始化底层模型。

示例1:基本用法

from langchain.chat_models import init_chat_model

deepseek_model = init_chat_model(model="deepseek-chat", temperature=0.1)
print(deepseek_model.invoke("你的名字是什么?").content)

运行结果:

示例2:创建可配置模型

from langchain.chat_models import init_chat_model

configurable_model_1 = init_chat_model(temperature=0.1)
configurable_result_1 = configurable_model_1.invoke("介绍一下你自己", config={"configurable":{"model" : "deepseek-chat"}})

print("configurable_model_1:", configurable_result_1.content)

运行结果:

示例3:具有默认值的可配置模型

# 可配置的模型选择器
configurable_model_2 = init_chat_model(
        model="deepseek-v4-pro",
        temperature=0.1,
        configurable_fields=("model", "model_provider", "max_tokens", "temperature"),
        config_prefix="first"
)

configurable_result_2 = configurable_model_2.invoke("写一篇的文章",
                                                    config={
                                                        "configurable":{
                                                            "first_temperature":1.0,
                                                            "first_max_tokens": 1024,
                                                        }
                                                    },
)

configurable_result_3 = configurable_model_2.invoke("写一篇的文章",
                                                    config={
                                                        "configurable":{
                                                            "first_temperature":0.3,
                                                            "first_max_tokens": 2048,
                                                        }
                                                    },
)

print(configurable_result_2.content)
print(configurable_result_3.content)

我们对于configurable_result_2 和 configurable_result_3 设置了不同的max_tokens和temperature,所以所打印的结果也不同

2.2 通过本地部署的LLM定义聊天模型

2.2.1. ChatOllama

若想使用ChatOllama,需要先安装Ollama 包:

pip install -U langchain_ollama

class langchain_ollama.chat_models.base.ChatOllama是LangChain 为通过Ollama 部署的聊天模型提供的具体实现类。ChatOllama 同样也实现了标准的Runnable 接口。

ChatOllama常用初始化参数说明:

参数名 参数描述
model

要使用的Ollama 模型的名称

temperature 采样温度,温度值越高,AI回答越天马行空;温度越低,回答越保守靠谱。

timeout

请求超时时间

base_url

API 请求的基本URL

num_ctx

设置用于生成下一个令牌的上下文窗口的大小。(默认值:2048

num_gpu

要使用的GPU 数量。在macOS 上,默认为1 表示启用金属支持,默认为0 表示禁用。

...

示例:

from langchain_ollama import ChatOllama
ollama_model = ChatOllama(model="deepseek-r1:70b", 
                          base_url='http://192.168.100.220:11434 ')
result = ollama_model .invoke("what 's your name?")
print(result)
Logo

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

更多推荐