目标:
核心功能:
技术栈:
Step 1: 安装依赖
首先安装必要的库:
pip install dashscope
Step 2: 初始化 Qwen API
确保你有 Qwen API 密钥,并将其设置为环境变量:
import os
os.environ["DASHSCOPE_API_KEY"] = "your_qwen_api_key"
Step 3: 定义对话系统的结构
我们需要以下几个组件:
(1)Prompt 模板:定义如何将用户输入和上下文传递给模型。
(2)Memory:用于存储对话历史。
(3)API 调用逻辑:封装 Qwen API 的调用。
以下是完整的代码示例:
import os
from dashscope import Generation
# Step 1: 初始化 Qwen API 密钥
os.environ["DASHSCOPE_API_KEY"] = "your_qwen_api_key"
# Step 2: 定义对话历史存储
class ConversationMemory:
def __init__(self):
self.history = []
def add_message(self, role, content):
self.history.append({"role": role, "content": content})
def get_history(self):
return self.history
# Step 3: 定义对话函数
def chat_with_qwen():
print("欢迎使用基于 Qwen 的对话系统!输入 'exit' 结束对话。")
# 初始化对话历史
memory = ConversationMemory()
while True:
# 用户输入
user_input = input("用户:")
if user_input.lower() == "exit":
print("对话结束,谢谢使用!")
break
# 将用户输入添加到对话历史
memory.add_message("user", user_input)
# 获取当前对话历史
history = memory.get_history()
# 构造 Prompt
prompt = "\n".join([f"{msg['role'].capitalize()}: {msg['content']}" for msg in history])
prompt += "\nAssistant:"
# 调用 Qwen API
response = Generation.call(
model="qwen-max", # 可选择不同版本的 Qwen 模型
prompt=prompt,
max_tokens=200,
temperature=0.7
)
# 解析 API 响应
if response.status_code == 200:
assistant_reply = response.output.text.strip()
print(f"助手:{assistant_reply}")
# 将助手回复添加到对话历史
memory.add_message("assistant", assistant_reply)
else:
print("抱歉,系统出现了一些问题,请稍后再试。")
# Step 4: 启动对话
if __name__ == "__main__":
chat_with_qwen()
os.environ["DASHSCOPE_API_KEY"] = "your_qwen_api_key"
替换 your_qwen_api_key 为你在阿里云控制台申请的 Qwen API 密钥。
class ConversationMemory:
def __init__(self):
self.history = []
def add_message(self, role, content):
self.history.append({"role": role, "content": content})
def get_history(self):
return self.history
def chat_with_qwen():
...
response = Generation.call(
model="qwen-max",
prompt=prompt,
max_tokens=200,
temperature=0.7
)
if response.status_code == 200:
assistant_reply = response.output.text.strip()
print(f"助手:{assistant_reply}")
如果 API 调用成功,提取助手的回复并打印。
将助手回复添加到对话历史中,以便后续对话保持上下文。
运行代码后,系统会进入交互模式,用户可以连续提问,系统会根据上下文生成连贯的回答。例如:
欢迎使用基于 Qwen 的对话系统!输入 'exit' 结束对话。
用户:你好!
助手:你好!有什么我可以帮你的吗?
用户:今天的天气怎么样?
助手:抱歉,我无法实时获取天气信息。不过你可以告诉我具体的城市,我可以为你提供一些相关的建议或信息。
用户:那北京呢?
助手:北京的天气通常比较干燥,尤其是在秋冬季节。如果你需要更详细的信息,建议查看天气预报应用。
用户:exit
对话结束,谢谢使用!
集成外部数据源:
可以通过 Qwen 的 API 集成知识库或数据库,增强系统的知识能力。
示例:结合向量数据库(如 Pinecone 或 FAISS)检索相关文档。
优化上下文管理:
如果对话历史过长,可以对历史进行总结或截断,减少上下文长度。
部署到生产环境:
使用 Flask 或 FastAPI 构建 RESTful API,将对话系统部署为服务。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/chat", methods=["POST"])
def chat():
user_input = request.json.get("message")
response = Generation.call(
model="qwen-max",
prompt=user_input,
max_tokens=200,
temperature=0.7
)
if response.status_code == 200:
return jsonify({"response": response.output.text.strip()})
else:
return jsonify({"error": "API 调用失败"}), 500
if __name__ == "__main__":
app.run(debug=True)
通过上述代码,我们实现了一个基于 Qwen 的对话系统框架,支持多轮对话和上下文管理。该框架具有以下特点: