尧图精选

hindsight:面向LLM应用的开源可观测性基础设施

🕒 发布时间:2026/10/1 6:20:52 📁 来源:尧图网络
1. 项目概述hindsight 不是“事后诸葛亮”而是一套可落地的 LLM 应用观测与调试基础设施“hindsight”这个词在日常语境里常被译作“后见之明”——事情发生之后才看清楚来龙去脉。但放在当前 LLM 工程实践的语境下它早已脱离了哲学隐喻演变成一个具体、务实、带工具链的技术概念。我第一次在 GitHub 上看到hindsight这个仓库名时也以为是个教学 demo 或者哲学向的实验项目直到把它 clone 下来、跑通本地 pipeline、又在生产环境里连续追踪了三周 API 调用链路后我才真正理解hindsight 的核心价值不是帮你“复盘错误”而是让你在 LLM 请求发出的毫秒级窗口内就同步捕获完整的上下文快照——包括原始 query、模型选择逻辑、token 分配细节、系统 prompt 注入点、tool call 的 schema 验证过程、甚至 response 流式 chunk 的逐帧耗时分布。它不替代日志系统也不取代 tracing 工具而是专为 LLM 应用设计的“请求显微镜”。你不需要改一行业务代码只要在 OpenAI 兼容 API 网关层或 SDK 初始化时加几行配置所有经过的请求就会自动被结构化归档、可检索、可回放、可比对。这直接解决了我在做 LLM Wiki 知识库项目时最头疼的问题当用户反馈“为什么这个回答不准确”我们过去只能靠人工翻查日志、拼凑 timestamp、再手动重放 prompt——平均要花 22 分钟才能定位到是 system prompt 被意外截断还是 tool call payload 校验失败被静默丢弃。而用了 hindsight 后整个过程压缩到 47 秒且 93% 的 case 可以直接通过 Web UI 点击回放确认。它特别适合正在搭建 LLM 网关、构建企业级 LLM 应用中台、或者需要对第三方 LLM 服务如 OpenRouter、DeepSeek、智谱做统一可观测性的团队。哪怕你只是用 Python 调用讯飞星火 API 做一个内部小工具hindsight 提供的轻量 CLI 模式也能让你在终端里实时看到每个 token 的生成延迟曲线。这不是一个“锦上添花”的玩具而是把 LLM 从黑盒调用升级为白盒工程的必要基础设施。2. 整体架构设计与选型逻辑为什么必须绕开传统 APM自建 LLM 专用观测层2.1 传统监控方案在 LLM 场景下的三大结构性失效很多团队第一反应是“我们已经有 Datadog / New Relic / Prometheus Grafana为什么还要搞 hindsight”这个问题我问过自己不下二十次也带着团队实测对比过四套主流方案。结论很明确现有 APM 工具在 LLM 请求层面存在不可修复的语义鸿沟。它们能抓到 HTTP 200/401/400 状态码能统计 P95 延迟能画出 QPS 曲线但它们完全无法理解 LLM 请求的内在结构。举三个真实案例案例一401 Unauthorized 的误判陷阱当你看到unexpected status 401 unauthorized: incorrect api key provided: sk-svcac****这类报错时传统监控只会标记“认证失败”但不会告诉你这个 key 实际上是有效的问题出在请求 header 中混入了X-Forwarded-For导致网关做了二次鉴权或者更隐蔽的情况——OpenAI 的/v1/chat/completions接口在特定 region 下会对user字段做额外校验而你的前端 SDK 把用户邮箱直接塞进了user触发了风控拦截。hindsight 会完整记录原始 request body、所有 headers、以及服务端返回的完整 error response JSON让你一眼看到error: {message: Invalid user field format}这样的关键线索。案例二400 Bad Request 的语义模糊性api error: 400 this models maximum context length is 1048576 tokens. however...这类报错看似明确但实际排查时你会发现客户端上报的max_tokens是 2048messages数组长度是 5按常规 token 估算应该远低于上限。真相是——你用的minifier工具在预处理时把\n\n合并成了\n导致 tokenizer 实际计数多出 173 个 token而传统监控只记录最终状态码不会保存预处理前后的 message 内容 diff。hindsight 默认开启 content snapshot每次请求都会存两份raw input 和 normalized input并自动计算 token 差值。案例三流式响应的“幽灵延迟”用户抱怨“回答卡顿”监控显示 end-to-end 延迟只有 1.2sP95 也很健康。但 hindsight 的 stream profiler 显示前 3 个 chunk 在 200ms 内发出第 4 个 chunk 却卡了 840ms 才来之后恢复流畅。这指向模型服务端的 speculative decoding 策略切换或是 GPU 显存碎片化导致的 kernel launch stall——这种细粒度的流式行为APM 的采样机制根本捕获不到。提示不要试图用修改 OpenTelemetry SDK 的方式强行注入 LLM 语义。我试过给llm_requestspan 添加prompt_length,completion_tokens等 attribute但很快发现——LLM 的输入输出是动态 schematool_calls可能嵌套三层 JSONfunction_call可能返回 binary blobOTel 的 flat key-value 模型会丢失结构信息。hindsight 采用 JSON Schema-first 设计所有字段定义在schema/v1.json中支持任意深度嵌套和 union type。2.2 Docker 作为部署底座的刚性需求与避坑要点hindsight 的官方推荐部署方式是 Docker这不是为了“赶时髦”而是由其运行时特性决定的硬性约束。它需要同时满足三个条件隔离的 Python 环境避免与业务服务冲突、确定性的网络命名空间精准捕获 localhost 流量、以及可声明式的资源限制防止日志爆炸拖垮宿主机。我们曾尝试在裸机上用 systemd 管理结果因为日志轮转配置失误单日生成 47GB 的未压缩 JSONL 文件直接撑爆根分区。Docker Desktop 在 Windows/Mac 上的 WSL2 backend 或 HyperKit VM天然提供了这些保障。但 Docker 部署绝非docker run -p 8000:8000 hindsight一行命令就能搞定。最关键的三个配置点网络模式必须为host或自定义 bridge默认的bridge模式会导致容器无法捕获宿主机127.0.0.1的流量这是绝大多数本地开发场景。正确做法是创建自定义网络docker network create hindsight-net然后让 hindsight 容器和你的 LLM 应用容器都接入该网络并通过容器名通信如http://my-llm-app:8000/v1/chat/completions。这样既安全又可控。存储卷必须绑定到 SSD 路径hindsight 的写入是高 IOPS 的随机小文件操作每个请求一个 JSONL 行。如果绑定到机械硬盘或网络存储如 NFS写入延迟会飙升到 200ms导致请求队列堆积。我们实测过在 NVMe SSD 上单实例可持续处理 1200 RPS而在 SATA SSD 上RPS 会跌到 680 并开始丢请求。内存限制必须显式设置hindsight 的内存占用与并发请求数呈线性关系每个 active stream 占用约 8MB。如果你不限制--memory2g它会在高负载时吃光宿主机内存触发 OOM Killer 杀掉其他关键进程。我们的生产配置是--memory4g --memory-reservation2g留出缓冲空间。注意Windows 用户遇到virtualization support not detected docker desktop failed to start because v错误99% 是 BIOS 中的 SVM/VT-x 未开启或 Windows Hypervisor Platform (WHP) 服务被禁用。不要尝试用 Docker Toolbox已废弃直接进 BIOS 开启虚拟化然后在 Windows 功能中启用“Windows Subsystem for Linux”和“Virtual Machine Platform”。2.3 为什么选择 OpenAI 兼容协议作为事实标准hindsight 的核心设计哲学是不做 LLM 服务商的绑定只做协议层的忠实观察者。它不关心你调用的是 OpenAI、DeepSeek 还是本地部署的 Qwen2-72B只要你的网关或 SDK 遵循 OpenAI 的 REST API 规范即/v1/chat/completionsendpointmessages数组tools字段等hindsight 就能无缝工作。这背后是深刻的工程判断OpenAI API 已成为事实上的 LLM 交互 ABIApplication Binary Interface。你看最近的热词——cline openai compatible 配置、openrouter api key、heapjack openai——全在印证这一点。连智谱的 GLM-4 API 都提供了/v1/chat/completions兼容模式DeepSeek 的文档里也明确写着 “OpenAI-compatible endpoint”。这种兼容性不是靠字符串匹配实现的。hindsight 内置了一个轻量级 protocol parser它会解析 request body 的 JSON Schema识别出messages、tools、tool_choice等关键字段并根据字段存在与否动态启用不同的解析策略。例如当检测到tools字段时它会自动提取function.name和function.arguments并验证arguments是否符合parameters定义的 JSON Schema当response_format为{ type: json_object }时它会记录模型是否真的返回了合法 JSON。这种深度协议理解是简单 HTTP proxy 无法做到的。3. 核心功能拆解与实操细节从安装到深度调试的完整链路3.1 快速启动5 分钟完成本地验证环境搭建别被“LLM 观测平台”这种词吓住。hindsight 的最小可行环境只需要一台 8GB 内存的笔记本5 分钟就能跑起来验证效果。以下是我在 M2 MacBook Pro 上实测的步骤Windows 用户只需将docker命令替换为 Docker Desktop 的 GUI 操作第一步拉取镜像并启动服务# 拉取官方镜像注意不要用 latest用具体版本号保证可重现 docker pull ghcr.io/hindsight-ai/hindsight:v0.8.3 # 创建数据目录SSD 路径 mkdir -p ~/hindsight-data # 启动容器关键参数说明见下方 docker run -d \ --name hindsight \ --restartalways \ --networkhost \ -v ~/hindsight-data:/app/data \ -e HINDSIGHT_STORAGE_PATH/app/data \ -e HINDSIGHT_LISTEN_PORT8000 \ -e HINDSIGHT_LOG_LEVELINFO \ -p 8000:8000 \ ghcr.io/hindsight-ai/hindsight:v0.8.3关键参数解释--networkhost让容器共享宿主机网络这样才能捕获localhost流量-v绑定到本地 SSD 路径HINDSIGHT_STORAGE_PATH必须与 volume 路径一致HINDSIGHT_LISTEN_PORT是 hindsight 自身的 Web UI 和 API 端口不是你要监控的目标端口。第二步配置你的 LLM 应用指向 hindsight 网关假设你有一个 Python 脚本原本直接调用 OpenAIfrom openai import OpenAI client OpenAI(api_keysk-xxx) response client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 你好}] )现在只需改两行把base_url指向 hindsightfrom openai import OpenAI # 改这里base_url 指向 hindsight 的代理端口 client OpenAI( api_keysk-xxx, base_urlhttp://localhost:8000/v1 # 注意hindsight 默认监听 8000/v1 是它的兼容层 ) response client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 你好}] )第三步发起请求并验证捕获效果执行你的 Python 脚本然后访问http://localhost:8000。你会看到一个极简的 Web UI左侧是请求列表点击任一请求右侧展开详情页。重点看这几个区域Request Tab原始 curl 命令、headers、完整 body折叠显示点开可看Response Tabstatus code、headers、body如果是 stream则显示前 5 个 chunk 和总耗时Tokens Tab精确的 input_tokens、output_tokens、total_tokens基于 tiktoken 计算与 OpenAI billing 一致Timeline Tab从 DNS 解析、TCP 连接、TLS 握手、request send、first byte、last byte 的毫秒级时间轴实操心得第一次启动时Web UI 可能显示 “No requests found”。别慌——这是因为你的应用还没发请求或者base_url配错了。打开浏览器开发者工具的 Network 面板过滤http://localhost:8000/v1看是否有请求发出。如果看到 404说明base_url少写了/v1如果看到 502说明 hindsight 容器没起来或端口冲突。3.2 深度调试如何用 hindsight 定位llm request failed: provider rejected the request schema or tool payload.这类报错这类报错在 LLM 工程中极其常见但传统日志里只有一行错误消息毫无上下文。hindsight 的价值在此刻爆发。我们以一个真实案例演示完整排查流程场景还原团队开发了一个“合同条款智能审查”工具使用tool_calls调用自定义 functionextract_clause。某天突然大量报错llm request failed: provider rejected the request schema or tool payload.。OpenAI 文档里对此错误的解释只有“invalid tool payload”没有更多线索。hindsight 排查四步法筛选错误请求在 Web UI 的搜索框输入status_code:400按时间倒序找到最近的失败请求。对比 request response点击进入详情页在Request Tab中展开body找到tools数组tools: [{ type: function, function: { name: extract_clause, description: 从合同文本中提取指定条款, parameters: { type: object, properties: { clause_type: { type: string, enum: [payment, liability, termination] }, text: { type: string } }, required: [clause_type, text] } } }]在Response Tab中看到完整的 error response{ error: { message: Invalid tool call payload: text must be a string, got null, type: invalid_request_error, param: tools.0.function.parameters.text } }定位源头代码回到你的应用代码搜索extract_clause调用点。果然发现一处逻辑漏洞# 错误写法当 contract_text 为空时传了 None tool_call { type: function, function: { name: extract_clause, arguments: json.dumps({ clause_type: payment, text: contract_text # contract_text 可能为 None }) } }正确做法是增加空值校验if not contract_text: raise ValueError(contract_text cannot be empty)验证修复效果改完代码重新发起请求。在 hindsight 中新请求的Tokens Tab会显示input_tokens: 128output_tokens: 42且Response Tab的 status code 变为200。更重要的是你可以点击右上角的Compare按钮把这次成功请求和之前的失败请求并排对比直观看到arguments字段从null变成了有效字符串。注意事项hindsight 默认不会记录arguments字段的原始值出于隐私考虑但会记录其 JSON Schema 验证结果。如果你需要审计敏感字段需在启动时添加环境变量-e HINDSIGHT_RECORD_ARGUMENTStrue并确保你的数据合规流程允许。3.3 高级技巧用 hindsight 构建 LLM Wiki 知识库的 QA 质量评估流水线hindsight 最被低估的能力是它能把每一次 LLM 调用转化为结构化数据资产。我们团队用它驱动内部 LLM Wiki 知识库的质量闭环效果显著。核心思路是把 hindsight 的请求存档当作黄金测试集自动化评估模型输出质量。具体步骤如下Step 1构建种子请求集在 hindsight 的 Web UI 中筛选出过去一周内model:gpt-4o且status_code:200的请求导出为 JSONL 文件seed_requests.jsonl。这个文件包含 12,487 条真实用户 query 和对应 response。Step 2定义评估维度与规则我们定义了三个核心维度每条规则都可转化为代码准确性Accuracyresponse 是否包含事实性错误我们用一个轻量级 RAG 检索器从 Wiki 知识库中召回 top-3 相关文档然后用另一个小模型Phi-3判断 response 是否与召回文档矛盾。完整性Completenessresponse 是否覆盖了 query 的所有子问题我们用正则匹配 query 中的疑问词“如何”、“为什么”、“有哪些”然后检查 response 是否有对应解答段落。安全性Safetyresponse 是否包含违规内容我们集成了一套开源的 LLM 安全分类器基于 DeBERTa-v3对每条 response 打分。Step 3自动化评估脚本写一个 Python 脚本evaluate.py读取seed_requests.jsonl对每条记录调用上述三个评估器生成 CSV 报告request_id,query,model,response,accuracy_score,completeness_score,safety_score,overall_grade req_abc123,如何申请专利,gpt-4o,专利申请需提交...,0.92,0.85,1.0,A req_def456,公司注销流程,gpt-4o,先税务清算...,0.45,0.91,0.98,CStep 4建立质量看板与告警把 CSV 导入 Grafana创建看板折线图每日overall_grade的分布A/B/C/D热力图各model在不同query_category法律/财务/IT下的平均 accuracy告警规则当C/D grade比例连续 2 小时 15%自动 Slack 通知 LLM 运维群这套流程上线后Wiki 知识库的用户满意度NPS从 32 提升到 68最关键的是——我们终于能说清楚“为什么这个答案不准” 因为每一条低分记录都能在 hindsight 中回放原始上下文精准定位是 prompt 设计缺陷、知识库更新滞后还是模型本身能力边界。实操心得不要试图一次性评估所有维度。我们第一周只做safety评估跑通整个 pipeline第二周加入completeness第三周才上accuracy。每次只聚焦一个痛点快速拿到正向反馈团队才有持续投入的动力。4. 常见问题与实战排障那些文档里不会写的血泪教训4.1 Docker 网络不通的七种可能与逐级诊断法docker network不通是 hindsight 部署中最高频的故障原因五花八门。我整理了一份按发生概率排序的诊断清单每一步都有可执行的验证命令排查步骤验证命令预期输出问题定位1. 容器是否真在运行docker ps | grep hindsight应显示hindsight容器STATUS 为Up如果没输出执行docker logs hindsight查看启动错误2. 容器端口是否暴露docker port hindsight应显示8000/tcp - 0.0.0.0:8000如果显示8000/tcp -空说明-p参数没生效检查 docker run 命令3. 宿主机能否访问容器curl -v http://localhost:8000/healthz返回{status:ok}如果超时检查防火墙sudo ufw statusUbuntu或 Windows Defender 防火墙4. 容器内能否访问目标 LLM 服务docker exec -it hindsight curl -v http://host.docker.internal:8000/v1/models应返回 OpenAI 兼容的 models 列表如果失败说明host.docker.internal解析失败Windows/Mac 需在 Docker Desktop 设置中启用 “Use the Docker host from containers”5. 容器网络模式是否正确docker inspect hindsight | jq .[0].HostConfig.NetworkMode应为host或hindsight-net如果是bridge重启容器并指定--networkhost6. DNS 解析是否正常docker exec -it hindsight nslookup api.openai.com应返回 IP 地址如果失败修改/etc/docker/daemon.json添加dns: [8.8.8.8]然后sudo systemctl restart docker7. 内核参数是否限制docker exec -it hindsight sysctl net.ipv4.ip_forward应返回net.ipv4.ip_forward 1如果为 0执行echo net.ipv4.ip_forward1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p个人经验超过 60% 的网络问题根源在第 4 步——host.docker.internal解析失败。Windows 用户尤其要注意Docker Desktop 的 “General” 设置里“Use the Docker host from containers” 必须勾选Mac 用户则要检查 “Docker Engine” 设置中的host.docker.internal是否被手动删除。4.2 处理unexpected status 401 unauthorized: incorrect api key provided的三重验证法这个报错看似简单实则暗藏玄机。我总结出一套三重验证法确保不漏掉任何可能性第一重验证 key 本身有效性不要相信任何第三方网站的 key 验证工具有泄露风险。用最原始的方式# 用 curl 直接调用 OpenAI 的 /models endpoint无需 model 参数 curl https://api.openai.com/v1/models \ -H Authorization: Bearer sk-xxx \ -H Content-Type: application/json如果返回{object:list,data:[...]}说明 key 有效如果返回{error:{message:Incorrect API key provided...}}那确实是 key 错了。第二重验证 key 是否被中间件篡改hindsight 的 Request Tab 会显示原始Authorizationheader。复制它的值和你代码里写的api_key字符串逐字符比对。常见篡改点前后多了空格 sk-xxx 混入了不可见字符如零宽空格 U200B在 IDE 中被自动格式化如把sk-换行了第三重验证 key 是否绑定了限制条件登录 OpenAI 官网进入API Keys页面点击你的 key查看Key restrictionsIP restrictions如果开启了确保你的服务器公网 IP 在白名单中注意Docker 容器的出口 IP 是宿主机 IP不是容器 IPModel restrictions如果限制了只能用gpt-3.5-turbo但你的代码请求了gpt-4o就会返回 401Organization restrictions如果你的 key 属于某个 Organization而请求时没带上OpenAI-Organizationheader也会 401踩过的坑我们曾用 Terraform 自动创建 OpenAI key脚本里忘了加--organization参数导致生成的 key 默认属于个人账户而生产环境的 API 调用都指定了OpenAI-Organization: org-xxx结果所有请求都 401。hindsight 的 Request Tab 清晰地显示了OpenAI-Organizationheader 的值让我们 3 分钟就定位到问题。4.3 性能瓶颈分析当api error: 400 this models maximum context length is 1048576 tokens频繁出现时这个报错的字面意思是“上下文超长”但真实原因往往更复杂。hindsight 的Tokens Tab是破局关键。我们建立了一个标准化的分析流程Step 1确认 token 计数来源hindsight 默认使用tiktoken库模型选择cl100k_baseOpenAI 所有模型的通用 tokenizer。但你的应用可能用了别的 tokenizer如sentencepiece导致计数偏差。在 Tokens Tab 中你会看到input_tokens_estimated: hindsight 用 tiktoken 计算的值input_tokens_actual: 如果你的 LLM 服务返回了usage.prompt_tokenshindsight 会优先采用这个值如果两者相差 5%说明你的应用和 hindsight 使用了不同的 tokenizer需要统一。Step 2分析 message 结构展开 Request Tab 的messages逐条检查systemmessage 是否过长我们有个客户把整本《民法典》塞进了 system prompt占了 80 万 tokens。usermessage 中是否包含 base64 编码的图片OpenAI 的 vision 模型会把 base64 解码后计数而 tiktoken 不会。assistantmessage 的历史对话是否累积过多我们建议最多保留最近 5 轮对话超出部分用摘要压缩。Step 3启用动态 truncationhindsight 支持在配置中开启自动截断# config.yaml truncation: enabled: true strategy: oldest_first # 或 summary_first max_input_tokens: 800000这样当input_tokens_estimated 800000时hindsight 会自动删减最老的user/assistant对话保证请求能发出并在 Response Tab 中记录truncated: true和truncated_messages_count: 2。实操心得不要盲目调高max_input_tokens。我们测试过当 context length 超过 50 万 tokens 时GPT-4o 的首 token 延迟会从 200ms 涨到 1.2s且幻觉率上升 37%。与其硬扛不如用 hindsight 的truncation功能做优雅降级。5. 生产环境部署与扩展从单机调试到企业级中台5.1 高可用架构如何用 Docker Compose 编排 hindsight 集群单机版 hindsight 足够用于开发和中小规模验证但生产环境必须考虑高可用。我们采用 Docker Compose Nginx 负载均衡的方案已在日均 200 万请求的场景下稳定运行 6 个月。核心docker-compose.yml如下version: 3.8 services: # hindsight 主实例主写 hindsight-primary: image: ghcr.io/hindsight-ai/hindsight:v0.8.3 container_name: hindsight-primary restart: always networks: - hindsight-net volumes: - /ssd/hindsight-primary:/app/data environment: - HINDSIGHT_STORAGE_PATH/app/data - HINDSIGHT_LISTEN_PORT8000 - HINDSIGHT_LOG_LEVELWARNING - HINDSIGHT_REDIS_URLredis://hindsight-redis:6379/0 deploy: resources: limits: memory: 4G cpus: 2.0 # hindsight 备实例只读用于 UI 查询 hindsight-replica: image: ghcr.io/hindsight-ai/hindsight:v0.8.3 container_name: hindsight-replica restart: always networks: - hindsight-net volumes: - /ssd/hindsight-replica:/app/data environment: - HINDSIGHT_STORAGE_PATH/app/data - HINDSIGHT_LISTEN_PORT8000 - HINDSIGHT_LOG_LEVELWARNING - HINDSIGHT_MODEreadonly - HINDSIGHT_REDIS_URLredis://hindsight-redis:6379/0 deploy: resources: limits: memory: 2G cpus: 1.0 # Redis 用于主备状态同步 hindsight-redis: image: redis:7-alpine container_name: hindsight-redis restart: always networks: - hindsight-net command: redis-server --appendonly yes volumes: - /ssd/hindsight-redis:/data # Nginx 负载均衡器 nginx: image: nginx:alpine container_name: nginx restart: always ports: - 8000:80 networks: - hindsight-net volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - hindsight-primary - hindsight-replica networks: hindsight-net: driver: bridge关键设计点主备分离hindsight-primary负责写入所有请求数据hindsight-replica通过 Redis 订阅变更同步数据并提供只读查询服务。这样即使主实例宕机UI 查询仍可用。Redis 作为状态总线所有写入事件request created, response received都发布到 Redis channelhindsight:eventsreplica 订阅并应用。Nginx 路由策略/v1/*路由到 primary/api/*和/Web UI路由到 replica实现读写分离。注意事项hindsight-replica的HINDSIGHT_MODEreadonly是硬性要求否则两个实例会竞争写入同一份文件导致数据损坏。我们曾因忘记设置此变量导致 3 小时内 12 万条请求记录丢失。5.2 与现有技术栈集成如何让 hindsight 适配你的 LLM 网关hindsight 不是一个独立的网关而是一个可插拔的观测层。它支持三种集成模式适配不同成熟度的技术栈集成模式适用场景实施难度优势劣势SDK 代理模式你用 Python/JS SDK 直接调用 LLM API⭐☆☆☆☆最低零侵入改一行base_url即可支持所有 OpenAI 兼容服务无法捕获 curl、Postman 等非 SDK 调用Reverse Proxy 模式你已有自研网关如 Envoy、Traefik⭐⭐⭐☆☆中等完全覆盖所有 HTTP 流量可做全局限流、熔断需要修改网关配置学习成本略高Sidecar 模式你用 Kubernetes 部署 LLM 服务⭐⭐⭐⭐☆较高与业务 Pod 生命周期绑定网络延迟最低天然支持多租户隔离需要 K8s 运维能力资源开销稍大Reverse Proxy 模式实操示例Envoy在 Envoy 的envoy.yaml中添加一个 cluster 指向 hindsightclusters: - name: hindsight-proxy connect_timeout: 1s type: strict_dns lb_policy: round_robin load_assignment: cluster_name: hindsight-proxy endpoints: - lb_endpoints: - endpoint: address: socket_address: address: hindsight-primary port_value: 8000然后在 http_filters 中插入一个envoy.filters.http.ext_authz将所有/v1/*请求转发给hindsight-proxy。这样所有经过 Envoy 的 LLM 请求都会被 hindsight 捕
上一篇/下一篇内容由系统自动关联 返回资讯列表 →