前言
随着大语言模型(llm)技术的快速发展,构建智能agent应用变得越来越简单。本文将通过两个实际的代码示例,展示如何使用spring ai alibaba框架构建功能丰富的天气查询agent,从基础的测试实现到生产级的完整应用。
技术栈概述
- spring ai alibaba: 阿里巴巴开源的ai应用开发框架
- dashscope: 阿里云的ai模型服务平台
- 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 支持(如果使用其他模型,请跳转 spring ai 文档选择对应的 starter) -->
<dependency>
<groupid>com.alibaba.cloud.ai</groupid>
<artifactid>spring-ai-alibaba-starter-dashscope</artifactid>
<version>1.1.2.0</version>
</dependency>
</dependencies>代码结构分析
@test
void agenttest() throws graphrunnerexception {
// 1. 初始化 dashscope api
dashscopeapi dashscopeapi = dashscopeapi.builder()
.apikey(system.getenv("aliqwen_api"))
.build();
// 2. 创建 chatmodel
chatmodel chatmodel = dashscopechatmodel.builder()
.dashscopeapi(dashscopeapi)
.build();
// 3. 定义天气工具
toolcallback weathertool = functiontoolcallback.builder("get_weather", new weathertool())
.description("获取某个城市的天气")
.inputtype(string.class)
.build();
// 4. 构建react agent
reactagent agent = reactagent.builder()
.name("weather_agent")
.model(chatmodel)
.tools(weathertool)
.systemprompt("你是一个非常有帮助的助手")
.saver(new memorysaver())
.build();
// 5. 调用agent
assistantmessage response = agent.call("上海今天天气怎么样?");
system.out.println(response.gettext());
}
核心特性
- 简洁的配置: 通过builder模式快速构建agent
- 工具集成: 使用
functiontoolcallback将自定义函数包装为agent可调用的工具 - 内存存储: 使用
memorysaver保存对话历史 - 中文支持: 完整的中文提示词和工具描述
自定义工具实现
class weathertool implements bifunction<string, toolcontext, string> {
@override
public string apply(string city, toolcontext toolcontext) {
return city + "今天天气非常好!";
}
}
这个简单的工具类展示了如何将业务逻辑封装为agent可调用的函数。
示例二:realagent - 真实的智能体
高级特性概览
相比simpletest,realagent展示了更多生产级特性:
- 精细的模型配置
- 多工具协同
- 结构化输出
- 对话上下文管理
核心代码解析
1. 系统提示词设计
string system_prompt = """
你是一位擅长说**天气冷笑话/谐音梗**的专业天气预报员。
你可以使用两个工具:
- **get_weather_for_location**:用于获取指定地点的天气
- **get_user_location**:用于获取用户当前所在位置
如果用户询问天气,**必须先确认地点**。
如果从问题中能判断出他们指的是**自己所在的地方**,
就使用 **get_user_location** 工具获取他们的位置。
""";
这个提示词体现了几个重要设计原则:
- 角色定位: 明确agent的身份和特色
- 工具说明: 清晰描述可用工具的功能
- 行为约束: 规定了工具使用的逻辑顺序
2. 模型参数优化
chatmodel chatmodel = dashscopechatmodel.builder()
.dashscopeapi(dashscopeapi)
.defaultoptions(dashscopechatoptions.builder()
.model(dashscopechatmodel.default_model_name)
.temperature(0.5) // 平衡创造性和准确性
.maxtoken(1000) // 控制响应长度
.build())
.build();
3. 多工具协同
// 天气查询工具
toolcallback getweathertool = functiontoolcallback
.builder("getweatherforlocation", new weatherforlocationtool())
.description("获取一个给定城市的天气")
.inputtype(string.class)
.build();
// 用户定位工具
toolcallback getuserlocationtool = functiontoolcallback
.builder("getuserlocation", new userlocationtool())
.description("根据user id获取用户位置")
.inputtype(string.class)
.build();
4. 结构化输出配置
reactagent agent = reactagent.builder()
// ... 其他配置
.outputtype(responseformat.class) // 指定输出格式
.hooks(humanintheloophook)
.build();
5. 对话上下文管理
runnableconfig runnableconfig = runnableconfig.builder()
.threadid(thread.currentthread().getid() + "")
.build();
// 第一次调用
assistantmessage response1 = agent.call("上海今天天气怎么样", runnableconfig);
// 第二次调用(保持上下文)
assistantmessage response2 = agent.call("明天天气怎么样", runnableconfig);
通过runnableconfig的threadid实现多轮对话的上下文保持。
总结
通过这两个示例,我们可以看到spring ai alibaba框架在构建智能agent应用方面的强大能力:
- simpletest展示了快速原型开发的能力,适合概念验证和学习
- realagent则创建了一个基础的 reactagent,接下来可以:
- 探索更多的工具集成
- 学习如何使用不同的 checkpoint 实现对话持久化
- 了解如何使用 hooks 扩展 agent 功能
- 学习如何创建多 agent 系统
到此这篇关于spring ai alibaba框架构建智能体agent的完整指南的文章就介绍到这了,更多相关spring ai alibaba构建智能体内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论