糖逗 发表于 前天 17:15

13.LangChain组件——聊天模型的使用

本帖最后由 糖逗 于 2026-3-7 17:25 编辑

1. LangChain中的聊天消息,都包含哪几种类型?

[*]AIMessage:就是AI输出的消息,可以是针对问题的回答。(0peenAI库中的assistant角色)
[*]HumanMessage:人类消息就是用户信息,由人给出的信息发送给LLMS的提示信息,比如"实现一个快速排序方法"(OpenAI库中的user角色)
[*]SystemMessage:可以用于指定模型具体所处的环境和背景,如角色扮演等。你可以在这里给出具体的指示,比如"作为一个代码专家",或者"返回json格式"。(OpenAI库中的system角色)


2.代码实战
①调用阿里云大模型
#写法1:常规形式
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

# 得到模型对象, qwen3-max就是聊天模型
model = ChatTongyi(model="qwen3-max")

# 准备消息列表
<b>messages = [
    SystemMessage(content="你是一个边塞诗人。"),
    HumanMessage(content="写一首唐诗"),
    AIMessage(content="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦。"),
    HumanMessage(content="按照你上一个回复的格式,在写一首唐诗。")
]</b>

# 调用stream流式执行
res = model.stream(input=messages)

# for循环迭代打印输出,通过.content来获取到内容
for chunk in res:
    print(chunk.content, end="", flush=True)
②调用本地Ollama模型
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

# 得到模型对象, qwen3-max就是聊天模型
model = ChatOllama(model="qwen3:4b")

# 准备消息列表
messages = [
    SystemMessage(content="你是一个边塞诗人。"),
    HumanMessage(content="写一首唐诗"),
    AIMessage(content="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦。"),
    HumanMessage(content="按照你上一个回复的格式,在写一首唐诗。")
]

# 调用stream流式执行
res = model.stream(input=messages)

# for循环迭代打印输出,通过.content来获取到内容
for chunk in res:
    print(chunk.content, end="", flush=True)


3.简写形式VS非简写形式
简写形式,可以动态替换{变量}占位中的值




学习视频:【黑马程序员大模型RAG与Agent智能体项目实战教程,基于主流的LangChain技术从大模型提示词到实战项目】 https://www.bilibili.com/video/BV1yjz5BLEoY/?p=24&share_source=copy_web&vd_source=792a2cb63a1882bff4ed856eadc41a71

糖逗 发表于 前天 17:16

{:10_248:}

FishC 发表于 前天 17:16

你好!很高兴为你解答 LangChain 中聊天模型的相关问题。

你提供的学习资料总结得很棒,我来帮你把代码部分补充完整。

关于问题1:你的回答完全正确。
LangChain 中主要的聊天消息类型有三种:

[*]SystemMessage: 设定AI的角色或背景(对应OpenAI的system角色)。
[*]HumanMessage: 代表用户的输入(对应OpenAI的user角色)。
[*]AIMessage: 代表AI模型的回复(对应OpenAI的assistant角色)。


代码实战补全:
两份代码中的 messages 变量都需要被赋值为一个包含上述消息类型的列表。

① 调用阿里云大模型(通义千问)的完整示例:

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

# 得到模型对象
model = ChatTongyi(model="qwen3-max")

# 准备消息列表:一个完整的对话上下文
messages = [
    SystemMessage(content="你是一个专业的Python编程助手,请用简洁明了的方式回答。"),
    HumanMessage(content="请用Python写一个函数,计算斐波那契数列的第n项。")
]

# 调用stream流式执行
res = model.stream(input=messages)

# for循环迭代打印输出
for chunk in res:
    print(chunk.content, end="", flush=True)


② 调用本地Ollama模型的完整示例:

from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

# 得到模型对象,这里以 llama3.2 为例
model = ChatOllama(model="llama3.2")

# 准备消息列表
messages = [
    SystemMessage(content="你是一个乐于助人的翻译助手。"),
    HumanMessage(content="将这句话翻译成英文:'你好,世界!'")
]

# 调用stream流式执行
res = model.stream(input=messages)

# for循环迭代打印输出
for chunk in res:
    print(chunk.content, end="", flush=True)


重要说明:

[*]消息列表 messages 的顺序非常重要。模型会根据整个列表的对话历史来生成回复。
[*]使用 .stream() 方法是进行“流式”调用,回复内容会逐词(或逐片段)实时返回,适合需要即时反馈的场景。如果你不需要流式响应,也可以使用 .invoke() 方法来一次性获取完整的回复。


希望这些完整的代码能帮助你更好地理解和使用 LangChain 的聊天模型!祝你学习顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 13.LangChain组件——聊天模型的使用