【AI Agent 全栈开发】LangChain 聊天模型


🚀 欢迎来到我的CSDN博客:Optimistic _ chen
一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐

专栏内容特色适合人群
🔥C语言从入门到精通系统讲解基础语法、指针、内存管理、项目实战零基础新手、考研党、复习
🔥Java基础语法系统解释了基础语法、类与对象、继承Java初学者
🔥Java核心技术面向对象、集合框架、多线程、网络编程、新特性解析有一定语法基础的开发者
🔥Java EE 进阶实战Servlet、JSP、SpringBoot、MyBatis、项目案例拆解想快速入门Java Web开发的同学
🔥Java数据结构与算法图解数据结构、LeetCode刷题解析、大厂面试算法题面试备战、算法爱好者、计算机专业学生
🔥Redis系列从数据类型到核心特性解析项目必备

🚀我的承诺:
✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客#编程学习#Java#C语言#算法#程序员

准备工作

在使⽤LangChain接⼊⼤模型组件,以及与⼤模型进⾏简单对话的能⼒之前,需要获取到API Key,同时配置到系统环境变量中,保证API的隐私性,这里使用deepseek作为示例。
在这里插入图片描述

初步使用Chain

安装OpenAI包

pip install -U langchain-openai
import os

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
#定义模型
model = ChatOpenAI(
    model="deepseek-v4-pro",
    openai_api_key=os.environ.get("DEEPSEEK_API_KEY"), 
    base_url="https://api.deepseek.com",
)

#定义消息列表
messages=[
    SystemMessage(content="你好,帮我完成任务"),
    HumanMessage(content="你是谁?")
]

SystemMessage :表⽰系统⻆⾊消息,系统消息通常作为输⼊消息序列中的第⼀条传⼊,是⽤来启动AI⾏为的消息。
HumanMessage :表⽰⽤⼾⻆⾊消息,是来⾃⽤⼾的、从⽤⼾传递到模型的消息

#调用大模型
result=model.invoke(messages)
print(result)

在这里插入图片描述

# 输出解析
parser=StrOutputParser()
print(parser.invoke(result))

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/53550b9a17a9463091d989bb7ba1da9c.pn

# 定义链
chain=model|parser
# 执行链
print(chain.invoke(messages))

在这里插入图片描述
LangChain 规则:任何类只要继承 RunnableSerializable,自动满足 Runnable 协议,自带全套 Runnable 能力在这个示例中,我们定义的语言模型(model)和输出解析器(StrOutputParser)都是Runnable的接口的实例,所以允许invoke调用。

而对链(chain)的invoke同样如此,只是LangChain Expression Language(LCEL):采⽤声明性⽅法,从现有Runnable对象构建新的Runnable对象LCEL其实是⼀种编排解决⽅案,它使LangChain能够以优化的⽅式处理链的运⾏时执⾏任何两个Runnable实例都可以“链”在⼀起成序列。

上⼀个可运⾏对象的.invoke()的输出作为输⼊传递给下⼀个可运⾏对象,方法就是使用|(管道符)

定义聊天模型

在LangChain的官⽅⽂档中,认为LLM ⼤多数是纯⽂本补全模型。这些纯⽂本模型封装的AP接受⼀个字符串提⽰作为输⼊,并输出⼀个字符串补全结果。

LangChain中的聊天模型通常由LLM 提供⽀持,但经过专⻔调整以⽤于对话。关键在于,它们不是接受单个字符串作为输⼊,⽽是接受聊天消息列表,并返回⼀条AI消息作为输出

通过API定义聊天模型

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

load_dotenv() #加载环境变量

# 1. 定义DeepSeek聊天模型(ChatOpenAI兼容方式)
model= ChatOpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com/v1",
    model="deepseek-v4-pro",
    temperature=0.2
)

# 2. 提示词模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是后端开发专家,回答简洁不啰嗦"),
    ("human", "问题:{question}")
])

# 3. 字符串输出解析器(Runnable实例)
parser = StrOutputParser()

# 4. LCEL 管道链式调用(全部组件都是Runnable,支持|)
chain = prompt | model| parser

# 执行invoke
result = chain.invoke({"question": "BaseOutputParser和Runnable的关系"})
print(result)

通过init_chat_model定义聊天模型

import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 加载密钥
load_dotenv()

# 用 init_chat_model 初始化 DeepSeek
model= init_chat_model(
    # deepseek 模型名
    model="deepseek-chat",
    # 驱动提供商:openai兼容接口
    provider="openai",
    model_kwargs={
        "api_key": os.getenv("DEEPSEEK_API_KEY"),
        "base_url": os.getenv("DEEPSEEK_BASE_URL"),
        "temperature": 0.7,
        "max_tokens": 2048
    }
)

# 简单调用
res = model.invoke("介绍LCEL")
print(res.content)

# 搭配 StrOutputParser 完整 LCEL 链路
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是后端技术专家"),
    ("human", "{query}")
])
parser = StrOutputParser()
chain = prompt | model| parser

out = chain.invoke({"query": "init_chat_model 和 ChatOpenAI 的区别"})
print(out)

init_chat_model()函数返回⼀个与指定的model_name和model_provider相对应的ChatOpenAI,BaseChatModel

使用init_chat_model()函数的优势:

  • 统一工厂入口,屏蔽各模型客户端差异不用手动导入 ChatOpenAI / ChatAnthropic,只靠两个参数切换模型:model 模型名、provider 厂商
  • init_chat_model 做了一层封装抹平差异,统一顶层参数
  • 兼容所有 OpenAI 兼容模型
  • 对 LCEL 完全友好,底层仍是 Runnableinit_chat_model 返回的实例本质就是对应厂商的 ChatXXX 对象(所有 ChatXXX 聊天模型类,本身就实现了 Runnable 协议)
  • 便于动态配置、动态切换模型(工程化优势)支持运行时动态传入模型名称与厂商,适合配置文件驱动项目
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Optimistic _ chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值