场景参考
流式对话机器人
组合流式输出、历史消息、取消能力和安全边界,构建聊天产品。
聊天产品不只是一次模型调用。完整实现还需要管理会话历史、逐块转发、安全过滤、取消请求和成本边界。
推荐架构
Web/App 展示与取消 → 应用后端 鉴权、会话、限流 → Dimleap 流式生成
API Key 只存在于应用后端。后端验证用户权限,读取经过裁剪的历史消息,再将 Dimleap 的增量结果转发给前端。
服务端核心逻辑
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["APIQIK_API_KEY"],
base_url="https://api.dimleap.cn/v1",
)
def stream_answer(history, user_text):
messages = [
{
"role": "system",
"content": "你是产品帮助助手。不确定时明确说明,不编造功能。",
},
*history[-12:],
{"role": "user", "content": user_text},
]
stream = client.chat.completions.create(
model="glm-5.1",
messages=messages,
temperature=0.4,
max_tokens=800,
stream=True,
)
for chunk in stream:
if chunk.choices:
text = chunk.choices[0].delta.content
if text:
yield textyield 产生的文本可以通过你的 WebSocket、SSE 或分块 HTTP 响应发送给前端。不要让浏览器直接携带 Dimleap Key。
会话历史策略
- 保存结构化消息,而不是把整段对话拼成一个字符串。
- 限制最近消息数量只是简单方案;更稳妥的是按 Token 预算裁剪。
- 将较早对话压缩为事实摘要,并保留最近几轮原文。
- 工具返回的大段 JSON 不应永久保留,可提取关键字段后再存储。
- 为每个会话设置最大轮次、最大上下文和闲置过期时间。
产品体验清单
| 能力 | 实现重点 |
|---|---|
| 打字机效果 | 合并小数据块后批量渲染,减少前端抖动。 |
| 停止生成 | 前端取消后,后端同步关闭到 Dimleap 的上游连接。 |
| 重新生成 | 复用同一轮之前的历史,不把失败回复重复加入上下文。 |
| 引用来源 | RAG 场景让模型使用稳定的来源编号,应用负责渲染链接。 |
| 失败提示 | 区分余额、限流、超时和系统故障,给出可操作提示。 |