网关概览与请求日志
本页逐一说明网关概览和请求日志两个标签页里的卡片、列、标签和保存状态,以及哪些数值说明网关运行正常。在 Studio 中打开 OpenViking 网关,选择概览或请求日志标签页即可。客户端通过网关发出第一个请求之前,这两个标签页都没有数据,接入方法见接入客户端。
谁能看到哪些请求
两个标签页读的都是网关的请求日志:每个经过网关的模型请求对应一条记录。普通用户只看到自己的请求,账号管理员和 root 看到整个账号的请求。概览里的数字也是从这些记录算出来的,所以统计范围和请求日志一致。
日志只记元数据,从不保存提示词、回复或记忆内容,详见请求日志记什么。记录默认保留 30 天,见保留期限。
概览
概览标签页汇总请求日志中最新的 10,000 条请求。收到第一个请求之前,页面上还会显示快速开始清单,见快速开始清单和快速模式。
| 卡片 | 显示什么 | 正常时 | 不正常时看 |
|---|---|---|---|
| 请求数 | 模型请求的数量(不含后台保存事件,即日志中的记忆同步)、最近一次请求的时间,以及这些请求的输出 token | 随客户端发请求而增长 | 检查接入是否生效 |
| 首次调用缓存命中率 | 每条新用户消息的第一次模型调用中,命中服务商提示词缓存的输入 token 所占比例 | 接近不经过网关时服务商能达到的水平。这是判断网关是否健康最重要的指标。 | 首次调用缓存命中率下降 |
| 轮内缓存命中率 | 同一轮里后续调用的同一比例,例如工具步骤和 OpenViking 工具的往返 | 通常很高 | — |
| 召回的记忆条数 | 补充到新消息中的记忆条数,以及每次检索 OpenViking 的平均耗时(只统计实际检索了的消息) | 用户在 OpenViking 中有记忆后开始增长;全新账号为 0 属于正常 | 没有补充记忆 |
| OpenViking | 已连接、异常或启动中,OpenViking 的版本,以及异常时的原因。卡片中的保存对话一栏统计正在重试或已暂停保存的对话数。 | 已连接,且最近的请求中没有保存失败的对话 | OpenViking 异常、OpenViking 中看不到对话 |
| 降级请求 | 每种异常出现的次数,附说明和建议操作 | 没有降级请求 | 降级请求的异常 |
| 最近请求 | 最新的几条请求,以及前往请求日志标签页的链接 | — | 请求日志 |
首次调用缓存命中率明显下降,通常说明网关发送的历史和上一次对不上了。OpenViking 连不上期间,请求照常发给模型,只是不带记忆;保存对话会一直重试,直到 OpenViking 恢复。保存对话一栏或降级请求卡片报告问题时,点在请求日志中查看会打开请求日志标签页,并筛选出异常。
长对话没有命中缓存
某段对话最近连续 3 次模型调用的输入都不少于 32,000 token、相邻两次相隔不到 5 分钟,而服务商返回的缓存命中每次都是 0 时,顶部四张数字卡片(请求数、首次调用缓存命中率、轮内缓存命中率和召回的记忆条数)下方会出现“有 2 段长对话连续没有命中提示词缓存”这样的警告,并列出每段对话的模型、上游和连续未命中次数。如果这些都是 Anthropic 对话,而且上游也从没写入过缓存,警告会建议检查客户端是否设置了 cache_control。
下面这些变化之后缓存本来就无法命中,所以连续次数会从头算起:
- 一次压缩,或者模型开启了新的上下文窗口
- 切换到别的模型或上游
- 网关工具在请求中时有时无
某个上游最近从没返回过缓存命中时,显示的是一条提示:经过它的长对话缓存命中率一直是 0%。原因和处理方法见首次调用缓存命中率下降。
请求日志
请求日志标签页按时间倒序列出日志中最新的 1,000 条记录,停留在第一页时每 30 秒刷新一次。筛选和搜索也只覆盖这 1,000 条。
只有到达模型服务商的请求才会记录。被网关先行拒绝的请求不记录,例如密钥无效、模型不在密钥允许的范围内、没有匹配的上游、请求体超限,这些情况下客户端直接收到错误,见客户端收到网关返回的错误。
筛选和搜索
| 筛选 | 显示 |
|---|---|
| 全部 | 所有记录 |
| 新消息 | 以一条新用户消息开启一轮的请求 |
| 工具步骤 | 延续同一轮的请求,例如带着工具结果继续 |
| 异常 | 降级请求、对话保存处于重试中或已暂停的请求,以及服务商返回 HTTP 400 及以上状态码的请求(见上游返回错误) |
| 请求类型 | 某一种请求类型 |
搜索范围包括模型、对话 ID、请求 ID、密钥名称或前缀,以及上游名称。日志只保存对话 ID 的哈希,所以 Studio 会先在浏览器里对粘贴的对话 ID 求哈希再匹配。这要求 Studio 通过 HTTPS 或 localhost 打开;用普通 HTTP 打开时,按对话 ID 搜索什么也找不到。
各列含义
| 列 | 显示 |
|---|---|
| 时间 | 请求到达的时间 |
| 类型 | 请求类型 |
| 模型 | 客户端发送的模型名称 |
| 状态 | 服务商返回的 HTTP 状态码 |
| Token | 输入 token、其中命中缓存的比例,以及输出 token |
| 记忆 | 这次请求中召回做了什么(见下表) |
| 保存 | 所在对话的保存状态;鼠标悬停可以看到原因 |
| 异常 | 降级请求的异常 |
记忆列的写法:
| 显示 | 含义 |
|---|---|
+3 | 这次检索补充了 3 条记忆,旁边附检索耗时。 |
↺ 4 | 之前 4 条消息补充的记忆被原样放回。 |
| 召回失败 | 这次请求的记忆检索没有完成,例如 OpenViking 连不上、拒绝了密钥,或者没有在上下文配置的超时时间内返回。鼠标悬停可以看到原因,另见没有补充记忆。 |
请求详情
展开一行可以看到:
- 对话 ID、上游、网关密钥和耗时
- token 明细
- 记忆检索结果
- 上下文窗口用量,以及历史是否经过压缩、模型是否开启了新窗口
- 保存状态和下次重试时间
- OpenViking 工具详情,包括没有提供工具的原因
有异常的请求,展开后还会说明发生了什么、该怎么处理。
请求类型
每条记录都属于一种类型。类型决定这次请求是否检索记忆、所在的轮次是否保存。
| 类型 | 含义 | 记忆 |
|---|---|---|
| 新消息 | 最后一条是新用户消息的请求 | 检索一次,并放回之前的记忆;这一轮会被保存 |
| 工具步骤 | 同一轮的延续,例如带着工具结果继续 | 放回之前的记忆;随所在轮次一起保存 |
| 辅助请求 | 生成标题、摘要、压缩、建议和权限检查的请求;对话带过客户端工具后,同一对话里不带工具、也不带之前回复的单独请求,例如 Claude Code 汇总抓取的网页 | 放回之前的记忆;从不保存 |
| 子 Agent | 客户端的子 Agent 发出的请求 | 放回之前的记忆;从不保存 |
| Token 计数 | token 计数请求(/gateway/v1/messages/count_tokens) | 放回之前的记忆,计数才和实际发送的内容一致 |
| 直接转发 | 原样转发、不带记忆的请求:其他接口、依赖服务商端状态的 Responses 请求、压缩过或无法解析的请求体 | 无 |
| 记忆同步 | 后台保存事件,不是模型请求 | — |
保存状态
保存列显示网关是否在把一段对话中已完成的轮次保存到 OpenViking。正常情况下显示正常。
| 状态 | 含义 | 网关怎么做 |
|---|---|---|
| 正常 | 保存正常进行。 | — |
| 已关闭 | 这段对话的上下文配置不保存对话。 | 不保存任何内容。 |
| 重试中 | OpenViking 拒绝了保存或无法访问。 | 在 10、20、40、80 秒后依次重试。 |
| 已暂停 | 连续失败 5 次。 | 之后每 5 分钟重试一次,直到成功;未保存的轮次一直保留,直到保存成功或对话过期。 |
已暂停,原因为 gateway_key_revoked | 这段对话的网关密钥已被吊销或删除。 | 不再重试。用户之后用有效密钥在这段对话里发请求时,保存自动恢复。 |
展开的行和保存标记的悬停提示会显示最近一次变化的原因:
| 显示的原因 | 代码 | 含义 |
|---|---|---|
| OpenViking 拒绝了这个密钥,它可能填错了或已被吊销。 | openviking_http_401 | 用户的 OpenViking 密钥已失效。 |
| OpenViking 无法访问或响应超时 | openviking_unavailable | OpenViking 没有运行、连不上或响应太慢。 |
| 保存到 OpenViking 失败 | delivery_failed | 其他原因导致保存失败,网关按上表重试。 |
| 保存已恢复正常 | delivery_recovered | 失败之后又保存成功了。 |
| 对话历史有改动,后续内容改存到新的 OpenViking 会话 | history_changed | 正常现象:客户端编辑、重新生成或压缩了对话,网关用当前历史在新的 OpenViking 会话中继续保存。 |
| 保存过程中对话历史有改动,后续内容改存到新的 OpenViking 会话 | history_changed_during_delivery | 正常现象:同上,只是发生在保存进行中。 |
| 已保存的一轮对话在停顿后又继续了,后续内容改存到新的 OpenViking 会话 | continued_after_idle | 正常现象:已在最新回复等待时长之后保存的一轮又继续了。 |
| 管理员已手动重新同步 | manual_reset | 有人用了重新同步对话…(见下文)。 |
之前的轮次留在旧的 OpenViking 会话里。保存一直处于重试中或已暂停时,见OpenViking 中看不到对话。
重新同步对话
重新同步会为一段对话新建一个 OpenViking 会话,用户下次发消息时,网关把完整历史写进去。原因已经修复、对话却仍然暂停,或者想要一份干净的对话副本时,可以用它。已经保存的内容留在旧会话里,所以 OpenViking 可能会把部分记忆提取两次。
- 在请求日志标签页展开这段对话的一条记录。重新同步需要记录上显示的那把密钥;它已被吊销时,请选同一段对话里更新的一条记录。
- 点击重新同步对话…,再点重新同步。页面会提示“这段对话会在下一条消息时重新保存。”
- 等用户在这段对话里发下一条消息。消息到达之前什么都不会发生;到达后,网关把完整历史保存到新会话,这段对话的记录会显示原因“管理员已手动重新同步”。
下一步
- OpenViking 网关排障:根据卡片、标签或状态找到原因和处理方法。
- 记忆原样放回与提示词缓存:为什么首次调用缓存命中率这么重要。
- 观测:在 Studio 之外检查网关的运行状态。
- 安全与数据:日志记录什么、保留多久。