From 00fe18ec4465364740e336d7b7a58fa159884fc0 Mon Sep 17 00:00:00 2001 From: Claude Code Hub Docs Bot Date: Sat, 28 Feb 2026 20:56:43 +0800 Subject: [PATCH 1/4] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E8=87=B3=20v0.6.0/v0.6.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新内容: - 新增 Langfuse LLM 可观测性集成文档 - 新增 changelog v0.5.3 ~ v0.6.1 全部版本记录 - 新增环境变量:ENABLE_ENDPOINT_CIRCUIT_BREAKER、Langfuse 系列配置 - 更新供应商管理:定时启停字段、批量操作撤销功能 - 更新 Webhook 通知:缓存率异常告警 - 更新数据导入导出:ledgerOnly 仅账本导出 - 更新用户管理:客户端限制重构、登录鉴权重构说明 - 更新代理设置:Swap 缓存 TTL 计费说明 - 更新监控日志:决策链溯源 - 修复:移除不存在的 ENABLE_MULTI_PROVIDER_TYPES 环境变量引用 - 更新 FETCH_BODY_TIMEOUT/FETCH_HEADERS_TIMEOUT 默认值 --- src/app/docs/changelog/page.md | 220 ++++++++++++++++++ src/app/docs/monitoring/logs/page.md | 3 +- src/app/docs/page.md | 7 +- .../docs/providers/batch-operations/page.md | 10 +- src/app/docs/providers/crud/page.md | 6 + src/app/docs/proxy/cache-ttl/page.md | 4 + src/app/docs/reference/env-variables/page.md | 95 +++++++- src/app/docs/reference/provider-types/page.md | 10 +- .../docs/system/data-import-export/page.md | 6 + src/app/docs/system/langfuse/page.md | 152 ++++++++++++ src/app/docs/system/webhook/page.md | 20 +- .../docs/users/access-restrictions/page.md | 5 + src/app/docs/users/login-control/page.md | 6 + src/lib/navigation.ts | 1 + 14 files changed, 518 insertions(+), 27 deletions(-) create mode 100644 src/app/docs/system/langfuse/page.md diff --git a/src/app/docs/changelog/page.md b/src/app/docs/changelog/page.md index 8797e52..5d6ce3a 100644 --- a/src/app/docs/changelog/page.md +++ b/src/app/docs/changelog/page.md @@ -14,6 +14,226 @@ language: zh --- +## [v0.6.1](https://github.com/ding113/claude-code-hub/releases/tag/v0.6.1) - 2026-02-28 + +### 修复 + +- 修复 HTTP 部署时 CSRF 校验导致无法登录的问题,新增 `X-Forwarded-Host` 信任回退机制 (#846, #847) + +--- + +## [v0.6.0](https://github.com/ding113/claude-code-hub/releases/tag/v0.6.0) - 2026-02-28 + +{% callout type="warning" %} +**Breaking Changes:** +- v0.6 导出的数据库备份将不再兼容旧版本 +- 由于鉴权逻辑重构,更新到 v0.6 版本后,所有客户端登录态会失效 +- 由于更新涉及多个数据库迁移,如数据库体量大,建议在闲时更新 +{% /callout %} + +### 新增 + +- 支持 Langfuse 集成,企业级 LLM 可观测性,自动追踪所有代理请求的完整生命周期(Trace/Span),支持 Langfuse Cloud 和自托管实例 +- 新增 usage_ledger 计费账本系统,解耦日志与计费,支持导出不含决策日志的数据库,且不影响计费和限额 (#811) +- 支持决策链溯源,可在被复用请求的决策链中查看 Session 原始决策过程 (#810) +- 支持供应商定时启停,可为供应商配置 `activeTimeStart` / `activeTimeEnd` 时间窗口,实现按时间调度 (#844) +- 新增缓存率异常通知告警,当缓存命中率低于阈值时自动触发 Webhook 通知 (#834) +- 客户端限制功能重构,支持 `blockedClients` 黑名单和 Claude Code 子客户端自动检测 (#812) +- 渠道新增交换缓存 TTL 计费选项,适配供应商以 5m TTL 计费但实际提供 1h 缓存导致的计费不匹配 (#798) +- 新增 OpenAI Responses API 错误规则内置支持 +- 供应商使用量表格和价格筛选器新增模型供应商图标 (#827) + +### 优化 + +- 重构供应商批量操作,对齐供应商编辑 UI,支持所有字段的批量操作 (#806) +- 供应商编辑和删除操作支持撤销 (#806) +- 重构登录鉴权逻辑,增强安全性,使用 XOR 循环替代 timingSafeEqual 以兼容 Edge Runtime (#806) +- 引入 EndpointPolicy 替代硬编码的 count_tokens 检查,提升代理策略可扩展性 (#801) +- 优化 Fake 200 错误回显和错误码推断,持久化错误详情到 DB/Redis 并在仪表盘展示 (#790, #814) +- 客户端限制编辑器改用基于复选框的预设选择,替代 TagInput (#822) +- Dashboard 综合性能优化:懒加载用户使用量数据、防止无限轮询导致的内存泄漏、硬化游标解析和时间戳精度 (#808, #815, #818, #819) +- 供应商页面性能改进 (#789) +- 数据库备份路由通过 Docker Compose exec 执行 PG 工具 +- Key 查询使用 LATERAL JOIN 替代 DISTINCT ON 并添加复合部分索引,提升查询性能 + +### 修复 + +- 修复熔断器禁用后仍拦截供应商的问题 (#837) +- 修复首页统计图表在小高度下裁切的问题 (#838) +- 修复用户搜索时分页无法正常工作的问题 (#841) +- 修复 SQL 模板中 Date 对象未转 ISO 字符串导致的查询错误 (#821) +- 修复日志清理受影响行数统计和滚动 cron 日期问题 +- 修复大型分块响应中 reader.cancel() 可能导致死锁的问题 +- 修复 Claude Code 检测逻辑放宽至 4 信号系统以兼容 CLI 2.0.70 +- 修复 responses/compact 端点、熔断器缓存失效和客户端限制批量编辑问题 (#833) +- 修复 Ledger 回填时跳过已同步记录,防止启动时冗余全表扫描 +- 修复 SQL 时区括号和端点 ID 整数转换 bug + +### 其他 + +- 新增 usage_ledger 触发函数、回填服务和大量单元/集成测试 +- i18n 翻译更新:数据库大小和表计数翻译、审计白名单扩展 + +--- + +## v0.5.8 (2026-02-15) + +### 优化 + +- my-usage 页面配额卡片和统计摘要卡片 UX 改进 (#794) [@miraserver](https://github.com/miraserver) +- 日志页面虚拟化视图中无筛选条件时隐藏统计面板,提升渲染性能 + +### 修复 + +- 移除确定性 Session ID,防止跨会话冲突 (#793) +- 修复标准路径下 Host Header 未匹配实际请求目标的问题 +- 从 Gemini Vertex AI publishers 路径正确提取模型,确保计费准确 + +### 其他 + +- README 添加 SSSAiCode 推广信息 +- i18n 翻译文件更新 + +--- + +## v0.5.7 (2026-02-14) + +### 新增 + +- 新增 Billing Header 整流器,自动从系统提示中剥离 x-anthropic-billing-header,避免计费信息泄露 (#784) + +### 优化 + +- 配额/用户页面总成本查询改为批量执行,提升页面加载性能 + +### 修复 + +- 修复全时间范围总成本查询的日期过滤问题,确保统计数据准确 +- 修复多 Key 并发场景下用户并发 Session 上限可能被击穿的问题 (#776) [@tesgth032](https://github.com/tesgth032) +- 修复 AgentPool 清理逻辑,加固统计信息透传 +- 修复 billing 查询中 maxAgeDays 过大导致的日期下溢问题 + +--- + +## v0.5.6 (2026-02-12) + +### 新增 + +- 端点熔断器默认关闭,新增 `ENABLE_ENDPOINT_CIRCUIT_BREAKER` 环境变量控制开关,并完善 524 决策链审计记录 (#773) +- 配置表单新增 API Key 输入智能警告提示,检测常见误粘贴格式(如 Bearer 前缀、引号包裹、非 ASCII 字符等)(#768) +- 新增 InlineWarning 通用内联警告组件,用于表单字段的非阻塞提示 +- 新增配额租约输入警告提示,检测异常配置值 (#768) + +### 优化 + +- 供应商类型熔断器复用 `ENABLE_ENDPOINT_CIRCUIT_BREAKER` 开关,统一熔断器控制逻辑 +- 供应商链格式化器新增 `vendor_type_all_timeout` 和 `endpoint_pool_exhausted` 等决策原因的展示支持 +- 供应商概率显示优化,处理超出 0-1 范围的异常值并封顶 100% +- 系统设置表单增强,新增端点熔断器开关配置项和启动时自动清理残留熔断状态 + +### 修复 + +- 修复 Key 并发限制未继承用户并发上限的问题,Key 未设置时自动回退到用户级别限制 (#772) +- 修复供应商表单克隆时浅拷贝导致的数据污染问题,改用 `structuredClone` 深拷贝 (#767) +- 修复 Key 错误不应触发端点熔断器的问题,避免鉴权失败等非端点故障误触熔断 + +### 其他 + +- 新增大量单元测试覆盖:Key 并发继承、供应商表单深拷贝、端点熔断器隔离、供应商类型熔断器、并发会话限制、概率格式化、API Key 警告检测、配额租约警告等 +- 部署脚本新增 `ENABLE_ENDPOINT_CIRCUIT_BREAKER` 环境变量配置 + +--- + +## v0.5.5 (2026-02-11) + +### 新增 + +- Anthropic 供应商支持 Adaptive Thinking 覆写,可按供应商配置自适应思考模式和努力等级 (#758) +- 供应商支持按用户组设置独立优先级,实现更精细的负载均衡策略 (#701) [@NieiR](https://github.com/NieiR) +- 统一供应商-端点熔断可视化和通知机制,提升故障感知体验 (#755) +- 排行榜新增供应商平均成本指标和缓存命中模型下钻分析 (#753) +- API Key 与登录鉴权链路安全加固,引入 Vacuum Filter 快速负向过滤,降低数据库压力 (#734) [@tesgth032](https://github.com/tesgth032) +- 端点探测默认切换为 TCP 模式,改进熔断恢复交互体验 +- 支持为 Relay 供应商注入 Claude metadata.user_id 以启用上游缓存 (#729) [@ProgramCaiCai](https://github.com/ProgramCaiCai) + +### 优化 + +- Vacuum Filter has 热路径性能优化,降低 API Key 负向短路成本 (#757) [@tesgth032](https://github.com/tesgth032) +- 解耦 Adaptive Thinking 与 Thinking Budget 偏好设置,支持独立配置 + +### 修复 + +- 修复端点熔断器无法从 OPEN 状态恢复的问题 +- 修复请求卡死问题:AgentPool 驱逐操作改为非阻塞,防止级联超时 (#759) [@tesgth032](https://github.com/tesgth032) +- 修复上游非 200 响应未正确触发熔断和回退的问题 +- 修复上游非 OK 响应 body 挂起导致请求卡死的问题 (#751) [@tesgth032](https://github.com/tesgth032) +- 修复 SSE 结束后未识别假 200 错误的问题 (#735) [@tesgth032](https://github.com/tesgth032) +- 修复端点更新回归问题,关联 #742 (#746) +- 修复 provider_endpoints 查询缺少 anthropicAdaptiveThinking 字段的问题 +- 修复会话模型切换时旧供应商绑定未清除导致的路由错误 + +### 其他 + +- CI 全部 Claude Code GitHub Actions 切换至 claude-opus-4-6 模型 +- 新增大量单元测试覆盖:端点熔断恢复、AgentPool 驱逐、非 200 响应处理、Adaptive Thinking 覆写、按组优先级选择、Vacuum Filter、metadata 注入、模型切换绑定清理等 + +--- + +## v0.5.4 (2026-02-07) + +### 新增 + +- Gemini 供应商支持 Google Search 网络访问偏好设置,可按供应商配置启用/禁用/继承客户端设置 (#721) +- 供应商设置 UI 中展示 vendor 端点池信息,便于查看和管理端点分布 (#719) +- 日志页面成本列支持可切换显示/隐藏,改进类型安全性 (#715) [@lingyin](https://github.com/lingyin) + +### 优化 + +- 端点同步操作包裹在数据库事务中,防止并发竞态条件 (#730) +- SessionTracker 活跃会话 zsets 按环境 TTL 自动清理过期条目 (#718) +- 请求过滤器和敏感词热重载缓存失效机制优化 (#710) [@miraserver](https://github.com/miraserver) +- UI 货币显示遵循系统 currencyDisplay 设置 (#717) + +### 修复 + +- 修复标准路径供应商错误回退到旧版 provider url 的问题 +- 修复 /api/actions 认证会话透传问题,解决 getUsers 返回空数据 (#720) [@Longlone](https://github.com/Longlone) +- 修复 OpenAI chat completion 格式的 usage 提取逻辑 (#716) +- 修复 Thinking 签名整流器对 "cannot be modified" 错误的检测 +- 修复 auth session storage 导出和测试 mock 类型 + +### 其他 + +- 升级 jspdf 依赖 +- 新增大量单元测试覆盖:端点同步事务、会话追踪清理、Gemini Google Search 覆写、热重载单例、货币格式化等 + +--- + +## v0.5.3 (2026-02-03) + +### 新增 + +- 扩展只读密钥访问权限,支持更多 API 端点访问 (#704) [@AptS:1547](https://github.com/AptS1547) +- 支持 Zeabur 一键部署 (#679) [@h7ml](https://github.com/h7ml) +- Anthropic 供应商支持参数覆写功能,可自定义 API 请求参数 (#689) + +### 优化 + +- 重构代理架构,移除格式转换器并强制同格式路由,提升性能和稳定性 (#709) +- 优化 Thinking Budget 整流器,改进思考模式下的令牌预算管理 + +### 修复 + +- 修复 Gemini 供应商 buildProxyUrl 重复拼接版本前缀的问题 (#693) [@sunxyw](https://github.com/sunxyw) +- 修复 Gemini SSE 响应中 usageMetadata 提取逻辑,采用 last-wins 策略 (#691) [@sususu98](https://github.com/sususu98) + +### 其他 + +- 新增 Thinking Budget 整流器单元测试覆盖 +- 更新 i18n 翻译和系统配置 + +--- + ## [v0.5.2](https://github.com/ding113/claude-code-hub/releases/tag/v0.5.2) - 2026-01-29 ### 新增 diff --git a/src/app/docs/monitoring/logs/page.md b/src/app/docs/monitoring/logs/page.md index 9204207..48638fc 100644 --- a/src/app/docs/monitoring/logs/page.md +++ b/src/app/docs/monitoring/logs/page.md @@ -59,6 +59,7 @@ Claude Code Hub 的日志系统提供了完整的 API 请求追踪、审计和 | 性能指标 | `durationMs`, `ttfbMs` | 总耗时和首字节时间 | | 错误信息 | `errorMessage`, `errorStack`, `errorCause`, `statusCode` | 错误详情、堆栈、原因和 HTTP 状态码 | | 供应商决策 | `providerChain` | 供应商选择决策链(JSONB) | +| 决策链溯源 | origin chain | 被复用请求可查看 Session 原始决策过程(v0.6.0+) | | 拦截记录 | `blockedBy`, `blockedReason` | 被拦截的请求记录 | | 请求详情 | `messagesCount`, `userAgent` | 消息数量和客户端信息 | @@ -708,7 +709,7 @@ A: 检查搜索关键词长度(至少 2 个字符),并确保有相应权 A: 异步写入模式下,日志最多有 250ms 延迟。如果延迟更长,检查 `MESSAGE_REQUEST_ASYNC_FLUSH_INTERVAL_MS` 配置。 **Q: 如何追踪一个请求的完整生命周期?** -A: 使用 Session ID 筛选,按时间排序。查看 `requestSequence` 了解请求顺序,`providerChain` 了解供应商选择过程。 +A: 使用 Session ID 筛选,按时间排序。查看 `requestSequence` 了解请求顺序,`providerChain` 了解供应商选择过程。自 v0.6.0 起,被复用的请求还可以通过决策链溯源功能查看 Session 的原始决策过程。 ## 相关文档 diff --git a/src/app/docs/page.md b/src/app/docs/page.md index b0e9ecf..fb1e237 100644 --- a/src/app/docs/page.md +++ b/src/app/docs/page.md @@ -40,10 +40,6 @@ CCH 专为解决这些问题而生,提供**服务器部署、多租户、Sessi 同时接入 Claude、Codex、Gemini、OpenAI Compatible 等多种类型供应商,支持自定义模型重定向与 HTTP/HTTPS/SOCKS 代理配置。 -{% callout type="note" title="多供应商类型开关" %} -出于安全与兼容性考虑,非 Claude 类型供应商(如 `gemini` / `gemini-cli` / `openai-compatible`)默认需要启用环境变量 `ENABLE_MULTI_PROVIDER_TYPES=true` 才会在管理后台展示并允许配置。 -{% /callout %} - ### 限流与并发控制 多维度限制机制: @@ -58,8 +54,9 @@ Redis Lua 脚本确保原子性,Fail-Open 策略保障 Redis 不可用时服 - 仪表盘:调用量、成本、活跃 Session 一目了然 - 排行榜:按用户统计请求数、Token 与成本 -- 决策链记录:完整追踪每次请求的路由决策 +- 决策链记录:完整追踪每次请求的路由决策,支持决策链溯源(v0.6.0+) - 供应商健康状态:实时监控熔断器状态 +- Langfuse 集成:企业级 LLM 可观测性,自动追踪请求全生命周期(v0.6.0+) ### Session 管理 diff --git a/src/app/docs/providers/batch-operations/page.md b/src/app/docs/providers/batch-operations/page.md index 92d6bc7..5b2968c 100644 --- a/src/app/docs/providers/batch-operations/page.md +++ b/src/app/docs/providers/batch-operations/page.md @@ -14,6 +14,10 @@ nextjs: 批量操作仅对管理员开放。所有批量操作都有 500 个供应商的数量上限,防止误操作影响过多资源。 {% /callout %} +{% callout type="note" %} +自 v0.6.0 起,批量操作经过重构,对齐了供应商编辑 UI,支持所有字段的批量操作。同时,供应商编辑和删除操作支持撤销,在操作后有 5 秒的撤销窗口。 +{% /callout %} + --- ## 支持的批量操作 @@ -23,8 +27,8 @@ nextjs: {% table %} | 操作类型 | 功能说明 | 使用场景 | |---------|---------|---------| -| 批量更新 | 同时修改多个供应商的字段值 | 统一调整优先级、权重、启用状态等 | -| 批量删除 | 同时删除多个供应商 | 清理废弃或测试用的供应商 | +| 批量更新 | 同时修改多个供应商的字段值(v0.6.0 起支持所有可编辑字段) | 统一调整优先级、权重、启用状态等 | +| 批量删除 | 同时删除多个供应商(支持 5 秒内撤销) | 清理废弃或测试用的供应商 | | 批量重置熔断器 | 同时重置多个供应商的熔断状态 | 故障恢复后批量恢复服务 | {% /table %} @@ -151,7 +155,7 @@ nextjs: 5. 点击「确认删除」执行操作 {% callout type="warning" %} -批量删除操作不可逆。虽然数据被软删除保留,但供应商配置无法通过界面恢复。请谨慎操作。 +批量删除操作使用软删除机制。自 v0.6.0 起,删除操作后会有 5 秒的撤销窗口,可以在误操作时快速恢复。虽然数据被软删除保留,但超过撤销窗口后供应商配置无法通过界面恢复。请谨慎操作。 {% /callout %} ### 删除后的影响 diff --git a/src/app/docs/providers/crud/page.md b/src/app/docs/providers/crud/page.md index 3c8e776..21aa22b 100644 --- a/src/app/docs/providers/crud/page.md +++ b/src/app/docs/providers/crud/page.md @@ -36,8 +36,14 @@ nextjs: | `priority` | 优先级(数字越小优先级越高)| 0, 1, 2... | | `cost_multiplier` | 成本倍数 | 1.0, 1.5, 0.8 等 | | `group_tag` | 分组标签 | "production", "backup" | +| `active_time_start` | 定时启动时间(HH:mm 格式)| "08:00"(v0.6.0+) | +| `active_time_end` | 定时停止时间(HH:mm 格式)| "22:00"(v0.6.0+) | {% /table %} +{% callout type="note" %} +**定时启停功能**(v0.6.0+):设置 `active_time_start` 和 `active_time_end` 后,供应商仅在指定时间窗口内参与请求调度。两个字段都为空时,供应商始终活跃。该功能可用于按时间调度供应商,例如在低价时段使用特定供应商。 +{% /callout %} + ### 供应商类型 系统支持 6 种供应商类型: diff --git a/src/app/docs/proxy/cache-ttl/page.md b/src/app/docs/proxy/cache-ttl/page.md index 00d3294..6aee4a6 100644 --- a/src/app/docs/proxy/cache-ttl/page.md +++ b/src/app/docs/proxy/cache-ttl/page.md @@ -599,3 +599,7 @@ Claude Code Hub 的 Cache TTL 控制系统通过多层级缓存架构实现了 3. **Fail-Open 设计**:所有组件在 Redis 不可用时自动降级,保证服务可用性 4. **灵活的 TTL 配置**:关键参数可通过环境变量调整,适应不同业务场景 5. **内存安全**:所有 Key 都有 TTL,Lua 脚本设置兜底过期时间,防止内存泄漏 + +{% callout type="note" %} +**交换缓存 TTL 计费选项**(v0.6.0+):针对部分供应商以 5 分钟 TTL 计费但实际提供 1 小时缓存的场景,v0.6.0 新增了交换缓存 TTL 计费选项。该选项允许在计费时使用供应商的实际 TTL 而非客户端请求的 TTL,解决因 TTL 不匹配导致的计费偏差问题。可在供应商的渠道设置中配置。 +{% /callout %} diff --git a/src/app/docs/reference/env-variables/page.md b/src/app/docs/reference/env-variables/page.md index 10bf4b6..b5642d8 100644 --- a/src/app/docs/reference/env-variables/page.md +++ b/src/app/docs/reference/env-variables/page.md @@ -18,6 +18,7 @@ Claude Code Hub 使用环境变量进行配置,支持以下几类配置: - **Redis 配置**:缓存、限流和 Session 管理 - **安全配置**:Cookie 策略和认证设置 - **熔断器配置**:故障保护和智能探测 +- **Langfuse 可观测性**:LLM 请求追踪和分析 - **高级配置**:调试、超时和实验性功能 {% callout type="warning" title="布尔值配置注意事项" %} @@ -464,9 +465,7 @@ APP_URL= --- -## 高级配置 - -### ENABLE_MULTI_PROVIDER_TYPES +### ENABLE_ENDPOINT_CIRCUIT_BREAKER | 属性 | 值 | |------|-----| @@ -474,20 +473,86 @@ APP_URL= | **默认值** | `false` | | **必需** | 否 | -是否启用多供应商类型支持(实验性功能)。 +控制是否启用端点级别的熔断器。 -| 值 | 支持的供应商类型 | +| 值 | 行为 | |------|------| -| `false` | 仅支持 `claude`、`claude-auth`、`codex` | -| `true` | 额外支持 `gemini`、`gemini-cli`、`openai-compatible` | +| `false` | 禁用端点熔断器,所有启用的端点均可使用 | +| `true` | 启用端点熔断器,连续失败的端点会被临时屏蔽(默认 3 次失败后熔断 5 分钟) | -{% callout type="warning" title="实验性功能" %} -Gemini CLI、OpenAI Compatible 等类型功能仍在开发中,可能存在不稳定性。 -生产环境暂不建议启用。 +{% callout type="note" %} +此开关同时控制供应商类型级别和端点级别的熔断器。启用后,供应商类型和端点的熔断器都会生效。 {% /callout %} --- +## Langfuse 可观测性 + +以下变量控制 Langfuse LLM 可观测性集成,自 v0.6.0 起可用。 + +### LANGFUSE_PUBLIC_KEY + +| 属性 | 值 | +|------|-----| +| **类型** | `string` | +| **默认值** | 无 | +| **必需** | 否(设置后自动启用 Langfuse) | + +Langfuse 项目公钥,以 `pk-lf-` 开头。与 `LANGFUSE_SECRET_KEY` 同时配置后自动启用追踪。 + +--- + +### LANGFUSE_SECRET_KEY + +| 属性 | 值 | +|------|-----| +| **类型** | `string` | +| **默认值** | 无 | +| **必需** | 否(设置后自动启用 Langfuse) | + +Langfuse 项目密钥,以 `sk-lf-` 开头。 + +--- + +### LANGFUSE_BASE_URL + +| 属性 | 值 | +|------|-----| +| **类型** | `string` (URL 格式) | +| **默认值** | `https://cloud.langfuse.com` | +| **必需** | 否 | + +Langfuse 服务器地址。使用 Langfuse Cloud 时无需修改,自托管实例需指向你的服务地址。 + +--- + +### LANGFUSE_SAMPLE_RATE + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `1.0` | +| **范围** | `0.0` - `1.0` | +| **必需** | 否 | + +追踪采样率。`0.0` 表示不采样,`1.0` 表示全量采样。高并发场景建议降低采样率以控制 Langfuse 存储成本。 + +--- + +### LANGFUSE_DEBUG + +| 属性 | 值 | +|------|-----| +| **类型** | `boolean` | +| **默认值** | `false` | +| **必需** | 否 | + +是否启用 Langfuse SDK 调试日志。排查 Langfuse 集成问题时可临时开启。 + +--- + +## 高级配置 + ### LOG_LEVEL | 属性 | 值 | @@ -567,8 +632,8 @@ TZ=UTC # 协调世界时 | 变量 | 默认值 | 说明 | |------|--------|------| -| `FETCH_BODY_TIMEOUT` | `120000`(120 秒) | 请求/响应体传输超时 | -| `FETCH_HEADERS_TIMEOUT` | `60000`(60 秒) | 响应头接收超时 | +| `FETCH_BODY_TIMEOUT` | `600000`(600 秒) | 请求/响应体传输超时 | +| `FETCH_HEADERS_TIMEOUT` | `600000`(600 秒) | 响应头接收超时 | | `FETCH_CONNECT_TIMEOUT` | `30000`(30 秒) | TCP 连接建立超时 | 这些配置适用于系统向上游供应商发起的所有请求。 @@ -633,6 +698,12 @@ PROBE_TIMEOUT_MS=5000 # 日志 LOG_LEVEL=info TZ=Asia/Shanghai + +# Langfuse 可观测性(可选) +# LANGFUSE_PUBLIC_KEY=pk-lf-your-public-key +# LANGFUSE_SECRET_KEY=sk-lf-your-secret-key +# LANGFUSE_BASE_URL=https://cloud.langfuse.com +# LANGFUSE_SAMPLE_RATE=1.0 ``` ### 内网部署(HTTP 访问) diff --git a/src/app/docs/reference/provider-types/page.md b/src/app/docs/reference/provider-types/page.md index 8b1c6b8..ef4a62f 100644 --- a/src/app/docs/reference/provider-types/page.md +++ b/src/app/docs/reference/provider-types/page.md @@ -13,7 +13,7 @@ language: zh Claude Code Hub 支持多种供应商类型,每种类型针对不同的 AI 服务商和 API 协议进行了专门优化。本文档详细介绍各供应商类型的特点、适用场景和配置方法。 {% callout type="note" title="版本说明" %} -供应商类型功能在所有版本中可用。部分非 Claude 类型(如 Gemini、OpenAI Compatible)需要在环境变量中启用 `ENABLE_MULTI_PROVIDER_TYPES=true` 才能使用。 +供应商类型功能在所有版本中可用。所有类型(包括 Gemini、OpenAI Compatible)无需额外配置即可直接使用。 {% /callout %} --- @@ -205,7 +205,7 @@ API Key: sk-xxx `gemini` 类型用于连接 Google Gemini 官方 API。支持 Gemini 1.5、2.0 等模型系列。 {% callout type="note" title="实验性功能" %} -Gemini 类型是实验性功能,需要启用 `ENABLE_MULTI_PROVIDER_TYPES=true` 环境变量。 +Gemini 类型是实验性功能,可能存在不稳定性。 {% /callout %} ### 适用场景 @@ -272,7 +272,7 @@ Gemini 类型使用**直接透传**模式,不进行格式转换。请求体直 `gemini-cli` 类型专为 Gemini CLI 工具设计,使用 Google 内部 API 端点和特殊的请求封装格式。 {% callout type="note" title="实验性功能" %} -Gemini CLI 类型是实验性功能,需要启用 `ENABLE_MULTI_PROVIDER_TYPES=true` 环境变量。 +Gemini CLI 类型是实验性功能,可能存在不稳定性。 {% /callout %} ### 与 gemini 类型的区别 @@ -321,7 +321,7 @@ Gemini CLI 类型会自动添加: `openai-compatible` 类型用于连接任何遵循 OpenAI Chat Completions API 格式的第三方服务。这包括许多本地模型服务和 API 聚合服务。 {% callout type="note" title="实验性功能" %} -OpenAI Compatible 类型是实验性功能,需要启用 `ENABLE_MULTI_PROVIDER_TYPES=true` 环境变量。 +OpenAI Compatible 类型是实验性功能,可能存在不稳定性。 {% /callout %} ### 适用场景 @@ -494,6 +494,6 @@ Instructions 策略: auto ## 相关文档 - [供应商管理](/docs/guide/settings-providers) - 供应商管理页面操作指南 -- [环境变量配置](/docs/reference/env-variables) - 配置 `ENABLE_MULTI_PROVIDER_TYPES` 等选项 +- [环境变量配置](/docs/reference/env-variables) - 配置环境变量选项 - [智能路由](/docs/reference/intelligent-routing) - 了解供应商选择机制 - [熔断器机制](/docs/reference/circuit-breaker) - 了解故障保护机制 diff --git a/src/app/docs/system/data-import-export/page.md b/src/app/docs/system/data-import-export/page.md index 018abb9..b7e9179 100644 --- a/src/app/docs/system/data-import-export/page.md +++ b/src/app/docs/system/data-import-export/page.md @@ -30,6 +30,7 @@ Claude Code Hub 提供完整的数据导入导出功能,支持数据库备份 | 参数 | 类型 | 说明 | |-----|------|------| | `excludeLogs` | boolean | 是否排除请求日志表数据 | +| `ledgerOnly` | boolean | 仅导出 usage_ledger 计费账本数据(v0.6.0+,不含决策日志,体积更小) | **文件命名规则**: ``` @@ -45,8 +46,13 @@ backup_2025-01-29T10-30-00_no-logs.dump // 排除日志时 - **流式响应**:支持大型数据库的流式传输 - **日志排除**:可选择排除 `message_request` 表数据,保留表结构 +- **计费账本导出**(v0.6.0+):使用 `ledgerOnly` 参数仅导出 `usage_ledger` 计费数据,不包含决策日志,备份文件更小且不影响计费和限额功能 - **分布式锁**:Redis 分布式锁防止并发操作,锁超时 5 分钟 +{% callout type="warning" %} +v0.6.0 引入了 `usage_ledger` 计费账本系统,将计费数据从日志中解耦。使用 v0.6.0+ 导出的数据库备份将不再兼容旧版本。 +{% /callout %} + ## 数据库备份导入 ### 导入接口 diff --git a/src/app/docs/system/langfuse/page.md b/src/app/docs/system/langfuse/page.md new file mode 100644 index 0000000..05f4fff --- /dev/null +++ b/src/app/docs/system/langfuse/page.md @@ -0,0 +1,152 @@ +--- +title: Langfuse 集成 +nextjs: + metadata: + title: Langfuse 集成 + description: Claude Code Hub Langfuse LLM 可观测性集成文档 +--- + +# Langfuse 集成 + +Langfuse 集成为 Claude Code Hub 提供企业级 LLM 可观测性能力,自动追踪所有代理请求的完整生命周期。通过 Trace 和 Span 机制,你可以在 Langfuse 平台上查看每个请求的详细执行过程、模型调用、延迟分布和错误信息。 + +{% callout type="note" %} +Langfuse 集成自 v0.6.0 起可用。配置 `LANGFUSE_PUBLIC_KEY` 和 `LANGFUSE_SECRET_KEY` 后自动启用,无需额外代码修改。 +{% /callout %} + +--- + +## 功能概述 + +Langfuse 集成提供以下核心能力: + +- **端到端请求追踪**:自动为每个代理请求创建 Trace,记录完整的请求生命周期 +- **Guard Pipeline 决策记录**:每个 Guard 阶段(认证、限流、路由等)作为独立 Span 记录 +- **模型调用追踪**:记录上游模型调用的输入、输出、Token 使用量和延迟 +- **可配置采样率**:通过 `LANGFUSE_SAMPLE_RATE` 控制追踪数据量,平衡可观测性和成本 +- **支持自托管**:同时支持 Langfuse Cloud 和自托管 Langfuse 实例 + +--- + +## 配置方式 + +### 环境变量 + +在 `.env` 文件或部署环境中设置以下变量: + +```bash +# 必需:Langfuse 项目密钥(设置后自动启用追踪) +LANGFUSE_PUBLIC_KEY=pk-lf-xxxxxxxx +LANGFUSE_SECRET_KEY=sk-lf-xxxxxxxx + +# 可选:Langfuse 服务器地址(默认使用 Langfuse Cloud) +LANGFUSE_BASE_URL=https://cloud.langfuse.com + +# 可选:追踪采样率(0.0-1.0,默认 1.0 即 100% 追踪) +LANGFUSE_SAMPLE_RATE=1.0 + +# 可选:启用调试日志(默认 false) +LANGFUSE_DEBUG=false +``` + +| 变量 | 类型 | 默认值 | 说明 | +|------|------|--------|------| +| `LANGFUSE_PUBLIC_KEY` | `string` | 无 | Langfuse 项目公钥,以 `pk-lf-` 开头 | +| `LANGFUSE_SECRET_KEY` | `string` | 无 | Langfuse 项目密钥,以 `sk-lf-` 开头 | +| `LANGFUSE_BASE_URL` | `string` | `https://cloud.langfuse.com` | Langfuse 服务地址 | +| `LANGFUSE_SAMPLE_RATE` | `number` | `1.0` | 采样率,0.0 表示不采样,1.0 表示全量采样 | +| `LANGFUSE_DEBUG` | `boolean` | `false` | 是否输出 Langfuse SDK 调试日志 | + +{% callout type="warning" %} +`LANGFUSE_PUBLIC_KEY` 和 `LANGFUSE_SECRET_KEY` 必须同时配置才能启用 Langfuse 集成。缺少任一密钥时,集成不会启动。 +{% /callout %} + +--- + +## 工作原理 + +### 初始化 + +系统在 Next.js 服务启动时通过 `instrumentation.ts` 初始化 Langfuse: + +1. 检查 `LANGFUSE_PUBLIC_KEY` 和 `LANGFUSE_SECRET_KEY` 是否已配置 +2. 如果已配置,初始化 Langfuse SDK 并注册 Span 处理器 +3. 配置采样率和调试模式 + +### 请求追踪流程 + +``` +客户端请求 + ↓ +创建 Langfuse Trace(关联 request-id、user-id、model 等元数据) + ↓ +Guard Pipeline 执行(每个 Guard 阶段记录为独立 Span) + ↓ +上游模型调用(记录 input、output、usage、latency) + ↓ +响应处理完成 + ↓ +异步上报 Trace 数据到 Langfuse +``` + +### 优雅关闭 + +当服务收到 `SIGTERM` 或 `SIGINT` 信号时,系统会刷新所有待发送的 Trace 数据,确保在应用关闭前所有追踪信息都已上报到 Langfuse。 + +--- + +## 使用方式 + +### 1. 获取 Langfuse 密钥 + +**Langfuse Cloud**: +1. 访问 [cloud.langfuse.com](https://cloud.langfuse.com) 注册账号 +2. 创建项目 +3. 在项目设置中获取 Public Key 和 Secret Key + +**自托管 Langfuse**: +1. 参照 [Langfuse 文档](https://langfuse.com/docs/deployment/self-host) 部署实例 +2. 创建项目并获取密钥 +3. 将 `LANGFUSE_BASE_URL` 设置为你的自托管地址 + +### 2. 配置环境变量 + +将获取到的密钥添加到 Claude Code Hub 的环境配置中: + +```bash +LANGFUSE_PUBLIC_KEY=pk-lf-your-public-key +LANGFUSE_SECRET_KEY=sk-lf-your-secret-key +``` + +### 3. 重启服务 + +配置完成后重启 Claude Code Hub 服务,系统会自动开始上报追踪数据。 + +### 4. 查看追踪数据 + +在 Langfuse 平台中,你可以: + +- **Traces 列表**:查看所有代理请求的追踪记录 +- **Trace 详情**:查看单个请求的完整执行过程和各阶段耗时 +- **模型分析**:分析不同模型的调用频率、延迟和 Token 消耗 +- **错误追踪**:快速定位失败请求的错误原因 +- **用户分析**:按用户维度查看使用模式 + +--- + +## 采样率配置建议 + +| 场景 | 建议采样率 | 说明 | +|------|-----------|------| +| 开发调试 | `1.0` | 全量采样,方便调试 | +| 小规模生产 | `1.0` | 请求量不大时建议全量采样 | +| 中等规模 | `0.1` - `0.5` | 平衡可观测性和 Langfuse 存储成本 | +| 大规模生产 | `0.01` - `0.1` | 降低采样率以控制成本 | + +--- + +## 相关文档 + +- [环境变量参考](/docs/reference/env-variables) - 完整的环境变量列表 +- [系统配置](/docs/system/config) - 系统配置管理 +- [使用日志](/docs/monitoring/logs) - 日志查询与筛选 diff --git a/src/app/docs/system/webhook/page.md b/src/app/docs/system/webhook/page.md index c3763b7..6a86a6e 100644 --- a/src/app/docs/system/webhook/page.md +++ b/src/app/docs/system/webhook/page.md @@ -24,7 +24,7 @@ Webhook 通知系统让你能够及时接收 Claude Code Hub 的关键事件通 ## 通知事件类型 -系统支持三种通知事件,分别对应不同的业务场景。 +系统支持四种通知事件,分别对应不同的业务场景。 ### 熔断器告警 @@ -81,6 +81,24 @@ Webhook 通知系统让你能够及时接收 Claude Code Hub 的关键事件通 - 每个用户的消费金额、请求次数、Token 使用量 - 总请求数和总消费金额 +### 缓存率异常告警 + +当缓存命中率低于预设阈值时,系统自动触发告警通知。此功能自 v0.6.0 起可用。 + +**触发条件**: +- 缓存命中率低于配置的阈值(可在系统设置中配置) + +**消息内容**: +- 当前缓存命中率 +- 告警阈值 +- 统计时间窗口 +- 影响的供应商/模型信息 + +**使用场景**: +- 监控缓存是否正常工作 +- 及时发现缓存失效或配置异常 +- 识别可能导致成本上升的缓存问题 + ## 配置模式 Webhook 通知系统支持两种配置模式,以适应不同的使用场景。 diff --git a/src/app/docs/users/access-restrictions/page.md b/src/app/docs/users/access-restrictions/page.md index 0b8b319..0e12b95 100644 --- a/src/app/docs/users/access-restrictions/page.md +++ b/src/app/docs/users/access-restrictions/page.md @@ -101,11 +101,16 @@ export const USER_FIELD_PERMISSIONS = { 客户端防护层限制哪些 CLI/IDE 客户端可以访问服务。这对于控制组织内使用的工具 和确保合规性非常有用。 +{% callout type="note" %} +v0.6.0 对客户端限制功能进行了重构,新增 `blockedClients` 黑名单机制和 Claude Code 子客户端自动检测。检测逻辑放宽至 4 信号系统以兼容 Claude Code CLI 2.0.70+。此外,客户端限制现在也可以在供应商级别进行配置。 +{% /callout %} + ### 数据库字段 ```typescript { allowedClients: string[], // 允许的客户端模式列表 + blockedClients: string[], // 拒绝的客户端模式列表(v0.6.0+) } ``` diff --git a/src/app/docs/users/login-control/page.md b/src/app/docs/users/login-control/page.md index 960c2ad..aa17558 100644 --- a/src/app/docs/users/login-control/page.md +++ b/src/app/docs/users/login-control/page.md @@ -21,6 +21,12 @@ Web UI 登录控制的核心设计目标: - **管理员令牌绕过**:基于环境变量的管理员令牌提供无需数据库依赖的紧急访问 {% /callout %} +{% callout type="warning" %} +**v0.6.0 Breaking Change**:v0.6.0 对登录鉴权逻辑进行了重构,增强了安全性(使用 XOR 循环替代 timingSafeEqual 以兼容 Edge Runtime)。更新到 v0.6.0 后,所有客户端的登录态会失效,需要重新登录。 + +v0.6.1 修复了 HTTP 部署时 CSRF 校验导致无法登录的问题,如果你使用 HTTP(非 HTTPS)部署,请确保至少更新到 v0.6.1。 +{% /callout %} + ## 登录流程概览 登录过程遵循以下顺序: diff --git a/src/lib/navigation.ts b/src/lib/navigation.ts index a296e9a..23ffcfc 100644 --- a/src/lib/navigation.ts +++ b/src/lib/navigation.ts @@ -103,6 +103,7 @@ export const navigation = [ { title: 'Webhook 通知', href: '/docs/system/webhook' }, { title: '客户端版本检查', href: '/docs/system/client-version' }, { title: '数据导入导出', href: '/docs/system/data-import-export' }, + { title: 'Langfuse 集成', href: '/docs/system/langfuse' }, { title: '自动清理', href: '/docs/system/auto-cleanup' }, ], }, From cb9d195d8e44279bdf4262cbe2b1a9b29f901f28 Mon Sep 17 00:00:00 2001 From: Claude Code Hub Docs Bot Date: Sat, 28 Feb 2026 21:36:15 +0800 Subject: [PATCH 2/4] =?UTF-8?q?docs:=20=E8=A1=A5=E5=85=85=20v0.4.2-v0.6.1?= =?UTF-8?q?=20=E7=BC=BA=E5=A4=B1=E7=9A=84=E5=8A=9F=E8=83=BD=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit reference/provider-fields/page.md: - 新增 Anthropic 参数覆写章节(anthropicMaxTokensPreference、anthropicThinkingBudgetPreference、anthropicAdaptiveThinking) - 新增 Gemini Google Search 偏好章节(geminiGoogleSearchPreference) - 新增供应商按组优先级(groupPriorities) - 新增定时启停配置(activeTimeStart/activeTimeEnd) - 新增客户端限制配置(allowedClients/blockedClients) - 新增交换缓存 TTL 计费(swapCacheTtlBilling) reference/env-variables/page.md: - 新增 API Key 安全配置节(ENABLE_API_KEY_VACUUM_FILTER、ENABLE_API_KEY_REDIS_CACHE、API_KEY_AUTH_CACHE_TTL_SECONDS) - 新增端点探测配置节(ENDPOINT_PROBE_*) - 新增高级配置变量(ENABLE_PROVIDER_CACHE、MESSAGE_REQUEST_WRITE_MODE、DB_POOL_MAX、MAX_RETRY_ATTEMPTS_DEFAULT) - 新增 STORE_SESSION_RESPONSE_BODY 变量 - 修正 STORE_SESSION_MESSAGES 描述(v0.5.1 行为变更:控制脱敏而非存储开关) - 更新概述和生产配置示例 --- src/app/docs/reference/env-variables/page.md | 202 +++++++++++++++++- .../docs/reference/provider-fields/page.md | 192 ++++++++++++++++- 2 files changed, 389 insertions(+), 5 deletions(-) diff --git a/src/app/docs/reference/env-variables/page.md b/src/app/docs/reference/env-variables/page.md index b5642d8..db3d825 100644 --- a/src/app/docs/reference/env-variables/page.md +++ b/src/app/docs/reference/env-variables/page.md @@ -17,9 +17,11 @@ Claude Code Hub 使用环境变量进行配置,支持以下几类配置: - **数据库配置**:PostgreSQL 连接和迁移设置 - **Redis 配置**:缓存、限流和 Session 管理 - **安全配置**:Cookie 策略和认证设置 +- **API Key 安全配置**:Vacuum Filter 和鉴权缓存 - **熔断器配置**:故障保护和智能探测 +- **端点探测配置**:端点健康检查和动态间隔 - **Langfuse 可观测性**:LLM 请求追踪和分析 -- **高级配置**:调试、超时和实验性功能 +- **高级配置**:调试、性能、超时和实验性功能 {% callout type="warning" title="布尔值配置注意事项" %} 所有布尔类型的环境变量请直接使用 `true` 或 `false`(或 `1`/`0`),**不要加引号**。 @@ -261,11 +263,14 @@ Session 过期时间,控制 Session 与供应商的绑定关系缓存时长。 | **默认值** | `false` | | **必需** | 否 | -是否存储请求 messages 到 Redis(用于实时监控页面查看对话详情)。 +会话消息存储模式。控制请求/响应中 message 内容的存储方式(v0.5.1 行为变更)。 + +- **`false`(默认)**:存储请求/响应体但对 message 内容脱敏,显示为 `[REDACTED]` +- **`true`**:原样存储 message 内容 {% callout type="warning" title="资源和隐私警告" %} 启用此选项会: -- **增加 Redis 内存使用**:每个请求的完整消息内容都会被存储 +- **增加 Redis/DB 存储空间**:每个请求的完整消息内容都会被存储 - **可能包含敏感信息**:用户的代码和对话内容会被缓存 建议仅在调试或需要详细监控时临时启用。 @@ -273,6 +278,25 @@ Session 过期时间,控制 Session 与供应商的绑定关系缓存时长。 --- +### STORE_SESSION_RESPONSE_BODY + +| 属性 | 值 | +|------|-----| +| **类型** | `boolean` | +| **默认值** | `true` | +| **必需** | 否 | + +是否在 Redis 中存储会话响应体(SSE/JSON)。用于调试和问题定位。 + +- **`true`(默认)**:存储响应体到 Redis 临时缓存 +- **`false`**:不存储响应体 + +{% callout type="note" %} +此开关不影响内部统计读取响应体(tokens/费用统计、SSE 假 200 检测仍会正常进行),仅影响后续通过管理面板查看 response body。 +{% /callout %} + +--- + ### SHORT_CONTEXT_THRESHOLD | 属性 | 值 | @@ -395,6 +419,51 @@ APP_URL= --- +## API Key 安全配置 + +### ENABLE_API_KEY_VACUUM_FILTER + +| 属性 | 值 | +|------|-----| +| **类型** | `boolean` | +| **默认值** | `true` | +| **必需** | 否 | + +启用 API Key 真空过滤器(Vacuum Filter),在访问数据库前对无效 API Key 进行负向短路,降低数据库压力、抵御暴力破解。 + +| 值 | 行为 | +|------|------| +| `true` | 启用过滤器,无效 Key 在内存中即被拦截 | +| `false` | 禁用过滤器,所有 Key 查询直接走数据库 | + +--- + +### ENABLE_API_KEY_REDIS_CACHE + +| 属性 | 值 | +|------|-----| +| **类型** | `boolean` | +| **默认值** | `true` | +| **必需** | 否 | + +是否启用 API Key Redis 缓存。需要 `ENABLE_RATE_LIMIT=true` 且配置 `REDIS_URL` 才会生效;否则自动回落到数据库查询。 + +--- + +### API_KEY_AUTH_CACHE_TTL_SECONDS + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `60` | +| **单位** | 秒 | +| **范围** | 最大 3600 | +| **必需** | 否 | + +API Key 鉴权缓存 TTL。缓存链路为 Vacuum Filter -> Redis -> DB。 + +--- + ## 熔断器配置 ### ENABLE_CIRCUIT_BREAKER_ON_NETWORK_ERRORS @@ -486,6 +555,77 @@ APP_URL= --- +## 端点探测配置 + +端点探测始终启用,定期检查所有启用的端点并刷新端点选择排名。 + +### ENDPOINT_PROBE_INTERVAL_MS + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `60000`(60 秒) | +| **单位** | 毫秒 | +| **必需** | 否 | + +端点探测基础间隔。系统使用动态间隔规则: +1. **超时覆盖**(10 秒):端点上次探测超时且未恢复时 +2. **单端点供应商**(10 分钟):供应商仅有 1 个启用端点时 +3. **基础间隔**:其他端点使用此值 + +--- + +### ENDPOINT_PROBE_TIMEOUT_MS + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `5000`(5 秒) | +| **单位** | 毫秒 | +| **必需** | 否 | + +单次端点探测超时时间。 + +--- + +### ENDPOINT_PROBE_METHOD + +| 属性 | 值 | +|------|-----| +| **类型** | `string` | +| **默认值** | `TCP` | +| **可选值** | `TCP` / `HEAD` / `GET` | +| **必需** | 否 | + +端点探测方式。`TCP` 模式(默认)仅检测连接,不发送 HTTP 请求,不产生访问日志。 + +--- + +### ENDPOINT_PROBE_CONCURRENCY + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `10` | +| **必需** | 否 | + +端点探测并发数。 + +--- + +### ENDPOINT_PROBE_LOG_RETENTION_DAYS + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `1` | +| **单位** | 天 | +| **必需** | 否 | + +探测日志保留天数。自动清理任务每 24 小时运行,删除过期记录。 + +--- + ## Langfuse 可观测性 以下变量控制 Langfuse LLM 可观测性集成,自 v0.6.0 起可用。 @@ -553,6 +693,56 @@ Langfuse 服务器地址。使用 Langfuse Cloud 时无需修改,自托管实 ## 高级配置 +### ENABLE_PROVIDER_CACHE + +| 属性 | 值 | +|------|-----| +| **类型** | `boolean` | +| **默认值** | `true` | +| **必需** | 否 | + +启用供应商进程级缓存(30s TTL + Redis Pub/Sub 跨实例即时失效),提升供应商查询性能。禁用后每次请求直接查询数据库。 + +--- + +### MESSAGE_REQUEST_WRITE_MODE + +| 属性 | 值 | +|------|-----| +| **类型** | `string` | +| **默认值** | `async` | +| **可选值** | `async` / `sync` | +| **必需** | 否 | + +请求日志(message_request)写入模式。`async` 为异步批量写入(降低 DB 写放大和连接占用),`sync` 为同步写入(兼容旧行为,但高并发下会增加请求尾部阻塞)。 + +--- + +### DB_POOL_MAX + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `20`(生产),`10`(开发) | +| **必需** | 否 | + +PostgreSQL 每个应用进程的连接池上限。K8s 多副本部署时需按副本数分摊。 + +--- + +### MAX_RETRY_ATTEMPTS_DEFAULT + +| 属性 | 值 | +|------|-----| +| **类型** | `number` | +| **默认值** | `2` | +| **范围** | 1-10 | +| **必需** | 否 | + +单供应商最大尝试次数(含首次调用)。 + +--- + ### LOG_LEVEL | 属性 | 值 | @@ -694,6 +884,12 @@ ENABLE_CIRCUIT_BREAKER_ON_NETWORK_ERRORS=false ENABLE_SMART_PROBING=true PROBE_INTERVAL_MS=30000 PROBE_TIMEOUT_MS=5000 +ENABLE_ENDPOINT_CIRCUIT_BREAKER=false + +# API Key 安全 +ENABLE_API_KEY_VACUUM_FILTER=true +ENABLE_API_KEY_REDIS_CACHE=true +API_KEY_AUTH_CACHE_TTL_SECONDS=60 # 日志 LOG_LEVEL=info diff --git a/src/app/docs/reference/provider-fields/page.md b/src/app/docs/reference/provider-fields/page.md index ec9b496..c7d1fe6 100644 --- a/src/app/docs/reference/provider-fields/page.md +++ b/src/app/docs/reference/provider-fields/page.md @@ -25,12 +25,12 @@ language: zh | 分类 | 说明 | 关键字段 | | --- | --- | --- | | **基础字段** | 供应商的标识和连接信息 | id, name, url, key | -| **调度字段** | 控制请求路由和负载均衡 | weight, priority, costMultiplier, groupTag | +| **调度字段** | 控制请求路由和负载均衡 | weight, priority, groupPriorities, costMultiplier, groupTag | | **限制字段** | 并发和成本限制 | limitConcurrentSessions, limit5hUsd, limitDailyUsd | | **超时配置** | 请求超时控制 | firstByteTimeoutStreamingMs, streamingIdleTimeoutMs | | **代理配置** | HTTP/SOCKS 代理设置 | proxyUrl, proxyFallbackToDirect | | **模型配置** | 模型重定向、白名单与调度池 | modelRedirects, allowedModels, joinClaudePool | -| **特性配置** | 供应商特定功能 | codexReasoningEffortPreference, codexTextVerbosityPreference, mcpPassthroughType | +| **特性配置** | 供应商特定功能 | codexReasoningEffortPreference, anthropicAdaptiveThinking, geminiGoogleSearchPreference 等 | | **上下文窗口配置** | 1M 上下文窗口控制 | context1mPreference | | **熔断器配置** | 故障隔离和恢复 | circuitBreakerFailureThreshold 等 | | **元数据字段** | 时间戳和软删除 | createdAt, updatedAt, deletedAt | @@ -96,6 +96,7 @@ API Key 在数据库中以明文存储。生产环境请确保数据库访问受 | --- | --- | --- | --- | --- | | `weight` | integer | `1` | 1-100 | 权重,同优先级内按权重比例分配流量 | | `priority` | integer | `0` | 0-2147483647 | 优先级,数值越小越优先被选择 | +| `groupPriorities` | JSON object | null | - | 按用户组设置独立优先级(v0.5.5+) | | `costMultiplier` | decimal | `1.0` | >= 0 | 成本系数,用于调整该供应商的成本计算 | | `groupTag` | string | null | 最大 50 字符 | 分组标签,用于用户分组绑定 | @@ -138,6 +139,30 @@ API Key 在数据库中以明文存储。生产环境请确保数据库访问受 1. 首先按 priority 升序排列(数值越小越优先) 2. 然后在同 priority 内按 weight 降序排列(数值越大越优先) +### 按组优先级(groupPriorities) + +{% callout type="note" %} +v0.5.5 新增。允许为不同用户组设置独立的优先级,实现更精细的负载均衡策略。 +{% /callout %} + +格式为 JSON 对象,键为用户组标签,值为该组的专属优先级: + +```json +{ + "groupPriorities": { + "vip": 0, + "standard": 10, + "trial": 20 + } +} +``` + +**匹配规则**: + +- 当请求用户属于某个组时,使用该组对应的优先级值 +- 如果用户的组不在 `groupPriorities` 中,回退到全局 `priority` 值 +- `null` 或未设置时,所有用户使用全局 `priority` + ### 成本系数(costMultiplier) 成本系数用于调整供应商的计费计算,常见场景: @@ -520,6 +545,169 @@ IP 透传功能用于将客户端真实 IP 地址传递给上游供应商。 --- +## Anthropic 参数覆写 + +{% callout type="note" %} +v0.5.3 新增。仅对 `providerType` 为 `claude` 或 `claude-auth` 的供应商生效。 +{% /callout %} + +针对 Anthropic 类型供应商的请求参数覆写配置,可在供应商级别强制覆盖客户端发送的参数值。 + +### 字段说明 + +| 字段名 | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | +| `anthropicMaxTokensPreference` | string | null | 覆写 `max_tokens` 参数 | +| `anthropicThinkingBudgetPreference` | string | null | 覆写 `thinking.budget_tokens` 参数 | +| `anthropicAdaptiveThinking` | JSON object | null | Adaptive Thinking 自适应思考配置(v0.5.5+) | + +### max_tokens 覆写(anthropicMaxTokensPreference) + +- **null / `"inherit"`**:跟随客户端请求值 +- **数字字符串**(如 `"16384"`):强制覆写为指定值 + +### thinking budget 覆写(anthropicThinkingBudgetPreference) + +- **null / `"inherit"`**:跟随客户端请求值 +- **数字字符串**(如 `"10000"`):强制覆写 `thinking.budget_tokens` +- 覆写时自动设置 `thinking.type = "enabled"` +- Anthropic API 要求 `budget_tokens >= 1024`;如果 budget 值 >= max_tokens,会自动压缩为 `max_tokens - 1`;压缩后 < 1024 则跳过覆写 + +### Adaptive Thinking(anthropicAdaptiveThinking) + +{% callout type="note" %} +v0.5.5 新增。Adaptive Thinking 优先级高于 `anthropicThinkingBudgetPreference`,当模型匹配时优先应用。 +{% /callout %} + +JSONB 结构,包含以下子字段: + +| 子字段 | 类型 | 说明 | +| --- | --- | --- | +| `effort` | string | 努力等级:`"low"` / `"medium"` / `"high"` | +| `modelMatchMode` | string | 模型匹配模式:`"all"` 或 `"list"` | +| `models` | string[] | 当 `modelMatchMode = "list"` 时,指定匹配的模型名称列表 | + +生效时,覆写请求为 `thinking.type = "adaptive"` 并设置 `output_config.effort`。 + +### 配置示例 + +```json +{ + "anthropicMaxTokensPreference": "16384", + "anthropicThinkingBudgetPreference": "10000", + "anthropicAdaptiveThinking": { + "effort": "medium", + "modelMatchMode": "all", + "models": [] + } +} +``` + +--- + +## Gemini 特殊配置 + +{% callout type="note" %} +v0.5.4 新增。仅对 `providerType` 为 `gemini` 或 `gemini-cli` 的供应商生效。 +{% /callout %} + +### 字段说明 + +| 字段名 | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | +| `geminiGoogleSearchPreference` | string | null | Google Search 网络访问偏好 | + +### Google Search 偏好(geminiGoogleSearchPreference) + +控制 Gemini 模型是否使用 Google Search 联网搜索能力: + +| 选项值 | 说明 | +| --- | --- | +| null / `"inherit"` | 跟随客户端请求(默认) | +| `"enabled"` | 强制注入 `googleSearch` 工具到请求中 | +| `"disabled"` | 强制移除请求中的 `googleSearch` 工具 | + +### 配置示例 + +```json +{ + "providerType": "gemini", + "geminiGoogleSearchPreference": "enabled" +} +``` + +--- + +## 定时启停配置 + +{% callout type="note" %} +v0.6.0 新增。可为供应商配置活跃时间窗口,仅在指定时间段内参与调度。 +{% /callout %} + +### 字段说明 + +| 字段名 | 类型 | 默认值 | 格式 | 说明 | +| --- | --- | --- | --- | --- | +| `activeTimeStart` | string | null | `HH:mm` | 活跃时段开始时间 | +| `activeTimeEnd` | string | null | `HH:mm` | 活跃时段结束时间 | + +### 规则 + +- **两者都为 null**:供应商始终活跃(默认行为) +- **两者都设置**:仅在 `activeTimeStart` ~ `activeTimeEnd` 时间窗口内参与调度 +- 时间基于系统配置的时区(参见[时区设置](/docs/system/timezone)) +- 支持跨午夜配置(如 `22:00` ~ `06:00`) + +### 配置示例 + +```json +{ + "activeTimeStart": "08:00", + "activeTimeEnd": "22:00" +} +``` + +--- + +## 客户端限制配置 + +{% callout type="note" %} +v0.6.0 重构。供应商级别的客户端限制功能,可控制哪些客户端类型可以使用该供应商。 +{% /callout %} + +### 字段说明 + +| 字段名 | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | +| `allowedClients` | JSON array | `[]` | 允许的客户端列表,空数组表示不限制 | +| `blockedClients` | JSON array | `[]` | 阻止的客户端黑名单 | + +### 匹配规则 + +1. **allowedClients 为空**:不限制客户端类型 +2. **allowedClients 非空**:仅允许列表中的客户端使用 +3. **blockedClients**:即使 allowedClients 允许,黑名单中的客户端也会被拒绝 + +系统支持自动检测 Claude Code CLI 子客户端(使用 4 信号检测系统),便于精细化控制不同 IDE 集成的访问权限。 + +--- + +## 交换缓存 TTL 计费 + +{% callout type="note" %} +v0.6.0 新增。用于解决部分供应商以 5 分钟 TTL 计费但实际提供 1 小时缓存的计费不匹配问题。 +{% /callout %} + +### 字段说明 + +| 字段名 | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | +| `swapCacheTtlBilling` | boolean | `false` | 是否交换缓存 TTL 计费 | + +启用后,在计费计算时将 1 小时和 5 分钟的缓存 TTL 互换,使计费与供应商的实际收费策略对齐。 + +--- + ## MCP 透传配置 MCP(Model Context Protocol)透传功能用于增强模型能力。 From d4171b062e20b3bab52c1608cb5cc461500a69c4 Mon Sep 17 00:00:00 2001 From: Claude Code Hub Docs Bot Date: Sun, 1 Mar 2026 00:42:54 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20AI=20=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E5=8F=8D=E9=A6=88=E7=9A=84=E6=96=87=E6=A1=A3=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 统一 changelog v0.5.3-v0.5.8 标题格式为可点击链接格式 - 修复 v0.5.5 changelog 中 "Vacuum Filter has" 中英混杂问题 - 修复 langfuse/page.md 代码块缺少语言标识符 - 完善 ENABLE_ENDPOINT_CIRCUIT_BREAKER 表格描述,明确双层级影响 - 为客户端限制配置和交换缓存 TTL 计费添加 JSON 配置示例 --- src/app/docs/changelog/page.md | 14 +++++++------- src/app/docs/reference/env-variables/page.md | 2 +- src/app/docs/reference/provider-fields/page.md | 17 +++++++++++++++++ src/app/docs/system/langfuse/page.md | 2 +- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/app/docs/changelog/page.md b/src/app/docs/changelog/page.md index 5d6ce3a..e0187a3 100644 --- a/src/app/docs/changelog/page.md +++ b/src/app/docs/changelog/page.md @@ -76,7 +76,7 @@ language: zh --- -## v0.5.8 (2026-02-15) +## [v0.5.8](https://github.com/ding113/claude-code-hub/releases/tag/v0.5.8) - 2026-02-15 ### 优化 @@ -96,7 +96,7 @@ language: zh --- -## v0.5.7 (2026-02-14) +## [v0.5.7](https://github.com/ding113/claude-code-hub/releases/tag/v0.5.7) - 2026-02-14 ### 新增 @@ -115,7 +115,7 @@ language: zh --- -## v0.5.6 (2026-02-12) +## [v0.5.6](https://github.com/ding113/claude-code-hub/releases/tag/v0.5.6) - 2026-02-12 ### 新增 @@ -144,7 +144,7 @@ language: zh --- -## v0.5.5 (2026-02-11) +## [v0.5.5](https://github.com/ding113/claude-code-hub/releases/tag/v0.5.5) - 2026-02-11 ### 新增 @@ -158,7 +158,7 @@ language: zh ### 优化 -- Vacuum Filter has 热路径性能优化,降低 API Key 负向短路成本 (#757) [@tesgth032](https://github.com/tesgth032) +- Vacuum Filter 热路径性能优化,降低 API Key 负向短路成本 (#757) [@tesgth032](https://github.com/tesgth032) - 解耦 Adaptive Thinking 与 Thinking Budget 偏好设置,支持独立配置 ### 修复 @@ -179,7 +179,7 @@ language: zh --- -## v0.5.4 (2026-02-07) +## [v0.5.4](https://github.com/ding113/claude-code-hub/releases/tag/v0.5.4) - 2026-02-07 ### 新增 @@ -209,7 +209,7 @@ language: zh --- -## v0.5.3 (2026-02-03) +## [v0.5.3](https://github.com/ding113/claude-code-hub/releases/tag/v0.5.3) - 2026-02-03 ### 新增 diff --git a/src/app/docs/reference/env-variables/page.md b/src/app/docs/reference/env-variables/page.md index db3d825..23a3120 100644 --- a/src/app/docs/reference/env-variables/page.md +++ b/src/app/docs/reference/env-variables/page.md @@ -547,7 +547,7 @@ API Key 鉴权缓存 TTL。缓存链路为 Vacuum Filter -> Redis -> DB。 | 值 | 行为 | |------|------| | `false` | 禁用端点熔断器,所有启用的端点均可使用 | -| `true` | 启用端点熔断器,连续失败的端点会被临时屏蔽(默认 3 次失败后熔断 5 分钟) | +| `true` | 启用熔断器,供应商类型级别和端点级别的熔断器均生效,连续失败的端点会被临时屏蔽(默认 3 次失败后熔断 5 分钟) | {% callout type="note" %} 此开关同时控制供应商类型级别和端点级别的熔断器。启用后,供应商类型和端点的熔断器都会生效。 diff --git a/src/app/docs/reference/provider-fields/page.md b/src/app/docs/reference/provider-fields/page.md index c7d1fe6..f5e7e0f 100644 --- a/src/app/docs/reference/provider-fields/page.md +++ b/src/app/docs/reference/provider-fields/page.md @@ -690,6 +690,15 @@ v0.6.0 重构。供应商级别的客户端限制功能,可控制哪些客户 系统支持自动检测 Claude Code CLI 子客户端(使用 4 信号检测系统),便于精细化控制不同 IDE 集成的访问权限。 +### 配置示例 + +```json +{ + "allowedClients": ["claude-code"], + "blockedClients": ["claude-code/vscode"] +} +``` + --- ## 交换缓存 TTL 计费 @@ -706,6 +715,14 @@ v0.6.0 新增。用于解决部分供应商以 5 分钟 TTL 计费但实际提 启用后,在计费计算时将 1 小时和 5 分钟的缓存 TTL 互换,使计费与供应商的实际收费策略对齐。 +### 配置示例 + +```json +{ + "swapCacheTtlBilling": true +} +``` + --- ## MCP 透传配置 diff --git a/src/app/docs/system/langfuse/page.md b/src/app/docs/system/langfuse/page.md index 05f4fff..d991fa6 100644 --- a/src/app/docs/system/langfuse/page.md +++ b/src/app/docs/system/langfuse/page.md @@ -75,7 +75,7 @@ LANGFUSE_DEBUG=false ### 请求追踪流程 -``` +```text 客户端请求 ↓ 创建 Langfuse Trace(关联 request-id、user-id、model 等元数据) From dd0aa58eb8d0a7e66afe7a0f11ffc936911637b4 Mon Sep 17 00:00:00 2001 From: Claude Code Hub Docs Bot Date: Sun, 1 Mar 2026 00:57:06 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=20API=20=E5=8F=82=E6=95=B0=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E4=B8=BA=20mode=20=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数据导出 API 实际使用 ?mode=full|excludeLogs|ledgerOnly 参数, 而非独立的 boolean 参数。同时补充 ledger-only 文件命名示例。 --- src/app/docs/system/data-import-export/page.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app/docs/system/data-import-export/page.md b/src/app/docs/system/data-import-export/page.md index b7e9179..fa19971 100644 --- a/src/app/docs/system/data-import-export/page.md +++ b/src/app/docs/system/data-import-export/page.md @@ -23,19 +23,19 @@ Claude Code Hub 提供完整的数据导入导出功能,支持数据库备份 ### 导出接口 -**端点**:`GET /api/admin/database/export?excludeLogs=true` +**端点**:`GET /api/admin/database/export?mode=full|excludeLogs|ledgerOnly` 系统使用 `pg_dump` 创建 PostgreSQL 自定义格式(压缩)备份。 -| 参数 | 类型 | 说明 | -|-----|------|------| -| `excludeLogs` | boolean | 是否排除请求日志表数据 | -| `ledgerOnly` | boolean | 仅导出 usage_ledger 计费账本数据(v0.6.0+,不含决策日志,体积更小) | +| 参数 | 类型 | 默认值 | 说明 | +|-----|------|--------|------| +| `mode` | enum | `full` | 导出模式:`full`(完整导出)、`excludeLogs`(排除请求日志表数据)、`ledgerOnly`(仅导出 usage_ledger 计费账本,v0.6.0+) | **文件命名规则**: -``` -backup_2025-01-29T10-30-00.dump -backup_2025-01-29T10-30-00_no-logs.dump // 排除日志时 +```text +backup_2025-01-29T10-30-00.dump // 完整导出 +backup_2025-01-29T10-30-00_no-logs.dump // excludeLogs 模式 +backup_2025-01-29T10-30-00_ledger-only.dump // ledgerOnly 模式(v0.6.0+) ``` {% callout type="warning" title="权限要求" %} @@ -46,7 +46,7 @@ backup_2025-01-29T10-30-00_no-logs.dump // 排除日志时 - **流式响应**:支持大型数据库的流式传输 - **日志排除**:可选择排除 `message_request` 表数据,保留表结构 -- **计费账本导出**(v0.6.0+):使用 `ledgerOnly` 参数仅导出 `usage_ledger` 计费数据,不包含决策日志,备份文件更小且不影响计费和限额功能 +- **计费账本导出**(v0.6.0+):使用 `mode=ledgerOnly` 仅导出 `usage_ledger` 计费数据,不包含决策日志,备份文件更小且不影响计费和限额功能 - **分布式锁**:Redis 分布式锁防止并发操作,锁超时 5 分钟 {% callout type="warning" %}