Python 与 LangChain 集成通义千问构建聊天机器人
本文介绍如何使用 Python 和 LangChain 框架接入阿里云通义千问大模型,快速搭建一个具备上下文对话能力的聊天机器人。内容涵盖环境配置、API Key 申请、基础代码实现、提示词工程优化以及对话记忆功能的添加。通过模块化设计,帮助开发者降低大模型应用开发门槛,实现从单轮问答到多轮对话的升级,并提供进阶优化方向供参考。

本文介绍如何使用 Python 和 LangChain 框架接入阿里云通义千问大模型,快速搭建一个具备上下文对话能力的聊天机器人。内容涵盖环境配置、API Key 申请、基础代码实现、提示词工程优化以及对话记忆功能的添加。通过模块化设计,帮助开发者降低大模型应用开发门槛,实现从单轮问答到多轮对话的升级,并提供进阶优化方向供参考。

LangChain 是一个用于开发由大型语言模型(Large Language Models,简称 LLMs)驱动的应用程序的框架。它提供了一个灵活的架构,使得开发者可以构建具有上下文感知能力和推理能力的应用程序,这些应用程序可以利用公司的数据和 APIs。
该框架主要由以下几个部分组成:
LangChain 本身并不开发 LLMs,它的核心理念是为各种 LLMs 提供通用的接口,降低开发者的学习成本,方便开发者快速地开发复杂的 LLMs 应用。
本文将介绍在 Python 环境下使用 LangChain 框架,接入阿里云通义千问大模型,构建一个基础的 AI 聊天机器人的完整流程。
LangChain 框架的核心理念是将语言模型与应用程序的其他部分无缝集成,以创建具有数据感知和自主性的智能应用程序。
要使用 LangChain,开发人员需要导入必要的组件和工具,包括语言模型 (LLMs)、聊天模型 (chat models)、代理 (agents)、链 (chains) 和内存功能。这些组件可以组合起来创建一个能够理解、处理和响应用户输入的智能应用程序。
首先,确保你的 Python 环境已配置好。我们需要安装 LangChain 及其相关依赖。
pip install langchain==0.2.1
pip install langchain-community==0.2.1
pip install python-dotenv==1.0.1
pip install dashscope==1.19.2
langchain:核心库。langchain-community:第三方集成组件。python-dotenv:用于管理 .env 文件中的环境变量,避免硬编码敏感信息。dashscope:阿里云灵积模型服务的 SDK。为了调用通义千问模型,你需要拥有阿里云 DashScope 的 API Key。
注意:请妥善保管你的 API Key,不要将其直接提交到公共代码仓库中。
我们需要导入 LangChain 的核心组件以及通义千问的封装类。
import os
from dotenv import find_dotenv, load_dotenv
from langchain_community.llms import Tongyi
from langchain_core.runnables import RunnableSequence
from langchain.prompts import PromptTemplate
# 加载 .env 文件中的环境变量
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]
在项目根目录下创建一个名为 .env 的文件,并将你的 API Key 填入其中。
DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxx"
我们可以继承 Tongyi 类来指定具体的模型版本,例如 qwen-turbo 或 qwen-max。
class QwenTurboTongyi(Tongyi):
model_name = "qwen-turbo"
class QwenMaxTongyi(Tongyi):
model_name = "qwen-max"
def xiao_hei_zi():
# 初始化 LLM,temperature 控制随机性,范围 0-1
llm = QwenTurboTongyi(temperature=1)
# 定义提示词模板
template = '''
你的名字是小黑子,当有人问问题的时候,你都会在回答的开头加上'唱,跳,rap,篮球!\n\n',然后再回答{question},内容尽量详细
'''
prompt = PromptTemplate(
template=template,
input_variables=["question"]
)
# 构建链:Prompt -> LLM
chain = RunnableSequence(prompt | llm)
# 执行查询
question = '蔡徐坤是谁?'
res = chain.invoke({"question": question})
print(res)
if __name__ == "__main__":
xiao_hei_zi()
上述代码是无状态的,每次提问都是独立的。为了让机器人具备'记忆',我们需要引入 Memory 组件。
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
# 初始化带有记忆的对话链
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation = ConversationChain(
llm=QwenTurboTongyi(temperature=0.7),
memory=memory,
verbose=False
)
# 模拟多轮对话
print(conversation.predict(input="你好,我是小黑子吗?"))
print(conversation.predict(input="刚才提到的 rap 是什么意思?"))
在此示例中,ConversationBufferMemory 会保存之前的对话历史,使得模型能够根据上下文回答问题。
运行脚本前,请确保 .env 文件存在且 API Key 正确。如果遇到问题,请检查网络连接及 API Key 权限。
常见错误排查:
.env 文件路径是否正确,Key 是否复制完整。本文介绍了如何使用 LangChain 框架快速接入阿里云通义千问大模型,实现了一个基础且具备记忆功能的聊天机器人。通过模块化设计,开发者可以轻松扩展更多功能,如联网搜索、知识库检索等。掌握这一流程,将为后续开发更复杂的大模型应用打下坚实基础。
在实际生产环境中,你还可以考虑以下优化方向:
stream 方法实现打字机效果,提升用户体验。通过不断迭代和优化,你可以构建出更加智能、实用的企业级 AI 应用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online