AI Agent的开发,不少团队都经历过这种过山车式的体验:一开始一两天就能搓出一个原型,兴奋劲还没过,随着需求增加和生产环境的要求,系统很快就变得像一团乱麻。
举个例子:用户一句模糊的指令,到底该交给哪个Agent处理?怎么把自然语言稳定地转成对外部API的调用?当任务在不同的Agent之间流转时,上下文又该怎么保持连贯?
这时候,应用早就不是那个单一功能的小玩具了,开发者从快速实现原型的成就感,一下子跌进维护混乱Pipeline的泥潭里——配置管理、多任务路由、多个大模型组合、上下文管理、限流均衡,甚至安全防护,这些跟业务关系不大的脏活累活,一样都躲不掉。
那么,这些共性问题有没有统一的解法?其实,借鉴云原生里gateway和service mesh的思路,把公共逻辑从应用逻辑里剥离出来,交给基础设施统一处理,是个很自然的方向。原本的一些云原生产品,比如Higress、Traefik、Kong,都在快速迭代,聚焦大模型应用的特有问题,朝AI gateway进化。

今天要聊的,是一款完全新设计的、开源的AI原生gateway项目——Arch Gateway。它把自己定位为AI应用的智能数据平面与通用袋里层,相当于AI时代的Envoy Proxy。它的核心理念是:用户的Prompt本质上是一种新型的、充满不确定性的“请求”,理应像处理HTTP请求一样,在应用逻辑之外,由一个强大的袋里层来负责路由、解析、安全和观测。

智能路由与工具调用
Arch的核心能力,体现在它如何通过一份声明式的arch_config.yaml文件,在袋里层把用户意图转化为具体的模型服务分发或工具调用。整个过程对上游的应用完全透明——应用层只管发一个简单的聊天请求,复杂的意图识别、参数提取和工具调用,全部由Arch在网络层面袋里完成。

拿一个外汇查询Agent来说,关键配置就在prompt_targets里:
prompt_targets:
- name: currency_exchange
description: Get currency exchange rate from USD to other currencies
# (1) 描述,用于意图匹配
parameters:
- name: currency_symbol
description: the currency that needs conversion
required: true
type: str
# (2) 参数定义
endpoint:
name: frankfurther_api
path: /v1/latest?base=USD&symbols={currency_symbol}
# (3) 目标 API
当一个请求 {"messages": [{"role": "user", "content": "what is exchange rate for gbp"}]} 到达Arch时,内部处理流程是这样的:
- 意图路由:Arch内置的、专为这个场景训练的轻量级LLM(响应时间 <100ms)读取请求内容,和
prompt_targets里所有条目的description字段做语义匹配,精准判断出用户意图是currency_exchange。 - 参数提取:确定目标后,Arch按照
parameters的定义,从用户内容里提取出currency_symbol的值为“gbp”。 - API调用:Arch构造出最终的API请求路径
/v1/latest?base=USD&symbols=gbp,然后调用endpoints里定义的frankfurther_api。 - 上下文注入与最终生成:Arch拿到API返回的JSON响应,然后把它和原始问题一起作为上下文,发给
llm_providers里定义的通用大模型(比如gpt-4o),生成最终给用户的自然语言回答。
统一的LLM访问网关
在多模型策略中,Arch扮演的是LLM流量路由器的角色——作为大模型流量的唯一入口,把模型管理的复杂性从应用代码里剥离出来。
开发者可以在arch_config.yaml里定义多个llm_providers,每个都有自己的模型名和密钥。
llm_providers:
- name: gpt-4o
access_key: $OPENAI_API_KEY
provider: openai
model: gpt-4o
default: true
- name: ministral-3b
access_key: $MISTRAL_API_KEY
provider: openai
model: ministral-3b-latest
这样一来,应用代码的集成变得极其干净。比如使用OpenAI的Python客户端时,只需要把base_url指向Arch,真正的密钥由Arch集中管理:
from openai import OpenAI
client = OpenAI(
api_key = '--', # 密钥由Arch统一管理
base_url = "https://127.0.0.1:12000/v1" # 所有请求指向Arch
)
默认情况下,所有请求会路由到default: true的模型。如果需要为特定请求切换模型(比如做A/B测试),只需在HTTP请求里加一个Header:x-arch-llm-provider-hint: ministral-3b。模型选择的控制权直接下放到了基础设施层,应用代码完全不用改。

同时,它还自带安全护栏功能,能有效避免模型攻击。
系统调试与可观测性
Arch基于Envoy构建,继承了它优秀的日志和追踪能力,为诊断AI系统的“黑盒”行为提供了关键数据。当运行archgw up --foreground时,日志会清晰地记录执行路径:
...[info] prompt_gateway: on_http_call_response: dispatching api call to endpoint: frankfurther_api...
...[info] prompt_gateway: on_http_call_response: developer api call response received: status code: 200
...[info] llm_gateway: on_http_response_body: time to first token: 1468ms
...[info] llm_gateway: on_http_response_body: request latency: 3183ms
这些日志把性能问题从“感觉很慢”变成了可度量的分析:你可以精确看到API调用是否成功、外部服务响应了多久、LLM生成首token的延迟(TTFT)是多少。

小结
云原生时代的成功实践,在大模型时代依然有用。服务分层、职责分离的设计原则,是系统复杂度增加后的必然选择。Arch Gateway这样的产品正是在这个背景下诞生的——它提供了一种清晰的架构分离,把AI应用中可复用的、与基础设施相关的部分(路由、工具调用、模型访问、观测)沉淀下来,让开发者能更专注于实现核心的业务价值Agent逻辑,从而更快、更可靠地构建出强大的AI应用。
