【Agent智能体项目实战四】LangChain调用通义千问聊天模型教程

0 阅读3分钟

本文使用 langchain_community + ChatTongyi 实现多轮对话 + 流式输出,手把手带你跑通阿里云通义千问大模型。

一、场景说明

  • 使用 LangChain 对接阿里云 通义千问
  • 使用 ChatTongyi 聊天模型(适合对话场景)
  • 支持:系统提示 + 多轮历史消息 + 流式输出(打字机效果)
  • 模型:qwen3-max(通义千问3.0 最强模型)

二、环境安装

pip install langchain langchain_community

三、完整可运行代码

import os

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

# 设置 DashScope API Key
os.environ["DASHSCOPE_API_KEY"] = "你的通义千问API_KEY"

# 初始化聊天模型
model = ChatTongyi(
    model="qwen3-max"  # 可替换:qwen3-turbo、qwen-plus、qwen-max 等
)

# 构造多轮对话消息列表
messages = [
    # 系统角色:设定AI身份
    SystemMessage(content="你是一个Python编程专家,同时非常幽默有趣,能帮我解决Python问题。"),
    # 用户第一轮提问
    HumanMessage(content="你是谁?"),
    # AI第一轮回答
    AIMessage(content="我是一个Python编程专家,你有什么问题尽管问!"),
    # 用户第二轮提问
    HumanMessage(content="你能干什么?")
]

# 流式调用(stream)
response = model.stream(input=messages)

# 逐字打印输出(打字机效果)
for chunk in response:
	#打印出消息内容,通过.content获取到内容
    print(chunk.content, end="", flush=True)

四、代码逐行讲解

1. 导入模块

import os
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
  • ChatTongyi:LangChain 封装的通义千问聊天模型
  • SystemMessage:系统提示词,设定AI角色
  • HumanMessage:用户消息
  • AIMessage:AI历史回复

2. 设置 API Key

os.environ["DASHSCOPE_API_KEY"] = "你的API_KEY"

在阿里云 DashScope 控制台获取:
dashscope.console.aliyun.com/

3. 初始化模型

model = ChatTongyi(model="qwen3-max")

常用模型:

  • qwen3-max:最强能力
  • qwen3-turbo:速度快、性价比高
  • qwen-plus:通用增强版

4. 构造多轮对话

方式一:

messages = [
    SystemMessage(...),
    HumanMessage(...),
    AIMessage(...),
    HumanMessage(...)
]

方式二:

messages = [
    # 系统消息
    ("system", "你是一个Python编程的专家,可以帮助我解决Python编程中的问题,以及是个非常有趣的人"),
    # 用户消息
    ("human", "你是谁"),
    # 助理消息
    ("ai", "我是一个Python编程的专家,你要问什么?"),
    # 用户消息
    ("human", "你能干什么?"),
]

这是 Chat Model 标准格式,可以无限追加历史对话。

5. 流式输出(核心)

response = model.stream(input=messages)
for chunk in response:
    print(chunk.content, end="", flush=True)
  • stream():流式返回,不用等全部生成完
  • chunk.content:每次返回一小段文本
  • flush=True:实时打印,实现打字机效果

五、运行效果示例

我可以帮你做很多事情:
1. 解答Python基础语法、面向对象、异常处理等问题
2. 帮你写代码、改Bug、优化代码
3. 讲解爬虫、数据分析、自动化办公等实战项目
4. 还能陪你聊天、讲段子,非常有趣哦~

六、常见问题

  1. 报错:No module named 'langchain_community'
    • 执行:pip install langchain langchain_community
  2. API Key 无效
    • 检查密钥是否正确
    • 检查账号是否开通通义千问服务
  3. 模型名称错误
    • 确保使用阿里云支持的模型名:qwen3-maxqwen-plus

七、扩展用法

1. 只使用一轮对话

messages = [
    SystemMessage(content="你是Python专家"),
    HumanMessage(content="怎么用Python读取Excel?")
]

2. 换成非流式(invoke)

response = model.invoke(messages)
print(response.content)