MossHubAPI 文档
开发者文档 多轮聊天

多轮聊天

下载代码

把上一轮的消息完整带回请求,继续同一段对话。

Python 3 · 标准库Chat Completions服务端示例

使用前确认

需要:提供 Chat Completions 协议的文本对话模型,即控制台模型详情的调用方式中列有 OpenAI Chat Completions。先完成快速开始中的环境变量配置,并把 YOUR_MODEL_ID 换成这把密钥可用的模型 ID。

完整示例

可从页头“下载代码”保存为 .py 文件,在配置好环境的服务端运行。

import os, json, urllib.request, urllib.error

BASE = os.environ["MOSSHUB_API_BASE"].rstrip("/")
KEY = os.environ["MOSSHUB_API_KEY"]
MODEL = "YOUR_MODEL_ID"

def chat(messages, **options):
    body = {"model": MODEL, "messages": messages, "stream": False, **options}
    request = urllib.request.Request(
        BASE + "/v1/chat/completions",
        data=json.dumps(body, ensure_ascii=False).encode("utf-8"),
        headers={"Authorization": "Bearer " + KEY,
                 "Content-Type": "application/json"}, method="POST")
    try:
        with urllib.request.urlopen(request, timeout=60) as response:
            result = json.load(response)
    except urllib.error.HTTPError as error:
        raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8')}") from error
    choices = result.get("choices", [])
    if not choices or not isinstance(choices[0].get("message"), dict):
        raise RuntimeError("未返回有效消息,请检查错误信息与模型能力")
    if choices[0].get("finish_reason") == "length":
        raise RuntimeError("回答因输出上限而截断,请调整预算后重试")
    return choices[0]["message"]

messages = [{"role": "system", "content": "你是一个简洁的中文助手。"}]
for question in ["给一个周末做饭计划。", "把刚才的计划改成两人份,并列出购物清单。"]:
    messages.append({"role": "user", "content": question})
    answer = chat(messages)
    if answer.get("tool_calls") or not isinstance(answer.get("content"), str):
        raise RuntimeError("当前返回不是普通文本回答")
    print(answer["content"])
    messages.append({"role": "assistant", "content": answer["content"]})

运行后检查

第二次回答应能引用第一次的计划。网关不保存对话,每次请求只带着你发送的 messages;切换模型或新开请求都不会自动带上上一轮记录。

接入应用时

  • 按原顺序保存 user / assistant 消息,系统指令放在开头;模型返回工具调用时见工具调用。
  • 长对话需要裁剪或摘要:输入与输出共同受模型上下文窗口限制,控制台模型详情列出上下文窗口与最大输出。
  • 示例的 timeout=60 由客户端决定。请求已转给上游后客户端超时或断开,网关会取消上游请求,但仍按估算的输入用量计费;模型回答较慢时调大超时。需要边生成边显示时见流式输出。

继续阅读

文本对话参数 · 协议兼容 · 错误排查

实际可调用的模型、授权与价格以控制台为准。
页面字体:MiSans(小米,依《MiSans 字体知识产权许可协议》使用);Google Sans Flex(SIL Open Font License 1.1)。

本页目录