刃神太酷啦头像
LangChain 聊天模型实战:从 API 到本地部署的完整指南----《Hello LangChain LangGraph!》(2)封面图

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

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_keyOpenAI API 密钥。如果未传入,将从环境变量中读取OPENAI_API_KEY。(推荐写到环境变量中去)
base_urlAPI 请求的基本 URL。
organizationOpenAI 组织 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_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 表示禁用。
…………
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)

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/rs1257483201/article/details/163588627

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--