功能详解#
逐页说明 ThinkWatch Lite 展示的内容与提供的功能。简要介绍见 Lite 产品页。
主窗口共有十个页面:概览、流量、客户端、密钥、上游、路由、安全、MCP、插件和设置。
用量与费用#
概览页按最近 24 小时、7 天、30 天、自定义区间或某一天统计。顶部是六个指标:「Token」「费用」「请求」「缓存命中」「首 token」与「流量」,每个给出数值,以及与上一个同等长度的区间相比的变化;上一个区间没有记录时不显示变化。选中的指标在下方画成一张带坐标轴的大图:token、费用、请求与流量为面积曲线,失败的请求和下载量各以一条细线标出;缓存命中为命中率曲线;首 token 为中位数与 P95 两条曲线,没有请求的时段以淡色虚线连接。尚未结束的时段以虚线表示,请求记录开始之前的时段标为「未记录」,不按零绘制。指向图上任意时段,显示该时段的数值与用量最多的几个模型。选中「缓存命中」时另列出缓存带来的净节省,以及输入在缓存读取、新输入与缓存写入之间的构成;「流量」是请求发往上游与从上游收到的数据量(见流量与会话)。
大图下方,「去向」按模型、上游或密钥列出所选指标的分布;「额度与余额」列出上游报告的订阅额度窗口与余额,没有上游报告时不显示。「最近一年」以每天一格的热力图显示 token、费用或请求,并给出累计、日均、最多的一天与连续使用的天数;点击某一天,概览即切换到那一天,热力图保持在原位。页面底部的「明细」按模型、上游或密钥列出请求、token、费用、缓存命中、首 token 与生成速度(生成速度只按模型和上游统计),点击一行即在流量页打开对应的请求;「去向」与「明细」的分类方式联动。失败的请求、被切断的工具调用、无法使用的上游与未定价的模型列入提醒(见菜单栏、系统托盘与通知),不在概览上列出。请求记录无法启动的提示,以及连接断开、配置未通过校验的横幅可以忽略,「设置 › 通用」可以让忽略过的提醒全部重新显示。选择「实时」时,「Token」「费用」「请求」三个指标显示最近十分钟,其余指标、去向与明细按最近 24 小时统计。未选择过时间范围时,概览按最近 24 小时统计。
费用会注明其中估算的部分,例如响应结束前被中断的请求。模型未定价的请求和上游未报告用量的请求单独计数,从不按零计入。价格来自价目表:默认价目表采用 LiteLLM 的公开价格,每天更新一次;自定义价目表在其基础上设置倍率,并可单独为个别模型定价,适用于价格与官方不同的中转服务。ChatGPT 这类订阅账号同样按价目表计价,本地模型等上游可设为不计费。每个请求的费用在请求结束时确定,并注明计价所用的价目表及其数据日期。
还没有请求经过上游时,概览页改为显示「开始使用」清单:添加上游、接管客户端、发出第一条请求。其他页面在适用之处提示下一步,例如有了上游之后提示接管客户端。提示可以设为不再显示,「设置 › 通用」可以让它们重新显示。
流量与会话#
流量页实时列出请求:状态、密钥、模型、上游、首 token 时间与总耗时(悬停时显示生成速度)、token(悬停时显示上传与下载;运行中的请求在此显示当前生成速度)和费用,并标出格式转换、被脱敏的密钥、被内容过滤删除或替换的文字,以及被拦截或可疑的工具调用。上游、模型和密钥的名称过长时截断显示,悬停可查看全名。列表可以搜索(路径、密钥、上游、模型与错误信息),可以按密钥、上游和模型筛选,或只看失败、无法计价的请求。列表装有最近 2,000 条请求,搜索与筛选同时在全部请求记录中进行,可以继续向更早的记录搜索。打开「搜索内容」后,还会搜索每个请求新发送的内容(最后一轮用户消息,含工具结果)及其回答(含工具调用),范围以报文仍保留的请求为限;命中的片段显示在对应请求的下方。「会话」视图把同一段对话的请求归为若干轮次,给出每一轮的输入 token 与费用。每一轮还标出模型的上下文窗口用了多少:发给模型的 token 相对上下文窗口的比例,其中缓存读取单独成段;打开一轮,可以看到系统提示、工具定义、此前的对话与最后一条用户消息各占多少的估算。会话的「对话」页按轮还原整段对话:每一轮新加入的消息和回答,包括文字、折叠的思考、工具调用及其结果,图片只显示类型和大小。系统提示词的变化和压缩上下文之后的重新开始会标出;报文已过保留期、过大未能完整保存或无法读取的轮次会注明原因。每一轮都可以打开对应的请求。
打开一个请求可以查看时间线、路由(命中的规则、经过的策略组,以及每一次尝试的状态与耗时)、内容、用量与费用。时间线给出请求经由的代理(「出口」,未经代理时为「直连」),以及请求发往上游与从上游收到的数据量(「上传」与「下载」),按网络上实际传输的大小计算:在网关自身的压缩之后、解码之前,故障转移的各次尝试合计在内。DeepSeek Harness 发出的请求还会显示所带会话日志的大小:这是客户端随每个请求附带的整段对话记录,发往 DeepSeek 以外的上游之前由网关去除。已结束的请求可以在预估费用后原样发送到另一个上游,两次的响应并排对照。网关自身的代码在请求过程中出错时,请求的错误信息写明出错的内容与位置。
「内容」标签页有「解析」与「原始报文」两种视图,请求进行中时两者都实时更新。「解析」以对话的形式显示,回答随流式输出逐步出现,思考与工具调用的参数同样实时显示。回答、思考与系统提示按 Markdown 排版,标题、粗体、列表、表格与代码块照常显示,会话的「对话」页也是如此;回答中的 HTML 按文本显示,链接不可点击,图片不加载。「原始报文」显示请求行与状态行、报文头和正文,流式返回的每个事件到达后依次追加;「跟随最新」使最新的内容保持在视野内。「原始报文」中的「客户端一侧」与「上游一侧」分别显示客户端和上游与网关之间收发的内容,转换 API 格式或插件改写请求时两者不同。两种视图中的密钥与存下的请求一样已被替换。安全规则命中之处在两种视图中都以安全日志的颜色标出,折叠的部分中含有命中时,折叠处带有一个圆点。
尝试链还会标出因并发已满、限流或达到用量上限而跳过的上游(「并发已满」「限流中」「用量已满」,天、周、月上限用满时为「本期用量已满」)、返回 429 的尝试及其引起的暂停(「429 · 暂停 30 秒」)、为这些情况排队等待的时间、超过无响应超时仍未发出内容而被放弃的上游(默认值下显示为「无响应超时 · 300 秒」)及该上游可能已计费的输入 token,以及请求被手动中止时正在进行的尝试(「手动中止」)。上游暂时出错后的重试单列一跳,标为「第 1 次重试」,并注明之前等待的时长(「等待 2.1 秒」);推理强度被规则改写、或被上游拒收后改用其他档位重发的一跳,注明原来与实际发出的档位及原因,例如「推理强度 max 被上游拒收,已改用 high 重发」。正在等待的请求显示「排队中」,等待重试的请求显示「重试中」,在上游的位置列出它等待的上游。因密钥的用量上限而被拒绝,或因上游均并发已满、均在限流、均达到用量上限、等待期间没有上游恢复而未被接下的请求,在上游的位置显示「用量上限」「并发已满」「上游限流中」「上游用量已满」或「等待超时」;以 Responses API 的 WebSocket 模式建立的连接按轮记为请求,每一轮单独统计用量与费用。
进行中的请求可以在它的操作菜单中选择「中止请求」停止。会话的操作菜单和会话详情顶部的「中止会话」经确认后停止该会话中所有进行中的请求。与上游的连接立即断开,客户端收到错误,请求以灰色标为「手动中止」,上游不会因此被暂停。Responses API 的 WebSocket 连接中的轮次不能中止。
客户端接管#
客户端页可以把 Claude Code、Claude Desktop、Codex、opencode、Pi、oh-my-pi、Grok Build、Qwen Code、Hermes Agent、Zed、Aider 与 DeepSeek Harness 指向网关。写入之前,页面列出将要修改的字段和这次接管的其他影响(例如 ChatGPT 桌面版与 Codex 读取同一份配置文件),给出完整的改动差异,并完整备份原文件。只修改指向网关所需的配置,每个客户端使用各自的密钥。Claude Desktop 通过官方的第三方推理模式接入,页面逐一列出要修改的各个文件;由组织统一管理的 Claude Desktop 不做修改。Claude Desktop 只接受 Claude 的模型名;没有上游提供 Claude 模型时,接管会询问它使用哪个模型,并在它的密钥上添加一条路由规则,取消接管时一并删除。已接管的客户端可以随时单独还原或全部还原;Codex 还原后保留一项直连 OpenAI 的配置,接管期间的会话仍可打开。opencode(v1 与 v2)、Pi、oh-my-pi、Grok Build 与 Qwen Code 的配置中同时写入其密钥在网关上可用的模型列表,以及每个模型的上下文窗口,客户端用到时还写入输出上限、是否支持推理与图片输入;网关上可用的模型或模型规格变化后,页面提示更新,更新同样先给出改动差异。DeepSeek Harness 的网页版、桌面版与 headless 模式读取同一份配置,都会经过网关;在桌面版中通过 DeepSeek 账号登录使用的模型仍直接连接 DeepSeek。Cursor、Continue 与 Antigravity CLI 提供逐步的配置方法,并为其创建密钥。页面列出每个客户端处于使用中、等待首个请求还是未生效,以及最近 24 小时的请求。
在 Windows 上,安装在 WSL 中的 Claude Code 与 Codex 按发行版单独成组,列在这台电脑的客户端之后。它们同样可以指向 Windows 上的网关、还原和检查,使用与 Windows 上那一份分开的密钥,配置文件经由 \\wsl.localhost 修改。写入的地址与 Windows 上的客户端相同,是 127.0.0.1,WSL 在以下两种情况下可以访问:
- WSL 1:与 Windows 共用网络。
- 使用 mirrored 网络模式的 WSL 2:在
%USERPROFILE%\.wslconfig的[wsl2]段(或旧的[experimental]段)中设置networkingMode=mirrored,需要 Windows 11 22H2 及以上版本、WSL 2.0.5 及以上版本。
WSL 2 默认使用 NAT 网络,此时 Windows 上的网关无法从 WSL 内访问,网关也不会为此另外监听 WSL 的虚拟网卡。WSL 分组因此不提供接管,改为说明原因,并提供「改为 mirrored 模式」:在 .wslconfig 中新增或修改 networkingMode,文件的其他内容保持不变,与接管客户端一样先给出完整差异,确认后全文备份再写入。修改在 WSL 重启后生效,页面同时提供「重启 WSL」(执行 wsl --shutdown,会停止所有正在运行的发行版)。完全卸载时 .wslconfig 不会改回,备份保留。Windows 10 与 Windows 11 21H2 没有 mirrored 网络模式,WSL 版本低于 2.0.5 时也无法使用,页面会分别说明。连接远程 core 时,WSL 中的客户端与 Windows 上的一样指向服务器,不受网络模式限制。
密钥#
客户端连接网关必须携带密钥,本机也不例外。密钥页列出默认密钥(供未单独分配密钥的客户端使用)和每个已接管客户端的专用密钥,并注明所属客户端,便于在流量页中区分各客户端的请求。每把密钥有各自的路由、可用模型(全部、无,或指定的模型与 gpt-5* 这类通配模式)、可选的并发上限与用量上限,以及最近 24 小时的请求数与费用。密钥可以停用,停用后使用它的请求一律被拒绝;也可以更换,新密钥会写入使用它的客户端的配置。
用量上限防止单个客户端用光预算:每条上限限定这把密钥每分钟、小时、天、周或月,或者每若干分钟、小时(例如每 5 小时)最多使用的请求次数、token 数或费用(美元)。分钟或小时上限已满时,请求在「设置 › 故障转移」的「最多等待」之内等待空出用量,等不到则被拒绝;天、周或月上限用满后,使用这把密钥的请求一律被拒绝,直到重置,密钥列表中标出「已达上限」。token 上限可以计入缓存读取;没有价格的模型按 0 计入费用上限,密钥对话框会列出这些模型;每天、每周或每月的上限用到八成和用满时各发送一次通知。
上游#
上游是网关转发请求的目标:Anthropic、OpenAI、Google Gemini、DeepSeek 或任何兼容接口的 API 密钥,Amazon Bedrock(API 密钥、访问密钥或 AWS profile),在应用内登录的 ChatGPT 账号或 Z.ai / BigModel 账号,OpenRouter、Sub2API、New API / One API 等中转服务,ThinkWatch 企业版网关,以及 Ollama 等本机模型。客户端与上游的 API 格式不同时,请求在 Anthropic Messages、OpenAI Chat Completions、OpenAI Responses 与 Gemini 之间自动转换,无法转换的字段会在请求上逐一列出。模型的思考在转换中保留:DeepSeek、Kimi、GLM 等 Chat Completions 格式上游返回的思考内容原样交给客户端,下一轮送回同一上游,带工具调用的对话因此能继续;Gemini 模型工具调用上的思考签名同样保留。Chat Completions 格式的模型把工具调用写进回答正文时,只要请求定义了这个工具,网关就把它识别为普通的工具调用,并与其他工具调用一样经过「危险命令」检查。客户端以 gzip、deflate 或 zstd 压缩发送的请求正文照常读取,上游压缩返回的回答解码后交给客户端。Codex 等不标注提示缓存断点的客户端,请求转换后发往 Anthropic Messages 格式的上游,或 Bedrock 上 AWS 列为支持提示缓存的 Claude 模型(Claude 3.5 Sonnet v2、Claude 3.7 Sonnet 以及 Claude 4.5 起的模型)时,由网关标注断点,每一轮都能读取上一轮写入的缓存。上游拒绝这些标注时,网关去掉标注重新发送一次。上游可以经出站代理访问,也可以使用单独的价目表计价,别名、代理与价目表在同一页的标签中管理。「代理」标签页的「流量 · 24 小时」一列给出经过每个代理的上传与下载,悬停可查看 7 天与 30 天的数据。可选的「并发上限」适用于限制并发的中转站或账号,「用量上限」让上游不超出它背后的额度:每分钟、小时、天、周或月,或者每若干分钟、小时的请求次数、token 数或费用,例如每 5 分钟 10,000,000 token。限流不会打断客户端:返回 429 的上游按它要求的时长暂停,发给它的请求交给下一个上游或等待它恢复,并发已满或达到分钟、小时上限的上游也是如此;用满天、周或月上限的上游在重置之前被跳过。这些都不算失败。等待期间,流式请求先收到响应头和保活心跳,客户端只会感到首 token 慢了一些;超过「设置 › 故障转移」中的「最多等待」之后,客户端才收到 429。上游页为暂时无法接收请求的上游标出倒计时,例如「限流中 · 42 秒后恢复」「用量已满 · 1 分 10 秒后恢复」,用满一整期的标为「今日用量已满」(或本周、本月)。详见在多个中转站和多把密钥之间自动故障转移与负载均衡。编辑上游的「模型」一节中,上下文窗口与定价两格、每个模型行尾的菜单(右键相同,上游列表的模型弹层中也有)提供「规格…」「设置价格…」「起别名…」:上下文窗口未知时显示「未知 · 填写」,未定价时显示「未定价 · 设置价格」。「规格…」可以手动设置模型的上下文窗口、输出上限,以及是否支持推理与图片输入,适用于价目表中没有或数值有误的模型,手动设置的值优先于价目表;「设置价格…」打开上游所用的价目表并为这个模型添加覆盖,上游使用默认价目表时为它新建一张,之后再设置价格时编辑这一张。链路测速测量 DNS 解析以及 TCP、TLS、代理握手的耗时,不产生费用;推理测速测量首个 token 的时间,运行前先给出费用预估。
「新建上游」先选择服务。服务分为「模型厂商」(Anthropic、OpenAI、Google Gemini、DeepSeek、Z.ai / BigModel)、「平台与中转」(Amazon Bedrock、OpenRouter、ThinkWatch、Sub2API、New API / One API)与「本机与自定义」(Ollama、自定义)三组,各带标志和一句介绍,可以搜索。选定后直接进入「连接」,只询问该服务需要的内容。「认证方式」按服务给出:OpenAI 为 API 密钥或 ChatGPT 账号,Z.ai / BigModel 为 API 密钥或账号登录,Bedrock 为 API 密钥、访问密钥或 AWS profile,自定义为 API 密钥或 OAuth,ThinkWatch、Sub2API 与 New API / One API 为 API 密钥;只有一种方式的服务不显示这一项。服务已经决定的内容,例如地址、接口协议,或 Ollama 不需要密钥,直接填好或不再显示。请求头、转发客户端身份、代理不可用时的处理、并发上限与用量上限收在「高级设置」中,其中任何一项有设置时自动展开。点击「下一步」即检测连接,不产生费用:通过后进入「模型」,顶部显示响应时间、发现的模型数和余额(如有);没有通过时写明原因,可以「重试」,也可以「仍然继续」,适用于拒绝检测但能正常转发的上游。ChatGPT 与 Z.ai / BigModel 账号在对话框内登录,阅读说明后,可以在默认浏览器中登录,也可以「复制链接」到常用的浏览器中打开;ChatGPT 账号还可以用设备码登录。登录后上游即写入配置,对话框直接进入「模型」,顶部显示登录的账号。连接远程 core 时,ChatGPT 账号只能用设备码登录,验证网址和设备码都可以复制。
「编辑上游」按地址认出服务(Sub2API、New API / One API 与 ThinkWatch 按余额来源认出),显示它的标志和名称,询问的内容与新建时一致;已经设置的值始终显示,即使该服务新建时不询问这一项。经账号登录写入的 Z.ai 或 BigModel 上游,认证方式显示为「账号登录」,可以「重新登录」;手动填写密钥的上游可以改为「账号登录」,登录后账号中取得的密钥替换当前密钥,模型范围、计费方式等设置保持不变。
「额度 / 计费」一列显示服务报告的额度与余额。ChatGPT 账号显示订阅额度与重置时间;GLM Coding Plan 的上游(地址在 api.z.ai 或 open.bigmodel.cn 上,在应用内登录或手动填写密钥均可)同样显示:5 小时与每周额度,积分制套餐另外显示剩余积分(「剩余 1,976 / 2,000 积分」)。其他上游显示余额:密钥的额度或最紧的时间窗口,以进度条和剩余量表示;账户中的余额(「余额 $18.40」);没有限额的密钥则显示已用金额(「本月已用 $12.40」)。悬停可以查看全部窗口的用量与重置时间、确切数字和读取时间,其后列出上游自身每条用量上限的用量。余额来源包括 OpenRouter、DeepSeek、Moonshot、Sub2API、New API / One API 与 ThinkWatch 企业版,按地址认出,或由新建上游时所选的服务决定。在 ThinkWatch 企业版网关上,密钥设了自己的限额时显示密钥的限额与用量;没设时显示账号的限额与所有密钥合计的用量,并注明是账号的。检测连接的结果中也显示余额,上游的菜单中有「刷新余额」。余额读不到时,悬停可以查看原因;读取余额不影响请求转发。
一家上游的模型,是它自己列出的模型加上手动添加的模型。上游常常没有列全它能服务的模型:账号类的后端会隐藏较新的模型,中转站只列出一部分。在上游的模型列表中选择「添加模型…」,可以按确切的模型 ID 添加这类模型,一次可以添加多个。模型 ID 不能含 * 或 ?,前后不能有空格,最多 256 个字符,且不能重复;不符合要求的,以及上游已经列出的,对话框在保存之前当场指出。手动添加的模型标有「手动」,路由与故障转移、别名、指定模型的路由规则、密钥的可用模型、客户端看到的模型列表、试算与推理测速都把它当作列出的模型。列表顶部的摘要把上游列出的模型与手动添加的模型分开计数。悬停在手动添加的模型上会出现「移除」,立即生效,随后的提示中可以「撤销」。「新建上游」与「编辑上游」对话框的「模型」一节末尾有同样的输入框,无论上游是否提供模型列表,创建或编辑时都可以在这里添加模型,随上游的其他设置一起保存;启用范围为「指定模型」时,在这里添加的模型立即勾选启用。上游不提供模型列表时,手动添加的模型就是它的全部模型。
别名标签为模型设定客户端使用的名称。一个别名列出同一个模型在各家上游的名称,例如 Anthropic 上的 claude-sonnet-5 和 Bedrock 上的 us.anthropic.claude-sonnet-5-v1:0;提供其中任一名称的上游都能以自己的名称服务这个别名,并互为备用。客户端的模型列表里能看到别名,回答里的模型名写成客户端请求的名称,请求记录则保留每家上游实际收到的模型。同一个 Claude 模型在官方 API、Bedrock、Vertex 或 OpenRouter 上名称不同时,别名标签和新建别名对话框会建议合并。也可以在上游的模型列表里直接起别名。对话框列出每家上游将收到的名称,名称会接管另一家上游的同名模型时给出提示。密钥的可见模型允许某个上游模型时,列有它的别名也可以使用。
每个上游还会与服务同一模型的其他上游对照最近 7 天的数据,偏差直接标在上游列表中它的名称旁:回答中的模型名与发出的不同,标为「模型名不符」;上游报告的输入 token 相对网关本地估算的倍数明显高于或低于其他上游,标为「输入 token 偏多」或「输入 token 偏少」;后续轮次中从提示缓存读取的输入比例偏低,标为「缓存读取偏低」。悬停可以查看依据与样本数,两边样本都足够时才标出偏差。
API 密钥和请求头的值可以写成 ${变量名},读取系统环境变量。macOS 上读的是登录 shell 里的环境变量,~/.zshrc 等文件中 export 的变量都会生效,Linux 同理(~/.bashrc、~/.profile 等);Windows 上读的是系统设置里配置的环境变量。修改变量后,重新打开应用即可生效。代理相关的变量(HTTPS_PROXY 等)和 PATH 不会被读取。
中转站、服务商或 ThinkWatch 企业版控制台可以提供导入链接(thinkwatch://import?…,或网页形式 https://thinkwat.ch/import#…),打开预填好的「新建上游」对话框,服务类型、地址、密钥、请求头、并发上限、用量上限、模型、模型规格与价目表都可以预先填写。对话框写明接收请求与密钥的主机;选择「下一步」或开始登录之前,不写入配置,也不发出任何请求。一条链接只能新增一个上游,不能设置代理、模型别名、路由或环境变量引用;需要更新版本应用的链接会提示更新。各服务类型的参数与链接生成器见导入链接。上游行菜单中的「分享…」为已有的上游生成导入链接,可以选择是否包含密钥;多选上游之后,工具条上的「导出所选 N 个上游…」把它们导出为配置包(见同步与备份)。
路由与故障转移#
每把密钥使用一条路由,未指定的使用默认路由。路由由按顺序匹配的规则组成。规则的条件包括模型、密钥、客户端的 API 格式、输入 token 数、max_tokens、工具数量、图片、扩展思考、流式、提示缓存、辅助请求的类型以及时段;命中后把请求交给某个上游、策略组或指定模型,或拒绝请求,也可以改写模型、max_tokens 或推理。「推理」可设为「关闭」,或 low、medium、high、xhigh、max 中的一档:指定档位时只改写已开启推理的请求,生成标题等未开启推理的请求保持不变,推理也不会因此开启。「关闭」按上游的格式写入,请求转换为其他格式时同样生效:发往 OpenAI Chat Completions 与 Responses 上游的写为 none,发往 Gemini 2.5 Flash 的思考预算为 0,发往 Anthropic 与 Bedrock 上游的不带思考设置;无法关闭思考的 Gemini 模型(2.5 Pro、Gemini 3)不带思考设置。上游拒收某一档推理强度时,请求改用上游接受的档位在同一上游重发一次:拒收 none 的,改用上游列出的最低一档,上游一档都没有列出时才去掉推理强度。这一选择按上游和模型记住 7 天,之后的请求直接发送可用的档位。2026.10.29 之前改写扩展思考的规则不再能加载,应用以安全模式打开:「一键修复」删去这一项后,在规则中重新设置「推理」即可,「关闭」对应原来的关闭扩展思考。指定模型写明上游和它的某个模型,可按顺序列出备用,模型名原样发出;要让某个客户端把一个模型当另一个模型的名称使用,在这个客户端的密钥上写规则即可,不会改变这个名称对其他客户端的含义。条件写上游模型名时,也匹配列有它的别名。时段按网关所在机器的本地时间判断:选择星期与起止时刻即可,一条规则可以写多个时段,结束早于开始的为跨夜时段。设置 max_tokens 可以限制回答的长度:上游到达上限时自行停止,不会报错。策略组把多个上游放在同一个名字下,并决定尝试的先后:按顺序、手动选择、轮询、延迟最低优先或费用最低优先。轮询策略组的每个成员有 1 到 100 的权重,即长期分到的请求比例;「分配依据」可以在权重之上再乘以各上游的速度(首 token 时间)、稳定性(最近的成功率)或两者,进行中的对话仍留在原上游。一次尝试失败时,请求转到下一个上游;同一会话默认保持在同一个上游上,以便提示缓存持续命中。所有上游都在回答开始之前暂时出错时,例如过载、返回服务器错误、无法连接或连接中断,网关依次等待 2、4、8 秒,此后每次 16 秒,再次发送,只有一个上游时也是如此;上游要求等待更久的,按它的要求等待。重试与排队合计不超过「设置 › 故障转移」中的「最多等待」;已经开始的回答不会重发,请求本身的错误、额度用完、凭据被拒和限流也不重试。返回 429 的上游暂停而不算失败,发给它的请求转到下一个上游或等待它恢复。上游连续「设置 › 故障转移」中的「无响应超时」(默认 300 秒)没有发出内容时,网关放弃这个上游,保活心跳不算内容:尚未向客户端发出内容时,请求转到下一个上游,没有可用的上游时客户端收到超时错误;回答已经开始时,以错误结束。页面顶部的路由图显示每把密钥经过的路由、策略组和上游,进行中的请求各有一种颜色,沿各自的路径从密钥移向上游。
客户端自行发出的辅助请求(连通性检查、预热、生成标题、话题识别、输入建议)可以由网关在本地应答而不产生费用,也可以转发。转发的辅助请求和普通请求一样经过路由规则,规则可以按辅助请求的类型把它们分流到费用更低的上游。
每个请求都记录命中的规则、经过的策略组,以及每一次尝试的状态与耗时。试算按给定的请求条件逐条匹配规则,说明请求会交给哪个上游及其原因,不发出请求,也不产生费用。
安全#
安全页包括「日志」标签页,以及三项防护各自的标签页:「密钥与隐私」「危险命令」「内容过滤」。三项防护对所有上游和所有密钥统一生效。每项防护处于「开启」「监控」「关闭」三种状态之一,状态以圆点标在标签上。「开启」时,命中内容按命中规则的动作处理;「监控」时,命中内容记入日志并发出通知,不做任何改动;「关闭」时不检查。三项出厂均为「监控」,因此默认不会改动或拒绝任何请求和回答。
- 密钥与隐私:请求发出之前,在请求中写出的正文(含系统提示、之前的对话、推理、工具调用的参数、工具结果和工具说明)里查找凭据和个人信息,内置规则共 120 条。保存在 ThinkWatch 中的密钥(上游密钥、网关密钥、代理密码、同步凭据)按值识别,与格式无关;另有约 60 种服务的 API 密钥与令牌(如 Anthropic、OpenAI、DeepSeek 一类的
sk-密钥、xAI、Groq、OpenRouter、Hugging Face、智谱、百度千帆、GitHub、GitLab、AWS、阿里云、腾讯云、Slack、Stripe)、私钥、JWT、连接串中的口令、钱包助记词与私钥。按出现位置识别的凭据只替换值本身:Authorization与 API 密钥请求头、curl -u一类的命令行口令、URL 中的令牌参数、机器人 Webhook(飞书、钉钉、企业微信、Slack、Discord、Teams),以及配置文件中DB_PASSWORD=...一类的赋值。个人信息中,身份证号、银行卡号、IBAN 与护照机读区在号码结构与校验位都正确时才算,出厂开启;境外证件、手机号与固定电话、邮箱、地址、精确坐标、车牌、车辆识别代号、设备标识、公网与内网地址,以及按字段名识别的姓名、住址、出生日期、账号与健康信息,出厂停用,可以按需启用。协议要求原样保留的值,如条目与调用的 id、类型、角色、工具名、模型名和签名,一律不查,字段名也不查,因此规则不会改坏客户端回传的 id。每条规则把命中的内容替换为<<TW_SECRET_1>>这样的占位符,或只作记录、原样发出。回答中出现的占位符按原值的写法如实还原:私钥保留换行,工具调用参数和 Codexapply_patch等自由格式工具输入中的值还原后仍可正常使用。命中保存的密钥时,日志只写明它保存在哪里(如上游名称),不显示值。自定义规则可以指定占位符名称,如PROJECT替换为<<TW_PROJECT_1>>。 - 危险命令:检查模型返回的工具调用中是否含有下载或解码后执行代码、外发环境变量或凭据文件、把凭据发往本机和其服务商以外的主机、读取私钥或云服务凭据、读写 ThinkWatch 自己的数据目录、写入启动项或定时任务等命令。只出现在要写入的文字里的路径(例如提到这个目录的文档)不算。每条规则切断回答,使客户端收不到一个完整、可执行的调用,或只作记录。删除主目录或根目录、设置全员可写权限、把本地文件上传到外部主机三条规则出厂只记录。
- 内容过滤:检查请求,并可按规则检查模型的回答。在请求中,检查用户消息和工具结果,压缩上下文的请求也在其内。在回答中,检查模型输出的正文,包括 Codex 的自由格式工具输入;工具调用由「危险命令」负责,思考过程不检查。规则按关键词、正则表达式或码位(如
U+E0000–U+E007F)匹配,命中时拒绝请求、删除命中内容(不留任何标记)、替换为规则指定的替换文本(默认***),或只作记录。替换后的文字在回答中不还原。回答照常流式输出,只暂缓末尾可能构成命中的少量字符。有检查回答的规则可以删除或替换时,流式回答中不再附带 token 概率(logprobs)。内置规则只检查请求:删除 Unicode 标签字符和双向控制符(人看不见、模型读得到,可用于隐藏指令),拒绝明确要求「忽略先前指令」的请求。零宽字符、私用区字符两条规则(表情符号、波斯文和图标字体也会用到这些字符),以及越狱、身份操纵、套取提示词等规则及其中文版本出厂为停用,可以按需启用。
每条规则都有自己的开关和动作,直接在列表中设置:「密钥与隐私」的规则可选「替换为占位符」或「仅记录」;「危险命令」的规则可选「切断」或「仅记录」;「内容过滤」的规则可选「拒绝」「删除」「替换」或「仅记录」。防护处于「监控」时,各条规则的动作旁注明「监控中」。内置规则按保护对象分组,各组默认收起,组头显示规则数、已开启的条数和最近 7 天的命中次数;规则的名称与说明随语言显示。检索框按名称和匹配内容筛选规则,命中的组自动展开。
「密钥与隐私」中被误认的值可以列为例外:在安全日志的命中详情中选「列为例外」,或在规则表下方的「例外」一节粘贴值添加。列为例外的值在任何规则下都不替换、不记录,规则对其他值照常生效。配置中只保存值的哈希与打码后的样子;保存在 ThinkWatch 中的密钥不能列为例外。例外最多 500 个,可逐个移出。
「密钥与隐私」的自定义规则按原样查找文字(「包含」,默认)或按正则表达式匹配(「正则」),默认不区分大小写,打开「区分大小写」后区分。内容过滤的自定义规则须选定「检查对象」:「请求」「回答」或「请求和回答」;按关键词、正则表达式或码位匹配,默认不区分大小写,打开「区分大小写」后区分。检查回答的规则不能拒绝,也不能按码位匹配,对话框中这两项不可选,并注明原因。「危险命令」的自定义规则为正则表达式。任何规则都可以先用一段文本测试,「密钥与隐私」和内容过滤的测试还会显示处理后的文本;内容过滤的测试可按请求或按回答进行。
规则的动作为「仅记录」,或防护处于「监控」时,命中内容记入日志并发出系统通知。通知只写规则名称和上游,不含命中的原文;同一条规则 5 分钟内至多通知一次,同时到达的多处命中合并为一条通知。各项防护检出的内容都记入第一个标签页的日志,并注明所属的请求;隐藏字符拼出文字时,日志中一并显示这段文字。
日志中的记录可以在原处展开。展开后列出规则命中的每一处,最多 50 处,其余注明处数:所在的部分(系统提示、第几条消息及其角色、工具调用或工具结果及工具名称、回答正文)、JSON 路径,以及前后各最多 80 个字符的上下文,其中的凭据以掩码显示。展开的内容给出命中时的规则:自定义规则的写法与匹配方式,或内置规则的名称及作出判定的 core 版本,因此规则修改或删除之后,记录仍然可读。展开的内容还写明具体的处置:凭据替换成的占位符,被切断的工具调用及客户端收到的提示,请求被拒绝时客户端收到的回复,或删除、替换了几处命中的内容及替换成的文字。所属的会话,以及与客户端请求的模型不同时实际发往上游的模型,也一并列出。请求时间线中的防护记录以同样的方式展开。「导出」把所选区间内的全部记录保存为 JSON(完整细节)或 CSV(每条一行)。日志的保留期限与请求记录相同,防护设置的改动不记入日志。
各项防护作用于经过网关的请求和回答,不作用于磁盘上的文件。配置文件以明文保存密钥,只有所有者可读:挡得住其他用户,挡不住以同一用户身份运行的程序;「密钥与隐私」保护的是带出本机的内容,不是这份文件。
MCP#
MCP 页管理客户端从自己的配置文件中加载的内容,这些内容不经过网关。
- 服务器:并排列出 Claude Code、Claude Desktop、Cursor、Codex、opencode、Antigravity CLI、Zed、Pi、oh-my-pi、Grok Build、Qwen Code、Hermes Agent 与 DeepSeek Harness 配置的 MCP 服务器。可以把一个服务器从一个客户端复制到另一个客户端,或从某个客户端移除;写入前先显示改动,并备份原文件。复制与移除支持 Claude Code、Claude Desktop、Cursor 与 Codex,其余客户端只列出、不写入。位于其他主机的远程服务器标为「第三方」,使用它会把相关上下文发送到该地址;同名服务器在各客户端中配置不同时标为「配置不一致」,可以并排比较。
- 技能与钩子:列出已安装的技能和配置的钩子,以及各自所属的客户端;共用的
~/.agents/skills目录中的技能单独标为共用目录。 - 发现:扫描客户端配置、技能、钩子、斜杠命令、subagent 与项目指令文件,检查隐藏字符、提示注入、危险命令与过宽权限四类问题,每项发现按高、中、低分级。扫描只报告,不修改任何文件。
应用运行期间会监视这些文件,出现新的发现时发送系统通知。文件被编辑后只报告新出现的发现,原有的发现即使换了行号也不再重复报告。
插件#
插件是简短的 JavaScript 文件,在请求发往上游之前改写请求、在回答交给客户端之前改写回答,例如要求用指定的语言回答、在 WSL 与 Windows 之间转换工具调用里的路径。插件在路由之后、于 core 内部的沙箱中运行,没有网络和文件,两次请求之间不留任何数据;看到的是占位符而不是请求里的密钥,改动之后照常经过各项防护。应用自带两个插件,出厂均为关闭。全局对象 tw 提供常用改写的辅助函数,例如在系统提示词末尾附加一句、在流式回答中替换用词。每个插件是一个文件,适用范围、出错时的处理方式和设置项也写在其中;编辑器分为「设置」与「代码」两页,「设置」页的更改写回文件,添加插件时打开的也是同一个编辑器。日常的更改直接保存,只有能改动工具调用的插件,安装、打开、更改代码和确认文件变更才要在系统对话框中确认。文件在应用之外被改动后,插件停止运行,确认新版本后恢复。插件页列出每个插件的状态、权限、适用范围与统计,提供用最近一条请求试运行和日志;被插件改动过的请求在「流量」页带有标记。接口、权限、限额与安全模型见插件。
设置#
设置页分为八节。「连接」列出本机 core 和已保存的远程 core,详见连接远程 core。「通用」设置语言、外观、菜单栏显示的内容(仅 macOS,也可设为不显示)、开机启动、提醒以系统通知发送、仅在应用内显示还是关闭,并可让设为不再显示的引导提示和忽略过的提醒重新显示。「网关监听」设置网关的访问范围(仅本机、所选网卡所在的局域网或所有网卡)、端口和放行网段。「故障转移」设置上游失败后暂停多久、请求交给下一个上游:连续失败几次后暂停、暂停多长,以及余额不足、额度用完和限流时各自的暂停时长;还设置无响应超时,即上游多久没有发出内容即被放弃(默认 300 秒,可设 30 到 3,600 秒),以及「最多等待」,即请求排队等待上游空出位置、限流结束或用量上限恢复(含密钥的分钟、小时上限),以及上游暂时出错后重试,两者合计最多等待的时长,默认 120 秒,超过后请求以错误结束,设为 0 时既不排队也不重试。「日志保留」分别设置请求报文与请求记录的保留天数,以及报文的空间上限;安全日志随请求记录一同过期。「同步与备份」导出与导入配置、开启同步,并列出可以恢复的配置版本(见同步与备份)。「关于」显示版本、检查更新,并可生成诊断包,其中的密钥与地址均已脱敏。「卸载」还原所有已接管的客户端并取消开机启动,应在删除应用之前执行。
同步与备份#
换电脑、重装或在多台设备上使用时,配置不必重新填写:可以导出为一个文件再导入,也可以经自选的文件夹、WebDAV 或 S3 兼容存储在各设备之间自动同步,同步内容缺省以口令加密。每次配置变更都留下一个可以恢复的版本,误删的上游也可以单独找回。
这些功能需要 ThinkWatch Lite 2026.10.25 或更高版本;导出与导入的选项、各同步位置的配置方法、冲突与恢复见同步与备份。
菜单栏、系统托盘与通知#
macOS 菜单栏上行显示今日 token,下行显示此刻所有运行中请求的合计生成速度(42 t/s),请求运行期间每秒更新;请求在等待第一个 token 时显示 0 t/s,没有请求运行时显示破折号。今日费用在点开的菜单和悬停提示中。有请求在运行时,一道流光从左向右扫过标识;仅显示数值时流光扫过数字。菜单打开期间流光暂停,系统开启「减弱动态效果」时流光静止。订阅额度紧张或用完时,菜单栏项不变色,只在点开的菜单中把对应的额度行标为橙色或红色;网关未运行时标识带有红色标记。「设置 › 通用」中的「菜单栏」可以改为仅标识或仅数值,也可以选「不显示」,菜单栏中不再出现该项:网关照常在后台运行,开机启动时也是如此;从访达或聚焦搜索再次打开 ThinkWatch Lite,即显示主窗口。
点开是原生菜单。第一项始终是「打开主界面」,其后是未读的提醒和「今日」一栏:今日 token 以大字显示,下方一行为请求数、失败数与费用,旁边是按小时统计 token 的小图。这一栏的顶行显示网关状态、连接远程 core 时的服务器名称,以及当前的生成速度。再往下,上游报告的每个额度窗口各占一行,显示已用比例与重置时间(订阅账号与 GLM Coding Plan 上游;积分制套餐在额度条下方显示剩余积分),然后是进行中的请求,每一行显示当前速度与运行时长。最后是常用操作:切换手动选择策略组中的上游、复制网关地址(菜单项右侧显示该地址)和默认密钥、有新版本时安装新版本、设置、切换连接、检查更新,不必先打开主界面。
网关未运行时,「打开主界面」之后是网关状态与原因,以及重新启动网关(远程 core 无法连接时为立即重试)和查看原因两项。
Windows 上图标位于通知区域:悬停显示网关状态与今日 token、费用;左键打开主界面,右键打开同一份菜单,其中的「今日」一栏与额度条改为文字。
Linux 上图标位于系统托盘:点击打开同一份菜单,「今日」一栏与额度条同样改为文字;第一项「打开主界面」用于打开主窗口。
以下情况会发送系统通知(macOS 与 Windows 使用原生通知,Linux 通过桌面环境的通知服务):网关停止转发或反复重启、与远程 core 的连接断开、订阅额度用完、账号登录失效或上游拒绝当前凭据、代理不通、配置文件未通过校验、工具调用被切断、安全规则记录了一处命中(见安全)、密钥的每日、每周或每月用量接近或达到上限、客户端配置中出现可疑内容。自动检查到新版本时,也会以灰色列入提醒,并同样以系统通知告知(见更新)。以下几类只记录在应用内:上游无法连接(通常由回退上游承接);请求失败,同一时段内的失败合并为一条,点开即在流量页列出失败的请求;模型未定价,每个上游的每个模型一条,点开前往上游页设定价格,最近 7 天内不再有无法计价的请求时自动收起。提醒可以整体设为系统通知、仅在应用内显示或关闭。标为已读的提醒不再计入铃铛上的数字,但在问题解决或清空列表之前仍留在列表中。