APIQIKAPIQIK
文档导航
场景参考

流式对话机器人

组合流式输出、历史消息、取消能力和安全边界,构建聊天产品。

聊天产品不只是一次模型调用。完整实现还需要管理会话历史、逐块转发、安全过滤、取消请求和成本边界。

推荐架构

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 text

yield 产生的文本可以通过你的 WebSocket、SSE 或分块 HTTP 响应发送给前端。不要让浏览器直接携带 Dimleap Key。

会话历史策略

  • 保存结构化消息,而不是把整段对话拼成一个字符串。
  • 限制最近消息数量只是简单方案;更稳妥的是按 Token 预算裁剪。
  • 将较早对话压缩为事实摘要,并保留最近几轮原文。
  • 工具返回的大段 JSON 不应永久保留,可提取关键字段后再存储。
  • 为每个会话设置最大轮次、最大上下文和闲置过期时间。

产品体验清单

能力实现重点
打字机效果合并小数据块后批量渲染,减少前端抖动。
停止生成前端取消后,后端同步关闭到 Dimleap 的上游连接。
重新生成复用同一轮之前的历史,不把失败回复重复加入上下文。
引用来源RAG 场景让模型使用稳定的来源编号,应用负责渲染链接。
失败提示区分余额、限流、超时和系统故障,给出可操作提示。