Agoda的工程师们开发了API Agent——这一无需编写任何代码也无需进行任何部署的系统,它能够让单个Model Context Protocol(MCP)服务器连接到内部的REST或GraphQL API。该系统的设计目的在于减少管理具有不同架构和认证方式的多个API所带来的运营开销,从而使团队能够通过AI助手来查询这些服务,而无需为每个API单独构建MCP服务器。
API Agent实际上就是一个通用的MCP服务器。工程师们只需为MCP客户端配置目标URL和API类型,该系统就会自动分析API的架构,并根据自然语言输入生成相应的查询语句。一次部署就可以同时服务于多个API;对于客户端而言,每个API都会显示为一个独立的MCP服务器,但实际上它们共享同一个实例。如果要添加新的API,只需要进行一次配置更新即可。
Agoda的首席技术官Idan Zalzberg在一份新闻稿中提到:
许多团队都希望将内部工具用于AI开发,但为每一个工具单独编写MCP代码是一项耗时巨大的工作。API Agent采用了一种全新的、无需耗费任何精力的方法来实现这一目标;据我们所知,它是目前市面上第一个这样的工具。
该系统的架构中包含了一个用于分析API架构的模块。当配置好目标API后,这个模块会动态地获取该API的架构信息。对于GraphQL,它会提取类型、字段和输入参数;而对于REST API,它则会利用OpenAPI规范或JSON响应格式来生成查询语句。这样一来,该系统就不需要预先准备任何适配器就能完成查询功能。
该系统的技术架构包括用于实现MCP功能的FastMCP服务器、用于协调语言模型运行的OpenAI Agents SDK,以及用于进行内存中SQL数据后处理的DuckDB。此外,该系统还具备动态命名工具、针对大型API进行架构搜索、支持多步骤查询的跟踪功能,同时还提供了通过OpenTelemetry、Jaeger、Zipkin、Grafana Tempo或Arize Phoenix进行监控的能力。
API代理的内部工作机制(来源:Agoda Engineering Blog)
API返回的结果可能包含数千行数据,这些数据可能会超出大型语言模型的处理范围,从而导致结果被截断。API代理通过使用DuckDB中的SQL作为上下文管理机制来解决这个问题。所有API返回的数据都会先被存储在SQL数据库中,然后经过过滤和汇总处理,最终只有简洁的结果会被发送给大型语言模型进行处理。DuckDB是在进程内部运行的,它能够原生地处理JSON数据,并且能自动推断数据的结构。使用SQL进行后处理可以避免随意执行代码,同时也能确保与大型语言模型的查询生成机制兼容。
安全性是API代理默认就具备的功能。该代理以只读模式运行,除非被明确启用并列入内部工具的白名单,否则任何修改操作都是被禁止的。
并且只会被允许用于内部工具。
API代理的安全机制(来源:Agoda Engineering Blog)
在实际使用中,需要注意一些关键点:当结果被截断时,需要及时与用户进行沟通;在处理数据时,应优先考虑数据的结构而非样本数据本身;还需要注意SQL语言的一些特殊之处;此外,应该向大型语言模型提供完整的错误信息,以便它们能够进行正确的处理。对于重复出现的查询请求,可以将它们转化为参数化的“模板”,这样就可以减少处理时间并降低延迟;同时,如果需要直接返回过滤后的数据,也可以让这些数据跳过汇总步骤。API代理支持在单次会话中同时对多个终端发起查询请求,并且能够处理连接操作和数据汇总工作。基于SQL的后处理机制避免了沙箱环境、网络隔离以及依赖性问题,其声明式的编程风格也非常适合与大型语言模型配合使用,从而确保了数据转换过程的安全性。该项目已在api-agent网站上开源,可供大家进行REST和GraphQL相关的实验。