借助Spring AI,快速為AI Agent搭建API網(wǎng)關(guān)
本文教大家如何實(shí)現(xiàn)一個(gè)API網(wǎng)關(guān),以便AI代理(AI Agents)能夠訪問(wèn)REST API服務(wù)。
圖片
一、工具與 AI 代理:大語(yǔ)言模型的得力助手
工具或函數(shù)是大語(yǔ)言模型(LLM)用于從提示中識(shí)別函數(shù)調(diào)用的機(jī)制。
大語(yǔ)言模型擅長(zhǎng)生成自然語(yǔ)言文本,這對(duì)人類而言十分友好,但機(jī)器需要的是特定答案,二者需求不同。此時(shí),工具就發(fā)揮了重要作用,它能協(xié)助大語(yǔ)言模型返回函數(shù)調(diào)用描述,而非人類化的文本。目前,多數(shù)模型都支持工具的使用,在實(shí)際運(yùn)用時(shí),需將函數(shù)模式融入提示中,示例如下:
{
"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代理,它們被賦予一組工具,通過(guò)執(zhí)行相應(yīng)動(dòng)作來(lái)完成任務(wù)。
二、基于 OpenAPI 規(guī)范,定義 AI 工具
OpenAPI 是專門用于描述 Web 服務(wù)或 REST API 服務(wù)所暴露操作的規(guī)范。想要讓 AI 代理能夠調(diào)用 Web 服務(wù),只需把 API 的 OpenAPI 規(guī)范與 AI 工具進(jìn)行映射即可。

三、使用Spring AI搭建 API 網(wǎng)關(guān)
這里使用Spring AI提供的庫(kù),用Java實(shí)現(xiàn)一個(gè)API網(wǎng)關(guān),將注冊(cè)的Web服務(wù)映射到人工智能工具。以下圖表展示了API網(wǎng)關(guān)的主要用例:服務(wù)注冊(cè)和請(qǐng)求處理。
圖片
從本質(zhì)上講,API 網(wǎng)關(guān)可以看作是一個(gè) AI 代理,它借助網(wǎng)關(guān)中注冊(cè)的 REST API 服務(wù)來(lái)完成各類任務(wù)。
3.1 使用Spring AI實(shí)現(xiàn)工具功能
Spring AI支持調(diào)用類方法或函數(shù)的工具,但由于我們需要調(diào)用REST API,所以需要實(shí)現(xiàn)一種新的工具類型。我們將其命名為 OpenAPIToolCallback,它會(huì)實(shí)現(xiàn) Spring AI 規(guī)定的 ToolCallback 接口。OpenAPIToolCallback 承擔(dān)以下職責(zé):
- 將OpenAPI規(guī)范映射到工具定義。
- 向大語(yǔ)言模型提供函數(shù)定義。
- 使用大語(yǔ)言模型確定的輸入調(diào)用REST API。
3.2 使用Spring AI實(shí)現(xiàn) AI 代理
執(zhí)行任務(wù)的代理采用簡(jiǎn)單的 ReAct 代理,它會(huì)不斷調(diào)用 REST API,直至任務(wù)完成。這個(gè)代理會(huì)配備一組依據(jù)已注冊(cè) REST API 服務(wù)的 OpenAPI 規(guī)范定義的工具。
3.3 配置MCP協(xié)議
Spring AI實(shí)現(xiàn)了MCP協(xié)議,并提供了Spring Boot啟動(dòng)器來(lái)設(shè)置MCP服務(wù)器。API網(wǎng)關(guān)將使用Spring的MCP Server Boot Starter來(lái)暴露MCP協(xié)議,MCP服務(wù)器將利用已注冊(cè)的REST API服務(wù)來(lái)處理請(qǐng)求 —— 記住,API會(huì)與OpenAPIToolCallback類型的工具進(jìn)行映射。
四、API 網(wǎng)關(guān)使用指南
- 注冊(cè)服務(wù):在 application.yaml 文件中配置 REST API 服務(wù)的 URL。網(wǎng)關(guān)會(huì)根據(jù)服務(wù)的 OpenAPI 規(guī)范,為每個(gè)操作注冊(cè)對(duì)應(yīng)的工具。
formentor:
ai:
services:
# 用于預(yù)訂酒店的“booking”服務(wù)
- "http://localhost:8080/v3/api-docs.yaml"
# 用于獲取酒店信息的“product”服務(wù)
- "http://localhost:8082/v3/api-docs.yaml"2.啟動(dòng)大語(yǔ)言模型:目前,API網(wǎng)關(guān)支持由Ollama服務(wù)器提供的模型,也可以使用云服務(wù)提供商的模型。
ollama serve
# 拉取llama3.1:8b模型(如有必要)
ollama pull llama3.1:8b3.啟動(dòng)API網(wǎng)關(guān):作為Spring Boot服務(wù),可以使用Maven的spring-boot插件啟動(dòng)。
cd ai-api-gateway
mvn spring-boot:run4.向API網(wǎng)關(guān)發(fā)送請(qǐng)求:
# 獲取馬德里的可用酒店
curl --location 'http://localhost:7001/invoke?m=Give me hotels in Madrid'
# 獲取2025年8月5日在卡斯蒂利亞酒店入住5晚的價(jià)格
curl --location 'http://localhost:7001/invoke?m=How much does it cost 5 night in Hotel Castilla for 2025/08/05'通過(guò)上述步驟,我們成功構(gòu)建了一個(gè)能讓AI代理訪問(wèn)REST API服務(wù)的API網(wǎng)關(guān)。從工具與AI代理的協(xié)作原理,到OpenAPI規(guī)范的運(yùn)用、Spring AI的技術(shù)實(shí)現(xiàn),再到實(shí)際的使用方法,每個(gè)環(huán)節(jié)緊密相連。
希望本文能為大家在相關(guān)領(lǐng)域的探索提供有益參考,助力大家在AI與API融合的實(shí)踐中取得更多成果,挖掘更多應(yīng)用可能。



































