Files
NotesAgentic/docs/development/模型上下文管理.md
T

5.2 KiB
Raw Blame History

模型上下文管理

核对日期:2026-09-05。

Provider 表单按精确模型 ID 保存 context_policies,包含窗口、输出预留、触发比例、处理模式和摘要提示词。旧配置默认空列表,未配置模型保持原行为。窗口是用户设置的预算,不会改变厂商限制;同一厂商的不同模型、地域和部署不能共用推测的窗口规格。

请求行为

  • 发送前对系统提示词、文本历史、工具定义、调用参数和输出格式进行 UTF-8 长度估算(字节数 / 2 向上取整,加 64)。这是启发式检测,不能替代厂商 tokenizer,也不能准确预测隐藏思考开销。
  • 输入预算为窗口减去输出预留;请求输出上限和自定义输出、思考参数会纳入预算。未指定输出上限时使用配置的输出预留。
  • 达到输入预算的触发比例后,“检测”模式停止请求并提示调整配置或新建会话。“压缩”模式额外调用当前模型,摘要仅替换本次请求中的旧历史,数据库原始记录不变。每次超阈值请求重新生成摘要,摘要调用单独计入用量。
  • 压缩保留系统消息和最近两个用户回合;只有两个回合时保留最新回合。摘要作为用户角色的参考材料,不提升为系统指令。
  • 无旧历史、附件、工具调用链、摘要请求超限、空摘要或压缩未缩短等情况停止,不截断原文、不循环重试。摘要失败仍可能产生已发生的厂商用量。
  • 流式聊天通过 ContextStatus 提示成功压缩,通过 Error / Done 提示检测失败。此实现不是厂商原生 compaction,也不通过缓存命中率判断是否压缩。

官方文档依据

表单提供对应文档链接。只有核对到精确模型 ID 的值用于建议;未识别型号显示可编辑的 32,768 初始预算,并明确其不是厂商规格。

预设 参考文档与限制
OpenAI Chat / Responses 上下文状态:输入、输出和推理共用模型窗口,原生压缩是独立功能。
Anthropic 上下文窗口Compaction:原生压缩有独立的模型与接口约束。
DeepSeek 模型规格:按实际模型核对窗口和输出上限,不根据缓存计数猜测压缩。
Ollama Context length:实际窗口还受服务端配置和设备资源限制。
Kimi Chat API:按具体模型核对请求限制。
百炼 Qwen 文本模型:型号和地域影响上下文、输入、输出限制。
智谱 GLM 模型概览:按具体模型填写。
火山方舟 官方文档入口:接入点需以实际部署型号为准,本次不预填统一容量。
硅基流动 文本生成:各模型 context_length 不同,以模型广场为准。
百度千帆 上下文管理:部分思考模型 max_tokens 仅限制回答,max_completion_tokens 包含思考。
腾讯混元 官方产品动态:不同型号存在独立输入、输出限制,不预填厂商统一容量。
MiniMax OpenAI 兼容接口M3 为 1,000,000;文档列出的 M2.x 为 204,800。仅对列出的精确 ID 提供建议。
阶跃星辰 模型概览:按实际型号核对。

验证范围

离线测试覆盖预算触发、模型隔离、无副作用压缩、工具历史保护、单条输入超限、无效摘要、输出覆盖参数、流式错误事件以及配置校验。前端覆盖保存恢复与切换地址清理配置。没有调用用户的真实厂商账号进行收费验收。

全局人设

GET /api/settings/personaPUT /api/settings/persona 管理此 AI Core 的唯一全局人设,保存在 SQLite 中。包含名称、系统提示词、结构化 user/assistant 对话对和乐观锁版本。设置页“通用”及聊天页均可打开同一表单。头像仍仅保存在本机浏览器。

所有通过 ProviderFactory 创建的模型调用(普通对话与智能体、流式与非流式)在上下文预算检查前读取最新全局配置,将非空系统人设与对话示例追加到调用方原有系统提示词,保留 RAG 和任务约束。浏览器不再拼接本地人设,因此不会因更换浏览器丢失或重复注入。清空并保存后不再注入。厂商测试推理同样经过此边界;应用内部的历史摘要生成使用独立摘要提示词,避免人设干扰摘要格式。Mock 演示适配器不模拟真实系统提示词执行效果。