ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

携程旅游 AI 网关落地实践:基于 Higress 的 MCP 接入与网关选型配置指南

携程旅游 AI 网关落地实践:基于 Higress 的 MCP 接入与网关选型配置指南 1. 携程旅游 AI 网关落地场景为什么需要 Higress 做统一入口携程旅游内部在大模型应用铺开之后遇到的核心问题不是“模型不够强”而是“接入太散”。业务线各自对接外部商业大模型和内部自研模型认证方式五花八门有的走 Bearer Token有的走自定义 Header费用没有集中统计月底对账全靠各团队自己报流量高峰时没有统一限流某个业务把后端打挂了其他业务跟着遭殃。这三个问题叠加在一起就变成了典型的“点对点接入失控”。AI 网关要解决的就是这件事把所有大模型调用收敛到一个统一入口由网关负责认证、鉴权、限流、降级、日志和监控。Higress 在这个场景下被选中原因很直接——它本身基于 Istio 和 Envoy 内核天然具备云原生服务网格的流量治理能力同时又在传统 API 网关基础上迭代了 AI 网关功能对 OpenAI 协议、MCP 协议都有原生支持扩展性上支持 C、Go、Rust 写 Wasm 插件社区迭代节奏也快。这篇文章面向的是正在做 AI 网关选型、或者已经决定用 Higress 但卡在 MCP 接入和统一 Key 管理这一步的读者。我会把 Higress 的路由配置骨架、MCP 服务接入方式、以及如何通过 TaoToken 统一 API 通道接入 settings.json 的完整链路拆开讲最后给出连通性验证和模型调用的实际动作。你跟着做能跑通从网关选型到 MCP 服务落地的完整流程。2. TaoToken 前置统一 Key 与 API 通道的定位在携程的架构里网关负责的是“流量治理”但网关本身不生产模型能力。它需要对接后端的大模型服务而这些服务可能来自不同供应商认证方式、接口路径、模型名称映射规则都不一样。如果每个业务线自己去申请 Key、自己配环境变量那网关的集中管理就形同虚设。TaoToken 在这里的角色是“统一 API 通道”。它提供兼容 OpenAI 协议的接口你只需要一个 Key就能通过统一的 Base URL 访问多种模型。对于 Higress 网关来说这意味着后端模型服务的接入可以简化为一个标准的 OpenAI 兼容端点不需要为每个供应商单独写适配逻辑。具体来说TaoToken 的 API 地址是https://taotoken.net/api模型对话、Coding Plan、控制台、API Keys 管理、接入文档都有对应的 deep link。你在 Higress 里配置后端服务时只需要把 upstream 指向这个地址认证信息填 TaoToken 的 Key就能把模型调用统一收口。注意TaoToken 是合规的 API 通道服务不是灰色中转。它的接口协议标准适合作为 AI 网关的后端模型服务提供方。对于已经在用 Higress 做 AI 网关的团队TaoToken 的价值在于你不需要在网关里维护多套供应商的认证逻辑只需要一套 Bearer Token 机制就能覆盖多个模型的调用。这正好对应携程场景里“不同模型认证机制存在差异”的痛点。3. 可复制配置Higress 路由与 MCP 服务接入骨架3.1 Higress 基础环境与 AI 网关插件启用假设你已经有一个运行中的 Kubernetes 集群Higress 通过 Helm 安装。安装完成后需要启用 AI 网关相关的 Wasm 插件。Higress 的 AI 插件通常包括ai-proxy、ai-rate-limit、mcp-server等。先确认 Higress 版本和插件状态# 查看 Higress 网关 Pod 状态 kubectl get pods -n higress-system # 查看已加载的 Wasm 插件 kubectl get wasmplugin -A如果ai-proxy插件没有启用可以通过 Higress 控制台或 CRD 方式开启。这里以 CRD 为例apiVersion: extensions.higress.io/v1alpha1 kind: WasmPlugin metadata: name: ai-proxy namespace: higress-system spec: url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/ai-proxy:latest defaultConfig: provider: type: openai apiTokens: - sk-your-taotoken-key modelMapping: gpt-4: gpt-4 claude-3: claude-3-sonnet这段配置的核心是provider.type: openai因为 TaoToken 兼容 OpenAI 协议所以网关侧不需要做额外的协议转换。apiTokens填你在 TaoToken 控制台生成的 KeymodelMapping用来做模型别名映射——调用方可以用统一别名网关转发时替换为实际模型名。3.2 Higress 路由配置消费者隔离与模型路由携程场景里不同消费者有不同的接入点路径每个路径关联多个模型路由。在 Higress 里这通过McpBridge和HttpRoute配合实现。先定义后端服务apiVersion: networking.higress.io/v1alpha1 kind: McpBridge metadata: name: taotoken-bridge namespace: higress-system spec: registries: - name: taotoken type: dns domain: taotoken.net port: 443然后配置路由把/api/chat路径转发到 TaoToken 的/v1/chat/completionsapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ai-gateway-route namespace: higress-system annotations: higress.io/backend-protocol: HTTPS higress.io/rewrite-target: /v1/chat/completions spec: ingressClassName: higress rules: - host: ai-gateway.internal http: paths: - path: /api/chat pathType: Prefix backend: service: name: taotoken-service port: number: 443这里的关键是rewrite-target把外部调用路径重写为 TaoToken 的标准 OpenAI 路径。消费者只需要访问https://ai-gateway.internal/api/chat网关自动完成路径转换和认证注入。3.3 MCP 服务接入SSE 与 Streamable HTTP 配置MCP 服务接入是携程场景里的另一个重点。Higress 支持将存量 HTTP API 转化为 MCP 服务也支持直接接入现有 MCP Server。对于 SSE 方式网关需要做会话管理因为 SSE 是请求与响应分离的设计。在 Higress 里配置 MCP Server 的 SSE 端点apiVersion: networking.higress.io/v1alpha1 kind: McpServer metadata: name: travel-mcp-server namespace: higress-system spec: type: sse endpoint: /mcp/sse backend: service: name: travel-api-service port: number: 8080 session: store: redis redis: host: redis.higress-system.svc.cluster.local port: 6379网关会为每个 SSE 连接生成 SessionID并在 Redis 里监听关联 Channel。客户端请求/mcp/sse启动会话后网关返回 Endpoint 信息后续请求通过该 Endpoint 发起响应数据发布到 Redis Channel再推送给客户端。对于 Streamable HTTP 方式配置更简单不需要会话管理apiVersion: networking.higress.io/v1alpha1 kind: McpServer metadata: name: travel-mcp-http namespace: higress-system spec: type: streamable-http endpoint: /mcp/http backend: service: name: travel-api-service port: number: 80803.4 TaoToken 接入 settings.json 的配置示例如果你在本地开发环境或者 CI 流程里需要直接调用 TaoToken而不是经过 Higress 网关可以在settings.json里配置统一通道。这个文件通常用于 Claude Code 或其他支持 OpenAI 兼容接口的工具。{ apiBase: https://taotoken.net/api, apiKey: sk-your-taotoken-key, model: gpt-4, models: { gpt-4: { provider: openai, maxTokens: 4096 }, claude-3: { provider: openai, maxTokens: 8192 } }, gateway: { enabled: true, endpoint: https://ai-gateway.internal/api/chat, fallback: https://taotoken.net/api } }这里apiBase指向 TaoToken 的 API 地址gateway.endpoint指向 Higress 网关的内部地址。当网关可用时走网关网关不可用时 fallback 到直连 TaoToken。这种双通道设计在携程场景里对应的是“降级”机制——网关本身故障时业务不至于完全中断。4. 验证请求与成功结果配置完成后需要验证网关连通性和模型调用是否正常。分三步走。第一步验证 Higress 网关到 TaoToken 的连通性。在网关 Pod 里执行 curlkubectl exec -it -n higress-system deploy/higress-gateway -- \ curl -s -o /dev/null -w %{http_code} \ https://taotoken.net/api/v1/models \ -H Authorization: Bearer sk-your-taotoken-key如果返回200说明网关到 TaoToken 的网络通路和认证都正常。如果返回401检查 Key 是否正确如果返回403检查 TaoToken 控制台里该 Key 的权限范围。第二步通过网关路由发起模型调用curl -X POST https://ai-gateway.internal/api/chat \ -H Content-Type: application/json \ -H Authorization: Bearer consumer-token \ -d { model: gpt-4, messages: [ {role: user, content: 用一句话介绍杭州西湖} ], max_tokens: 100 }预期返回{ id: chatcmpl-xxx, object: chat.completion, created: 1730000000, model: gpt-4, choices: [ { index: 0, message: { role: assistant, content: 杭州西湖是中国著名的淡水湖以断桥残雪、雷峰夕照等十景闻名。 }, finish_reason: stop } ], usage: { prompt_tokens: 15, completion_tokens: 28, total_tokens: 43 } }这里Authorization填的是消费者 Token不是 TaoToken 的 Key。网关会根据消费者 Token 做鉴权然后注入 TaoToken 的 Key 转发请求。usage字段里的 Token 消耗数据会被网关记录到日志用于后续的用量统计和费用分摊。第三步验证 MCP 服务接入。通过 SSE 方式连接 MCP Servercurl -N https://ai-gateway.internal/mcp/sse \ -H Accept: text/event-stream预期返回event: endpoint data: /mcp/messages?sessionIdabc123 event: message data: {jsonrpc:2.0,method:tools/list,result:{tools:[{name:search_travel,description:搜索旅游产品}]}}如果能看到tools/list返回的工具列表说明 MCP 服务接入成功。网关已经完成了会话创建、工具描述转换和响应推送。5. 本篇常见错排查5.1 网关返回 502 Bad Gateway最常见的原因是 Higress 到 TaoToken 的 DNS 解析失败或 TLS 握手异常。先检查McpBridge里的domain配置是否正确然后确认网关 Pod 能否解析taotoken.netkubectl exec -it -n higress-system deploy/higress-gateway -- nslookup taotoken.net如果解析正常但依然 502检查backend-protocol注解是否设为HTTPS。TaoToken 的 API 地址是 HTTPS如果网关按 HTTP 转发TLS 握手会失败。5.2 模型调用返回 401 Unauthorized分两种情况。如果网关日志显示 TaoToken 返回 401说明apiTokens里的 Key 无效或过期去 TaoToken 控制台重新生成。如果网关日志显示消费者鉴权失败说明请求头里的Authorization不是有效的消费者 Token检查网关的消费者配置和 Token 关联关系。5.3 MCP SSE 连接建立后无响应SSE 方式依赖 Redis 做会话管理。如果 Redis 连接失败网关无法监听 Channel响应数据就推不回来。检查 Redis 服务是否可达kubectl exec -it -n higress-system deploy/higress-gateway -- \ redis-cli -h redis.higress-system.svc.cluster.local ping返回PONG说明 Redis 正常。如果 Redis 正常但依然无响应检查McpServer配置里的session.store是否设为redis以及redis.host是否填写正确。5.4 模型名称映射不生效如果调用时指定了别名但网关没有替换为实际模型名检查ai-proxy插件的modelMapping配置。注意modelMapping的 key 是调用方使用的别名value 是实际转发给 TaoToken 的模型名。如果 value 填错TaoToken 会返回model not found。5.5 限流规则未生效Higress 的 AI 限流依赖 Wasm 插件和 Redis 计数器。如果限流没生效先确认ai-rate-limit插件是否加载然后检查 Redis 里是否有对应的计数器 key。限流阈值支持 TPM、QPM 和并发请求数三种配置时注意单位。6. 从网关选型到落地的下一步Higress 作为 AI 网关的基础核心优势在于它把流量治理和大模型接入统一到了一个控制面。携程的实践里网关组件部署在内部 Kubernetes 集群Controller 从 K8s 读取配置推送给 GatewayManagement API 对接内部机器学习平台。这套架构的可复制性很强你不需要照搬携程的全部实现但可以把关键链路拆出来用 Higress 做统一入口用 TaoToken 做统一 API 通道用 MCP 协议把存量 HTTP API 转化为 AI 可调用的工具。如果你正在做网关连通性排障或接入配置建议先看 TaoToken 的 API Keys 管理和接入文档把 Key 和 Base URL 确认清楚。如果你需要验证模型调用是否符合预期可以直接在模型对话里测试 TaoToken 的接口。如果你在做长期的编码或 Agent 场景Coding Plan 提供了更稳定的调用配额和模型映射能力。实际落地时我建议先把一个最简单的模型调用链路跑通——Higress 路由到 TaoToken返回一个 chat completion 响应。然后再逐步加上 MCP 服务接入、限流、降级和日志。不要一上来就把所有治理功能全开那样排查问题会很痛苦。先把主链路跑通再叠治理能力这是我在多个网关项目里验证过的节奏。
返回列表