5.2 KiB
5.2 KiB
模型上下文管理
核对日期: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/persona 和 PUT /api/settings/persona 管理此 AI Core 的唯一全局人设,保存在 SQLite 中。包含名称、系统提示词、结构化 user/assistant 对话对和乐观锁版本。设置页“通用”及聊天页均可打开同一表单。头像仍仅保存在本机浏览器。
所有通过 ProviderFactory 创建的模型调用(普通对话与智能体、流式与非流式)在上下文预算检查前读取最新全局配置,将非空系统人设与对话示例追加到调用方原有系统提示词,保留 RAG 和任务约束。浏览器不再拼接本地人设,因此不会因更换浏览器丢失或重复注入。清空并保存后不再注入。厂商测试推理同样经过此边界;应用内部的历史摘要生成使用独立摘要提示词,避免人设干扰摘要格式。Mock 演示适配器不模拟真实系统提示词执行效果。