Spring?AI?Alibaba框架構(gòu)建智能體Agent的完整指南
前言
隨著大語言模型(LLM)技術(shù)的快速發(fā)展,構(gòu)建智能Agent應(yīng)用變得越來越簡單。本文將通過兩個(gè)實(shí)際的代碼示例,展示如何使用Spring AI Alibaba框架構(gòu)建功能豐富的天氣查詢Agent,從基礎(chǔ)的測試實(shí)現(xiàn)到生產(chǎn)級(jí)的完整應(yīng)用。
技術(shù)棧概述
- Spring AI Alibaba: 阿里巴巴開源的AI應(yīng)用開發(fā)框架
- DashScope: 阿里云的AI模型服務(wù)平臺(tái)
- React Agent: 基于ReAct(Reasoning and Acting)范式的智能代理
示例一:SimpleTest - 快速入門
添加核心依賴
<dependencies>
<!-- Spring AI Alibaba Agent Framework -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-agent-framework</artifactId>
<version>1.1.2.0</version>
</dependency>
<!-- DashScope ChatModel 支持(如果使用其他模型,請(qǐng)?zhí)D(zhuǎn) Spring AI 文檔選擇對(duì)應(yīng)的 starter) -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
<version>1.1.2.0</version>
</dependency>
</dependencies>代碼結(jié)構(gòu)分析
@Test
void agentTest() throws GraphRunnerException {
// 1. 初始化 DashScope API
DashScopeApi dashScopeApi = DashScopeApi.builder()
.apiKey(System.getenv("AliQwen_API"))
.build();
// 2. 創(chuàng)建 ChatModel
ChatModel chatModel = DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi)
.build();
// 3. 定義天氣工具
ToolCallback weatherTool = FunctionToolCallback.builder("get_weather", new WeatherTool())
.description("獲取某個(gè)城市的天氣")
.inputType(String.class)
.build();
// 4. 構(gòu)建React Agent
ReactAgent agent = ReactAgent.builder()
.name("weather_agent")
.model(chatModel)
.tools(weatherTool)
.systemPrompt("你是一個(gè)非常有幫助的助手")
.saver(new MemorySaver())
.build();
// 5. 調(diào)用Agent
AssistantMessage response = agent.call("上海今天天氣怎么樣?");
System.out.println(response.getText());
}
核心特性
- 簡潔的配置: 通過Builder模式快速構(gòu)建Agent
- 工具集成: 使用
FunctionToolCallback將自定義函數(shù)包裝為Agent可調(diào)用的工具 - 內(nèi)存存儲(chǔ): 使用
MemorySaver保存對(duì)話歷史 - 中文支持: 完整的中文提示詞和工具描述
自定義工具實(shí)現(xiàn)
class WeatherTool implements BiFunction<String, ToolContext, String> {
@Override
public String apply(String city, ToolContext toolContext) {
return city + "今天天氣非常好!";
}
}
這個(gè)簡單的工具類展示了如何將業(yè)務(wù)邏輯封裝為Agent可調(diào)用的函數(shù)。
示例二:RealAgent - 真實(shí)的智能體
高級(jí)特性概覽
相比SimpleTest,RealAgent展示了更多生產(chǎn)級(jí)特性:
- 精細(xì)的模型配置
- 多工具協(xié)同
- 結(jié)構(gòu)化輸出
- 對(duì)話上下文管理
核心代碼解析
1. 系統(tǒng)提示詞設(shè)計(jì)
String SYSTEM_PROMPT = """
你是一位擅長說**天氣冷笑話/諧音梗**的專業(yè)天氣預(yù)報(bào)員。
你可以使用兩個(gè)工具:
- **get_weather_for_location**:用于獲取指定地點(diǎn)的天氣
- **get_user_location**:用于獲取用戶當(dāng)前所在位置
如果用戶詢問天氣,**必須先確認(rèn)地點(diǎn)**。
如果從問題中能判斷出他們指的是**自己所在的地方**,
就使用 **get_user_location** 工具獲取他們的位置。
""";
這個(gè)提示詞體現(xiàn)了幾個(gè)重要設(shè)計(jì)原則:
- 角色定位: 明確Agent的身份和特色
- 工具說明: 清晰描述可用工具的功能
- 行為約束: 規(guī)定了工具使用的邏輯順序
2. 模型參數(shù)優(yōu)化
ChatModel chatModel = DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi)
.defaultOptions(DashScopeChatOptions.builder()
.model(DashScopeChatModel.DEFAULT_MODEL_NAME)
.temperature(0.5) // 平衡創(chuàng)造性和準(zhǔn)確性
.maxToken(1000) // 控制響應(yīng)長度
.build())
.build();
3. 多工具協(xié)同
// 天氣查詢工具
ToolCallback getWeatherTool = FunctionToolCallback
.builder("getWeatherForLocation", new WeatherForLocationTool())
.description("獲取一個(gè)給定城市的天氣")
.inputType(String.class)
.build();
// 用戶定位工具
ToolCallback getUserLocationTool = FunctionToolCallback
.builder("getUserLocation", new UserLocationTool())
.description("根據(jù)User Id獲取用戶位置")
.inputType(String.class)
.build();
4. 結(jié)構(gòu)化輸出配置
ReactAgent agent = ReactAgent.builder()
// ... 其他配置
.outputType(ResponseFormat.class) // 指定輸出格式
.hooks(humanInTheLoopHook)
.build();
5. 對(duì)話上下文管理
RunnableConfig runnableConfig = RunnableConfig.builder()
.threadId(Thread.currentThread().getId() + "")
.build();
// 第一次調(diào)用
AssistantMessage response1 = agent.call("上海今天天氣怎么樣", runnableConfig);
// 第二次調(diào)用(保持上下文)
AssistantMessage response2 = agent.call("明天天氣怎么樣", runnableConfig);
通過RunnableConfig的threadId實(shí)現(xiàn)多輪對(duì)話的上下文保持。
總結(jié)
通過這兩個(gè)示例,我們可以看到Spring AI Alibaba框架在構(gòu)建智能Agent應(yīng)用方面的強(qiáng)大能力:
- SimpleTest展示了快速原型開發(fā)的能力,適合概念驗(yàn)證和學(xué)習(xí)
- RealAgent則創(chuàng)建了一個(gè)基礎(chǔ)的 ReactAgent,接下來可以:
- 探索更多的工具集成
- 學(xué)習(xí)如何使用不同的 Checkpoint 實(shí)現(xiàn)對(duì)話持久化
- 了解如何使用 Hooks 擴(kuò)展 agent 功能
- 學(xué)習(xí)如何創(chuàng)建多 agent 系統(tǒng)
到此這篇關(guān)于Spring AI Alibaba框架構(gòu)建智能體Agent的完整指南的文章就介紹到這了,更多相關(guān)Spring AI Alibaba構(gòu)建智能體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決javac不是內(nèi)部或外部命令,也不是可運(yùn)行程序的報(bào)錯(cuò)問題
在學(xué)著使用Java的命令行來編譯java文件的時(shí)候,遇到了這個(gè)問題,本文主要介紹了解決javac不是內(nèi)部或外部命令,也不是可運(yùn)行程序的報(bào)錯(cuò)問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Spark調(diào)優(yōu)多線程并行處理任務(wù)實(shí)現(xiàn)方式
這篇文章主要介紹了Spark調(diào)優(yōu)多線程并行處理任務(wù)實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot實(shí)現(xiàn)簡易支付寶網(wǎng)頁支付功能
小編最近實(shí)現(xiàn)一個(gè)功能基于springboot程序的支付寶支付demo,非常不錯(cuò)適合初學(xué)者入門學(xué)習(xí)使用,今天把SpringBoot實(shí)現(xiàn)簡易支付寶網(wǎng)頁支付功能的示例代碼分享給大家,感興趣的朋友參考下吧2021-10-10
Java獲取Prometheus監(jiān)控?cái)?shù)據(jù)的方法實(shí)現(xiàn)
本文主要介紹了Java獲取Prometheus監(jiān)控?cái)?shù)據(jù)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
多個(gè)版本Java切換環(huán)境變量配置的三種高效方法
這篇文章主要為大家詳細(xì)介紹了多個(gè)版本Java切換環(huán)境變量配置的三種高效方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-10-10
Spring?Bean注冊(cè)與注入實(shí)現(xiàn)方法詳解
首先,要學(xué)習(xí)Spring中的Bean的注入方式,就要先了解什么是依賴注入。依賴注入是指:讓調(diào)用類對(duì)某一接口的實(shí)現(xiàn)類的實(shí)現(xiàn)類的依賴關(guān)系由第三方注入,以此來消除調(diào)用類對(duì)某一接口實(shí)現(xiàn)類的依賴。Spring容器中支持的依賴注入方式主要有屬性注入、構(gòu)造函數(shù)注入、工廠方法注入2022-10-10
深度解析Java中內(nèi)存溢出(OOM)的典型案例與避坑指南
內(nèi)存溢出(OOM)依然是生產(chǎn)環(huán)境中常見的隱形殺手,本文通過三個(gè)真實(shí)案例,揭示業(yè)務(wù)代碼中容易忽略的OOM場景,并給出解決方案,助你從根本上避免類似問題2026-04-04

