接入通义千问需完成身份认证、请求封装、响应解析与消息回传四环节,必须维护会话上下文并适配消息格式;api密钥须在百炼平台安全配置、禁硬编码;推荐使用dashscope官方sdk,通过messages数组维持多轮对话;对接钉钉等im平台需清洗@信息并按指定json格式回复;流式响应需启用stream=true并配合sse或websocket实现逐字输出。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

把通义千问大模型能力接入聊天机器人,需要完成身份认证、请求封装、响应解析与消息回传四个环节,不能只调通API就认为接入成功,缺少会话上下文维护或消息格式适配会导致机器人答非所问、无法连续对话。
获取并安全配置API密钥
这一步必须在百炼或灵积平台完成,本地代码里绝不能硬编码密钥值。密钥泄露等于账户失控,所有调用权限将被他人滥用。
登录阿里云百炼控制台 → 进入「API-KEY 管理」→ 点击「创建 API-KEY」→ 勾选《使用协议》后生成密钥对。
【密钥仅显示一次,关闭页面即不可恢复】复制完整字符串(含sk-前缀),立即存入项目根目录的.env文件:DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。
后续代码统一通过os.getenv('DASHSCOPE_API_KEY')读取,避免提交到Git仓库。
安装SDK并验证基础连通性
推荐使用DashScope官方Python SDK,它自动处理鉴权头、重试机制和流式响应解析,比手写requests更稳定。
执行命令安装:pip install dashscope。
新建test_api.py,填入以下内容:
import dashscope
dashscope.api_key = 'your_api_key_here' # 临时测试用,正式环境请改用环境变量
response = dashscope.Generation.call(model='qwen-turbo', prompt='你好')
print(response.status_code, response.output.text if response.status_code == 200 else '失败')
运行脚本,若输出200和“你好”类响应,说明网络、密钥、模型权限全部就绪;若返回401,检查密钥是否复制完整;若返回404,确认是否开通了qwen-turbo模型调用权限。
构造符合聊天场景的请求体
聊天机器人不是单次问答,必须维持多轮上下文。通义千问不自动记忆历史,需手动拼接对话记录。
方法一:用messages数组替代prompt字段(推荐)
messages = [
{"role": "system", "content": "你是一名客服助手,只回答订单、物流、退换货问题"},
{"role": "user", "content": "我的订单还没发货"},
{"role": "assistant", "content": "请提供订单号,我帮您查询"},
{"role": "user", "content": "订单号是2026080412345"}
]
调用时传入messages而非prompt,模型才能理解当前是第几轮对话。若仍用prompt字段,每轮都是孤立提问,AI无法关联前序语境。
方法二:用history参数(部分SDK支持)
某些旧版dashscope版本允许传入history=[{'user': 'xxx', 'bot': 'yyy'}],但该方式已逐步弃用,优先采用标准OpenAI兼容的messages结构。
对接钉钉/企业微信等IM平台
第一步:在钉钉开放平台创建群机器人,获取Webhook地址;第二步:部署一个HTTP服务接收钉钉POST过来的JSON消息;第三步:提取text字段,清洗掉@信息和换行符,再封装为messages数组调用qwen API;第四步:把API返回的output.text按钉钉Markdown格式组装成JSON,POST回Webhook。
关键注意:钉钉消息体中的text字段可能包含用户@机器人的冗余文本,例如“@通义千问 我想查订单”,必须用正则re.sub(r'@[^\s]+\s*', '', raw_text)清除,否则模型会误以为“@通义千问”是用户提问的一部分。
钉钉回复必须用指定格式:{"msgtype": "markdown", "markdown": {"title": "AI回复", "text": "您的订单已发货,物流单号SF123456789"}},字段名错一个字母就会发送失败。
启用流式响应实现逐字输出
聊天机器人要模拟真人打字效果,不能等整段文字生成完才发消息。DashScope支持stream=True参数开启流式传输。
第一步:初始化Generation.call时添加stream=True;第二步:用for chunk in response生成器迭代;第三步:每次拿到chunk.output.text就立即推送给前端或IM平台;第四步:遇到chunk.output.text为空字符串时跳过,防止发送空白消息。
流式响应必须搭配SSE(Server-Sent Events)或WebSocket推送,HTTP短连接无法持续接收分片数据。Flask中可返回SseEmitter对象,FastAPI中用StreamingResponse。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











