bit::Shadow(⊙o⊙)头像
LangChain定义聊天模型 基础问答封面图

LangChain定义聊天模型 基础问答

@bit::Shadow
✧(≖ ◡ ≖✿ 

目录

定义聊天模型

Page2

Page3

本地部署 LLM 演示(32)


本文介绍LangChain中聊天模型的定义与使用,通过ChatOpenAI和ChatOllama实现本地及云端大模型调用。利用LCEL(LangChain Expression Language)的管道符|组合模型与解析器,实现消息流式处理与结果解析。支持配置化参数(如model、max_tokens),并通过configurable灵活切换模型与参数。结合Pydantic定义工具输入输出,提升可读性与安全性。最后演示本地部署LLM(如Ollama)的调用方式,适用于私有化场景。

Runnable 接口: 提供一套统一、可组合、支持同步/异步/流式/批量的标准接口,让不同组件能像「乐高积木」一样用管道符 | 拼装成链。

LCEL:编排解决方案

.py

model = ChatOpenAI(model="gpt-4o-mini")
#1.定义openai模型  默认从环境变量中获取key

messages = [
    SystemMessage(content="你帮我翻译为英文"),
    HumanMessage(content="具体内容")
]
#注意:context本是上下文“角色content译”内容
#2.定义消息
#系统提示消息 SystemMessage “通常作为第一条消息传入”
#用户消息 HumanMessage

tempresult = model.invoke(messages)
print(tempresult) # ①
#3.调用大模型
# 输入的是LangChain消息列表
# 输出的是 LangChain 消息(AIMessage)

parser = StrOutputParser()
#4.定义"解析器"

chain = model | parser
print(chain.invoke(messages)) # ②
#model.invoke后将result交给parser
#的输出差异看出解析器的…作用

红笔批注:| 管道符,LangChain 消息到文本,输出的是 LangChain 消息 (AIMessage)

上述其实就是 LCEL(LangChain Expression Language):采用声明性方法从现有的 Runnable对象构建新的 Runnable对象。

定义聊天模型

model = ChatOpenAI(
    model="gpt-4o-mini",
    temperature = 0, #温度,越大,内容越发散,常 [0,2]或[0,1]
    max_tokens = None, #输出最大token
    timeout = None,
    max_retries =2,
    api_key="...",
    base_url="...", #指定前置请求路径,理解:我们直接访问
    organization="...", #openai组织ID
    # other prag…
)

base_url:

deepseek:api.deepseek.com 出于兼容 openai,也可写为 https://api.deepseek.com/v1

2.init_chat_model

2.1 基础使用

gpt_model = init_chat_model(
    model="gpt-4o-mini",
    model_provider="openai",
    temperature=0.3,
    # 其他常用可选参数:
    # max_tokens=1024,
    # timeout=30,
    # max_retries=2,
    # api_key="sk-...",        # 或从环境变量 OPENAI_API_KEY 读取
    # base_url="https://...",  # 自定义代理/网关时使用
)

2.2 invoke() 的config参数才真正意义上定义了模型

print(
    f"config-model: {
        config_model.invoke(
            input=messages,
            config={"configurable": {"model": "deepseek-chat"}}
        ).content
    }"
)

2.3 # 可配置 (configurable) 模型

config_model = init_chat_model(
    model = "gpt-4o-mini",
    model_provider="openai",
    temperature=0.3,
)

Page2

第二种定义 docxstring 的方式:pydantic 方法

class AddInput(BaseModel):
    """两数相加"""
    a:int = Field(..., description="第一个整数") #…表示该字段必填,无默认值
    b:int = Field(..., description="第二个整数")

@tool(args_schema = AddInput)
def add(a:int,b:int)->int:
    return a+b

注意:第二种定义方式较第一种add.args拥有描述字段

第三种(对第一种的修订)pydantic 方法

@tool
def Add(
    a: Annotated[int, ...,"第一个整数"],
    b: Annotated[int, ...,"第二个整数"],
)->int:
    """两数相加
    Args:
        a:第一个整数
        b:第二个整数
    """
    return a+b

Page3

max_tokens = 1024,
configurable_fields = ("max_tokens", "model", "model_provider"),
config_prefix="first", #配置前缀字段

messages = [
    SystemMessage(content="需求…"),
    HumanMessage(content="具体需求…")
]

result = model.invoke(
    input=messages,
    config = { #二次配置
        "configurable":{
            "first_max-tokens": 10,
            "first_model": "deepseek-chat",
            "first_model_provider": "deepseek",
        }
    }
)

本地部署 LLM 演示(32)

Ollama-model 与 openai-gpt 一致的方法,不过要使用 “本地”

ollama_model = ChatOllama(
    model="deepseek-r1:1.5b",
    base_url="http://127.0.0.1:[端口号]",   # 换成 Ollama 实际端口,默认 11434
)

# 注:代理影响 —— 若系统设置了 HTTP_PROXY / HTTPS_PROXY,
#     访问 127.0.0.1 的请求可能被代理拦截,建议临时绕过本地地址。
print(ollama_model.invoke("需求…").content)



欢迎关注,长期连载
感谢支持

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

原文链接:https://blog.csdn.net/oooooooooooohd/article/details/167902327

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

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