☰
LangChain 聊天模型实战:从 API 到本地部署的完整指南----《Hello LangChain LangGraph!》(2)
2026/10/20 1:54:27 网站建设 项目流程

文章目录

    • 1. LangChain 快速上手
      • 1.1 核心概念
      • 1.2 聊天模型核心能力
        • 1.2.1 通过 API 定义聊天模型
        • 1.2.2 通过本地部署的 LLM 定义聊天模型

1. LangChain 快速上手

定义模型->定义消息-> 调用大模型->用输出解析器 或者 定义链(模型+解析器)+执行链

eg:fromlangchain_core.messagesimportHumanMessage,SystemMessagefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.runnablesimportRunnableSequencefromlangchain_openaiimportChatOpenAI# 1. 定义OpenAI模型# 默认从系统环境变量中读取 OPENAI_API_KEYmodel=ChatOpenAI(model="gpt-4o-mini")# 2. 定义消息# 用户消息 HumanMessage# 系统提示消息 SystemMessage 通常作为第一条消息传入# AI 消息 AIMessagemessages=[SystemMessage(content="请帮我进行翻译,由英文翻译成中文!"),HumanMessage(content="my name is xiaoming")]# 3. 调用大模型# result = model.invoke(messages)# 4. 用输出解析器# print(parser.invoke(result))# 定义链+执行链parser=StrOutputParser()chain=model|parser# chain = RunnableSequence(first=model, last=parser)# chain = model.pipe(parser)# 上面这三种方法都是等价的print(chain.invoke(messages))

1.1 核心概念

是LangChain 强制规定的一个统一标准。只要一个组件说自己是Runnable,它就必须具备一套标准的“动作”

标准动作有:

Invoke(调用): 最基础的“一问一答”。你给它一个输入,它立马处理完给你一个输出。

Batched(批处理): 批量干活。你一次性给它 10 个问题,它高效率地打包处理,给你 10 个答案。

Streamed(流式传输): 像打字机一样输出。不用等模型把整整一段话全想好再发给你,而是想出一个字就往外蹦一个字

Inspected(检查): 查看它的“说明书”。你可以随时查询这个组件到底需要什么样格式的输入,以及会吐出什么格式的输出。

Composed(组合): 可以用一条流水线(LCEL语法)把多个组件无缝衔接起来。比如:输入 -> 检索器 -> 大模型 -> 解析器 -> 输出。

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

通过LCEL构建出的新的Runnable对象,被称为RunnableSequence(也是Runnable接口的实例)

LCEL其实就是一种编排解决方案,使LangChain能够以优化的方式处理链运行时的执行

任何俩个Runnable实例都可以链在一起成序列

–就是通过俩个Runnable对象去创建一个RunnableSequence

方法一:使用|chain=model|parser 其实就相当于chain=RunnableSequence(first=model,last=parser)方法二:用.pipe方法代替 chain=model.pipe(parser)效果跟上面的一样

关于Token:Token是文本的基本单位

–对于英文:1个token相当于4个字符

–对于中文:1个汉字约等于1.5-2个token

1.2 聊天模型核心能力

使用不同的模型提供方,要记得安装各自的包以及设置各自的API Key环境变量

1.2.1 通过 API 定义聊天模型

class langchain_openai.chat_models.base.ChatOpenAI是 LangChain 为 OpenAI 的聊天模型(如gpt-5,gpt-5-mini)提供的具体实现类

ChatOpenAI常用初始化参数:

参数名参数描述
model要使用的 OpenAI 模型的名称
temperature采样温度,温度值越高,AI 回答越天马行空;温度越低,回答越保守靠谱。
max_tokens要生成的最大令牌数
timeout请求超时时间
max_retries最大重试次数
openai_api_key/api_keyOpenAI API 密钥。如果未传入,将从环境变量中读取OPENAI_API_KEY。(推荐写到环境变量中去)
base_urlAPI 请求的基本 URL。
organizationOpenAI 组织 ID。如果未传入,将从环境变量OPENAI_ORG_ID中读取。
……(其他参数)
fromlangchain_openaiimportChatOpenAI 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,则可以用下面的方式进行定义

–也就base_urlapi_key和model要改改,其他的跟上面的接口搞法一样

importos OPENAI_API_KEY=os.getenv('OPENAI_API_KEY')# 从电脑的「环境变量」里,取出名为 OPENAI_API_KEY 的密钥fromlangchain_openaiimportChatOpenAI model=ChatOpenAI(base_url="https://api.deepseek.com/v1",openai_api_key=OPENAI_API_KEY,model="deepseek-chat",# ...)

引申:invoke()调用:

这个也属于Runnable接口,这个方法是将单个输入转换为对应的输出

invoke()方法的定义:abstractmethod invoke(input:Input,# 必须:输入数据(比如你的问题、对话历史)config:RunnableConfig|None=None,# 可选:运行配置(比如回调、超时)**kwargs:Any,# 额外的关键字参数)->Output 返回值是一个Runnable实例

上面的config参数,类型就是RunnableConfig

classlangchain_core.runnables.config.RunnableConfig 常用参数说明 参数名 参数描述 configurable 通过.configurable_fields()在此 Runnable 或子 Runnable 上配置的属性的运行时值。 run_id 针对此调用运行的跟踪器的唯一标识符。如果未提供,将生成新的 UUID。 run_name 此调用的跟踪器运行的名称。默认为类的名称。 metadata 此次调用和任何子调用的元数据。键是字符串,值是 JSON。类型:dict[str,Any]

方式二:init_chat_model

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

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请求超时时间
max_retries最大重试次数
openai_api_key/api_keyOpenAI API 密钥。如果未传入,将从环境变量中读取OPENAI_API_KEY。
base_urlAPI 请求的基本 URL。
……其他参数

用法eg:

gpt_model=init_chat_model("gpt-5-mini",model_provider="openai",temperature=0)print("gpt-5-mini: "+gpt_model.invoke("what's your name").content+"\n")
这是可配置的模型 configurable_model_1=init_chat_model(temperature=0)# 动态修改配置,初始化模型并调用configurable_result_1=configurable_model_1.invoke("what's your name",config={"configurable":{"model":"gpt-5-mini"}})print("configurable1: "+configurable_result_1.content+"\n")
这是具有默认值的可配置模型# 可配置模型模拟器configurable_model_2=init_chat_model(model="gpt-5-mini",temperature=0,configurable_fields=("model","model_provider","temperature","max_tokens"),config_prefix="first",)# 动态修改配置,初始化模型并调用configurable_result_2=configurable_model_2.invoke("what's your name?",config={"configurable":{"first_model":"deepseek-chat","first_temperature":0.5,"first_max_tokens":100,}},)print("configurable2: "+configurable_result_2.content+"\n")
1.2.2 通过本地部署的 LLM 定义聊天模型

安装这个Ollama的方法:pip install -U langchain_ollama

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

ChatOllama常用初始化参数说明:

参数名参数描述
model要使用的 Ollama 模型的名称
temperature采样温度,温度值越高,AI 回答越天马行空;温度越低,回答越保守靠谱。
timeout请求超时时间
base_urlAPI 请求的基本 URL。
num_ctx设置用于生成下一个令牌的上下文窗口的大小。(默认值:2048)
num_gpu要使用的 GPU 数量。在 macOS 上,默认为 1 表示启用金属支持,默认为 0 表示禁用。
…………
fromlangchain_ollamaimportChatOllama 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)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询