LangChain定义聊天模型 基础问答

@bit::Shadow
✧(≖ ◡ ≖✿

目录

定义聊天模型

Page2

Page3

[本地部署 LLM 演示(32)](#本地部署 LLM 演示(32))


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

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

LCEL:编排解决方案

.py

python 复制代码
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对象。

定义聊天模型

python 复制代码
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 基础使用

python 复制代码
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参数才真正意义上定义了模型

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

2.3 # 可配置 (configurable) 模型

python 复制代码
config_model = init_chat_model(
    model = "gpt-4o-mini",
    model_provider="openai",
    temperature=0.3,
)

Page2

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

python 复制代码
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 方法

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

Page3

python 复制代码
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 一致的方法,不过要使用 "本地"

python 复制代码
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)



欢迎关注,长期连载

感谢支持

相关推荐
棉猴1 小时前
玩游戏学Python12-布尔型与条件语句
java·前端·python·玩游戏·游戏编程·pgzero
范中勤1 小时前
LangChain / LangGraph Memory 记忆体系技术文档(作用域判定 · 官方现版本实现 · 工程坑点)
langchain·大模型·agent·langgraph·记忆体系
早点睡觉好了2 小时前
LangChain 源码入门 04:Runnable 如何统一调用、批处理、异步与流式接口
python·ai·langchain
丨白色风车丨2 小时前
LangChain Agent 从入门到实战:创建与调用参数全解析
前端·python·langchain
2601_962885722 小时前
如何用 Python 把多只股票对齐成一张宽表?
开发语言·python
李福春5 小时前
技术思考问题17:上了LangChain框架就等于AI-Agent工程化吗?
大数据·人工智能·langchain·深圳同盟·腾讯云架构师技术同盟·llm应用架构·编排抽象
IT_Octopus9 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
半个落月10 小时前
LangChain Agent 中间件实战(上):生命周期、状态、短路与工具包
javascript·langchain
2603_9651481110 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘