借助Spring AI,快速為AI Agent搭建API網關
本文教大家如何實現一個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融合的實踐中取得更多成果,挖掘更多應用可能。