
🚀 欢迎来到我的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))

# 定义链
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 完全友好,底层仍是 Runnable。
init_chat_model返回的实例本质就是对应厂商的 ChatXXX 对象(所有 ChatXXX 聊天模型类,本身就实现了 Runnable 协议) - 便于动态配置、动态切换模型(工程化优势)支持运行时动态传入模型名称与厂商,适合配置文件驱动项目

1041

被折叠的 条评论
为什么被折叠?



