# ai-bridge 的监听地址。 AI_BRIDGE_LISTEN_ADDR=0.0.0.0:8080 # 后端 new-api 的基础地址;收到的 /v1/* 路径会拼接到这个地址后面。 AI_BRIDGE_UPSTREAM_BASE_URL=http://127.0.0.1:3000 # 运行时配置自动重载间隔;默认 300 秒。设为 0 表示关闭自动重载。 # 重载会重新读取环境变量和 .env;监听地址、日志输出和冷却条目清理间隔仍需重启生效。 AI_BRIDGE_CONFIG_RELOAD_INTERVAL_SECS=300 # 周期性自重启间隔;86400 秒为 24 小时。设为 0 表示关闭。 # 到期后 ai-bridge 会优雅退出,需由 systemd/docker 等进程管理器重新拉起。 AI_BRIDGE_AUTO_RESTART_INTERVAL_SECS=86400 # 429/容量错误后的按 key 冷却状态清理配置;空闲条目会自动移除。 AI_BRIDGE_RATE_LIMITER_IDLE_TTL_SECS=600 AI_BRIDGE_RATE_LIMITER_CLEANUP_INTERVAL_SECS=60 # SSE 心跳间隔,适用于流式请求、图片转换和 429 重试等待。 AI_BRIDGE_HEARTBEAT_INTERVAL_SECS=5 # 上游 text/event-stream 在首个有效输出/工具参数/终止事件前停顿多久后断开并透明重试。 # ENABLED 或 TIMEOUT=0 都可关闭;这些配置支持自动重载,通常无需重启服务。 AI_BRIDGE_STREAM_EVENT_STALL_RETRY_ENABLED=true AI_BRIDGE_STREAM_EVENT_STALL_TIMEOUT_SECS=300 AI_BRIDGE_STREAM_EVENT_STALL_MAX_RETRIES=2 # 流式响应首字节优化;默认开启。 # 开启后,所有流式请求(stream=true)会在收到上游响应头后立即发送 SSE 注释心跳,降低首字节延迟。 # 适用于所有返回 text/event-stream 的接口,包括 /v1/chat/completions、/v1/responses 等。 AI_BRIDGE_STREAM_EARLY_HEARTBEAT=true # 流式 Chat Completions 可选首字内容优化;默认关闭。 # 开启后,简单的 /v1/chat/completions stream 请求会提前发送一个 SSE data 空格事件,再等待/转发真实上游 SSE。 # 不适用于 JSON/Schema 输出、tools/functions/tool_choice、多 choice 或非文本模态请求。 AI_BRIDGE_STREAM_SYNTHETIC_FIRST_SPACE=false # 图片接口响应模式:auto、json 或 sse。 # auto/json 会为普通客户端使用 JSON 安全的空白心跳;sse 使用 SSE 注释心跳。 AI_BRIDGE_IMAGE_RESPONSE_MODE=auto # 非流式 /v1/responses 兼容回退;开启后把请求转为上游 /v1/chat/completions,再把响应转回 Responses 形态。 # 默认关闭,只建议在上游非流式 Responses API 不兼容时开启。 AI_BRIDGE_RESPONSES_NONSTREAM_CHAT_FALLBACK=false # 运行时调试用的额外操作日志;生产环境通常保持关闭。 AI_BRIDGE_DEBUG_OUTPUT=false # 上游 429/容量错误的透明重试策略;最大重试次数为 0 表示显式无限重试,通常不建议在线上使用。 AI_BRIDGE_UPSTREAM_429_INITIAL_DELAY_SECS=2 AI_BRIDGE_UPSTREAM_429_MAX_DELAY_SECS=30 AI_BRIDGE_UPSTREAM_429_MAX_RETRIES=3 # 是否在上游 429/容量错误后,对同一个 API key 启用跨请求冷却等待。 # 默认开启;没有上游错误时不会启动该限制。设为 false 时,即使有 429 也只影响当前请求自己的透明重试。 AI_BRIDGE_UPSTREAM_ERROR_COOLDOWN_ENABLED=true # 上游 502 或请求上游失败时,是否按同一个 API key 透明冷却等待后重试。 # 默认开启,等待 300 秒;关闭后 502 会按普通上游响应返回给客户端。 # MAX_RETRIES 最大重试次数为 0 表示显式无限重试,通常不建议在线上使用。 # ACCUMULATE 开启时,同 key 多条并发请求同时遇到 502 会逐条追加 300 秒冷却;关闭时只保留最长冷却窗口。 # Bearer key 如果在 white.txt 白名单中,当前 502 请求仍会透明重试,但不会给该 key 写入跨请求 502 冷却队列。 AI_BRIDGE_UPSTREAM_502_COOLDOWN_ENABLED=true AI_BRIDGE_UPSTREAM_502_COOLDOWN_ACCUMULATE_ENABLED=true AI_BRIDGE_UPSTREAM_502_COOLDOWN_SECS=300 AI_BRIDGE_UPSTREAM_502_MAX_RETRIES=3 # reqwest 总超时时间(秒);设置为 0 表示禁用总超时。 AI_BRIDGE_REQUEST_TIMEOUT_SECS=900 AI_BRIDGE_CONNECT_TIMEOUT_SECS=30 # 普通客户端请求体最大缓冲大小,用于需要改写/包装的请求转发。 # 大文件上传请求超过该值时会跳过缓冲并流式直传上游。 AI_BRIDGE_MAX_BODY_BYTES=67108864 # 上游返回 error.code=cyber_policy,且后置违禁确认命中时,触发该 key 的永久封禁。 # 设为 false 后不读取 black.txt/black_ip 做预拦截,也不写 black_log/black.txt/black_ip。 AI_BRIDGE_CYBER_POLICY_BAN_ENABLED=true # cyber_policy key 黑名单文件。默认写入 ai-bridge 可执行文件目录下的 black.txt;如需共享/挂载到固定目录,可显式指定。 # AI_BRIDGE_CYBER_POLICY_BLACKLIST_FILE=/path/to/black.txt # cyber_policy 命中时追加写入的完整 JSONL 取证日志。 # 该文件包含封禁时间、客户端 IP、完整请求 body 和真实 bearer API key;请限制权限。 # 默认写入 ai-bridge 可执行文件目录下的 black_log。 # AI_BRIDGE_CYBER_POLICY_BLACK_LOG_FILE=/path/to/black_log # 同一个客户端 IP 累计 3 次确认后的 cyber_policy black 记录后,会追加写入该 IP 黑名单。 # 命中该文件的后续请求会在读取请求体前直接 403。 # 默认写入 ai-bridge 可执行文件目录下的 black_ip。 # AI_BRIDGE_CYBER_POLICY_IP_BLACKLIST_FILE=/path/to/black_ip # cyber_policy 白名单 API key 文件。文件中每行一个完整 Bearer key。 # 白名单 key 触发 cyber_policy 时只写 white_log,不写 black_log/black.txt/black_ip,并透传上游原始响应。 # 白名单 key 遇到 502 或上游请求失败时,不写入跨请求 502 冷却队列;429/容量错误冷却不受该白名单影响。 # 默认读取 ai-bridge 可执行文件目录下的 white.txt。 # AI_BRIDGE_CYBER_POLICY_WHITELIST_FILE=/path/to/white.txt # 白名单 key 触发 cyber_policy 时追加写入的完整 JSONL 取证日志。 # 该文件包含触发时间、累计触发次数、完整请求 body 和真实 bearer API key;请限制权限。 # 默认写入 ai-bridge 可执行文件目录下的 white_log.txt。 # AI_BRIDGE_CYBER_POLICY_WHITE_LOG_FILE=/path/to/white_log.txt # cyber_policy 后置违禁确认规则文件。未设置时默认读取启动目录/项目根目录下的 cyber_policy_rules.json。 # JSON 结构示例: # { # "keywords": ["phishing", "恶意软件"], # "regex": ["(?i)credential\\s+stuffing", "(?i)reverse\\s+shell"] # } # 注意 JSON 里的正则反斜杠需要写成 \\。 # AI_BRIDGE_CYBER_POLICY_CONFIRMATION_RULES_FILE=/path/to/cyber_policy_rules.json # 日志配置:格式可选 json 或 pretty;RUST_LOG 也可以覆盖日志过滤规则。 AI_BRIDGE_LOG_LEVEL=info AI_BRIDGE_LOG_FORMAT=json # AI_BRIDGE_LOG_FILE=logs/ai-bridge.log # 502 相关透明重试/最终 502 返回会写入包含完整请求体和真实 bearer API key 的诊断 JSON。 # 凭证头会脱敏,但 request.api_key_full 会保留真实 key;目录请限制权限。 AI_BRIDGE_502_LOG_DIR=log/502 # 最终 503 返回会使用同一诊断 JSON 格式写入该目录。 AI_BRIDGE_503_LOG_DIR=log/503 # 转发到上游前,会移除带有此前缀的请求头。 AI_BRIDGE_INTERNAL_HEADER_PREFIX=x-ai-bridge- # 按模型前缀过滤工具调用;JSON 格式,键为模型前缀,值为要过滤的工具类型数组。 # 示例:{"gpt": ["image_generation"], "claude": ["code_interpreter"]} # .env 中如果 JSON 包含空格,必须用单引号或双引号包住整个值。 # 默认为空 JSON 对象 {}(不过滤任何工具)。 # AI_BRIDGE_FILTER_TOOLS_BY_MODEL='{"gpt": ["image_generation"]}' # 工具过滤前置检查的快速扫描窗口(字节数);默认 1024(1KB)。 # 前 N 字节命中时可提前进入轻量元数据解析;未命中会继续扫描剩余请求体,避免大 prompt # 场景下 tools 字段靠后导致漏过滤。真正完整 JSON 解析只在 model 和 tools[].type 都命中后发生。 AI_BRIDGE_TOOL_FILTER_SCAN_LIMIT=1024