本文教大家如何实现一个API网关,以便AI代理(AI Agents)能够访问REST API服务。
一、工具与 AI 代理:大语言模型的得力助手
工具或函数是大语言模型(LLM)用于从提示中识别函数调用的机制。
大语言模型擅长生成自然语言文本,这对人类而言十分友好,但机器需要的是特定答案,二者需求不同。此时,工具就发挥了重要作用,它能协助大语言模型返回函数调用描述,而非人类化的文本。目前,多数模型都支持工具的使用,在实际运用时,需将函数模式融入提示中,示例如下:
复制{ "messages": [ { "role": "user", "content": "Give me hotels in Madrid" } ], "tools": [ { "type": "function", "function": { "name": "getHotelsByDestination", "description": "Get hotels for a given destination", "parameters": { "type": "object", "properties": { "destination": { "type": "string", "description": "Destination where hotels are located e.g. Madrid, Paris" } } } } } ] }
工具的主要使用者是AI代理,它们被赋予一组工具,通过执行相应动作来完成任务。
二、基于 OpenAPI 规范,定义 AI 工具
OpenAPI 是专门用于描述 Web 服务或 REST API 服务所暴露操作的规范。想要让 AI 代理能够调用 Web 服务,只需把 API 的 OpenAPI 规范与 AI 工具进行映射即可。
三、使用Spring AI搭建 API 网关
这里使用Spring AI提供的库,用Java实现一个API网关,将注册的Web服务映射到人工智能工具。以下图表展示了API网关的主要用例:服务注册和请求处理。
从本质上讲,API 网关可以看作是一个 AI 代理,它借助网关中注册的 REST API 服务来完成各类任务。
3.1 使用Spring AI实现工具功能
Spring AI支持调用类方法或函数的工具,但由于我们需要调用REST API,所以需要实现一种新的工具类型。我们将其命名为 OpenAPIToolCallback,它会实现 Spring AI 规定的 ToolCallback 接口。OpenAPIToolCallback 承担以下职责:
- 将OpenAPI规范映射到工具定义。
- 向大语言模型提供函数定义。
- 使用大语言模型确定的输入调用REST API。
3.2 使用Spring AI实现 AI 代理
执行任务的代理采用简单的 ReAct 代理,它会不断调用 REST API,直至任务完成。这个代理会配备一组依据已注册 REST API 服务的 OpenAPI 规范定义的工具。
3.3 配置MCP协议
Spring AI实现了MCP协议,并提供了Spring Boot启动器来设置MCP服务器。API网关将使用Spring的MCP Server Boot Starter来暴露MCP协议,MCP服务器将利用已注册的REST API服务来处理请求 —— 记住,API会与OpenAPIToolCallback类型的工具进行映射。
四、API 网关使用指南
- 注册服务:在 application.yaml 文件中配置 REST API 服务的 URL。网关会根据服务的 OpenAPI 规范,为每个操作注册对应的工具。
formentor: ai: services: # 用于预订酒店的“booking”服务 - "http://localhost:8080/v3/api-docs.yaml" # 用于获取酒店信息的“product”服务 - "http://localhost:8082/v3/api-docs.yaml"
2.启动大语言模型:目前,API网关支持由Ollama服务器提供的模型,也可以使用云服务提供商的模型。
复制ollama serve # 拉取llama3.1:8b模型(如有必要) ollama pull llama3.1:8b
3.启动API网关:作为Spring Boot服务,可以使用Maven的spring-boot插件启动。
复制cd ai-api-gateway mvn spring-boot:run
4.向API网关发送请求:
复制# 获取马德里的可用酒店 curl --location 'http://localhost:7001/invoke?m=Give me hotels in Madrid' # 获取2025年8月5日在卡斯蒂利亚酒店入住5晚的价格 curl --location 'http://localhost:7001/invoke?m=How much does it cost 5 night in Hotel Castilla for 2025/08/05'
通过上述步骤,我们成功构建了一个能让AI代理访问REST API服务的API网关。从工具与AI代理的协作原理,到OpenAPI规范的运用、Spring AI的技术实现,再到实际的使用方法,每个环节紧密相连。
希望本文能为大家在相关领域的探索提供有益参考,助力大家在AI与API融合的实践中取得更多成果,挖掘更多应用可能。