欢迎光临
我们一直在努力

LangChain 聊天模型实战:从 API 到本地部署的完整指南----《Hello LangChain LangGraph!》(2)

文章目录

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

1. LangChain 快速上手

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

eg:
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableSequence
from langchain_openai import ChatOpenAI

# 1. 定义OpenAI模型
# 默认从系统环境变量中读取 OPENAI_API_KEY
model = ChatOpenAI(model="gpt-4o-mini")

# 2. 定义消息
# 用户消息 HumanMessage
# 系统提示消息 SystemMessage 通常作为第一条消息传入
# AI 消息 AIMessage
messages = [
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_key OpenAI API 密钥。如果未传入,将从环境变量中读取OPENAI_API_KEY。(推荐写到环境变量中去)
base_url API 请求的基本 URL。
organization OpenAI 组织 ID。如果未传入,将从环境变量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,则可以用下面的方式进行定义

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

import os
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')# 从电脑的「环境变量」里,取出名为 OPENAI_API_KEY 的密钥

from langchain_openai import ChatOpenAI
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

class langchain_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_key OpenAI API 密钥。如果未传入,将从环境变量中读取OPENAI_API_KEY。
base_url API 请求的基本 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_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)

赞(0)
未经允许不得转载:171主机测评 » LangChain 聊天模型实战:从 API 到本地部署的完整指南----《Hello LangChain LangGraph!》(2)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址