
app应用怎么集成AI Agent(智能代理)
- 为什么会有这篇文章(先废话一顿)
- [什么是ai agent](#什么是ai agent)
-
- 大模型(LLM)
- 工具(Tools)
- 记忆(Memory)
- 流程引擎
- 目前程序可以用ai做哪些事情
- [快速实现应用集成AI Agent](#快速实现应用集成AI Agent)
- 小结
为什么会有这篇文章(先废话一顿)
楼主搬新家后准备装一个宽带来着,然后打开某移动APP,发现他们家app下面有个什么ai灵犀,带个语音识别助手,我就点开玩了玩,给他说我要装一个宽带,一通识别后转到了一个宽带登记信息页。如下:
app中的ai跳转页面演示
担心视频失效 加俩张图解
**这个时候我的好奇心就来了,发语音识别的文字跳转指定页面,这不妥妥有手就行,查话费跳话费页面,查余额跳余额页面。。。 这个时候想着想着也可以这样,加一个type,1的话返回指定url跳转页面,2的话返回指定json数据页面渲染,3的话让他重新描述,4的话说明碰到复杂问题给他自动转人工。回过头来,这些都不难,那我咋知道发来的字符串是什么意思呢。没错,就是原神。走错了, 重来,没错就是葵花宝典大模型(ai)。**正文开始
什么是ai agent
AI Agent(智能代理) 是一个能自主感知环境、决策并执行任务的智能程序,通常由 大模型(LLM) + 工具(Tools) + 记忆(Memory) + 流程控制 组成。
是不是看完更不懂了,什么跟什么啊,上面我复制百度的,看我多老实。
大模型(LLM)
2022年11月30日 推出了ChatGPT,这一款基于GPT-3.5的对话机器人,可以与用户进行交互式的聊天。同年12月,ChatGPT爆红,全球造访量至少17亿用户,成为了历史上用户量增长最快的应用程序。
是不是感觉上面的文案写的太专业,没错我又复制百度的,
截止到目前 2025年全球发布大模型3755个,中国占1509个(超40%)。
数量为啥这么多,那就跟开源有关系了,我就蹭蹭不进去嘿嘿嘿😈。
ChatGPT都已经爆了3年了,子弹飞的时间够长了,ChatGPT引爆之后大模型像原神一样越来越多,对程序方方面面的影响也是方方面面,没错就是这些方面,就比如
- 之前我写前端页面找一个问题可能要很久,现在直接打开deepseek,开启新对话,把产品需要的页面图片复制进来,再加上清楚的描述,分分钟给你出一个页面。
- 还看到过大佬用的一个收费模型 只需要描述清楚就可以编译出来程序,可以自我升级迭代,分mac和window版
- 代码有问题了,问它也能做到90%+的问题命中率。
- 代码优化方面的 技术瓶颈的都可以找它,分分钟给你答案
- 我写博客也会找他帮我润色润色文案
- 还看到刚开始好多大哥拿这个回答做视频号赚钱提现的
工具(Tools)
Agent 可调用的外部方法(如查询数据库、调用API)
这里就是跳转页面,查询订单状态,自动退款等api交互的地方,也就是系统内部提供api,ai通过description判断执行哪个方法。我们可以把返回值固定,实现楼上的设想。
bash
@Service
@Slf4j
public class OrderToolsService {
@Tool(name = "getOrderStatus", description = "根据订单号查询订单状态")
public String getOrderStatus(
@ToolParam(description = "订单号") String orderNo
){
log.info("查询订单状态:{}", orderNo);
return "订单 " + orderNo + " 正在提车中,车辆将在3个工作周内到账";
}
@Tool(name = "getWeather", description = "查询城市天气")
public String getWeather(
@ToolParam(description = "城市名称") String city
) {
log.info("查询城市天气:{}", city);
return city + ":晴天,25℃";
}
}
bash
@Configuration
public class AIConfig {
@Bean
public ChatClient chatClient(
ChatClient.Builder builder,
OrderToolsService orderToolsService // 注入工具
) {
return builder
.defaultTools(orderToolsService)
.defaultSystem("你是一名车辆订单助手,帮助用户查询订单状态和操作方法")
.build();
}
}
记忆(Memory)
存储历史对话或业务数据,支持上下文感知,集成 VectorStore(RAG)或 Redis 存储
将 PDF/文本格式的退改签规则存入向量数据库,训练大模型。
比如一些特定的业务场景,我们通过excel加入到规则中,大模型也会在这些规则中匹配客户想要的答案
流程引擎
控制多步骤任务(如先查订单→再触发退款) 阿里 DFlow
比如 你在拼多多下了一单纸巾,纸巾到货后特别烂,跟描述不符合,你直接联系的拼多多客服,ai一看这家店关于质量投诉很多,再加上你要退,直接判断先退款,调用退款API。
目前程序可以用ai做哪些事情
1 智能客服(自动问答、工单分类)
2 自动化审批(结合业务规则+AI决策)
快速实现应用集成AI Agent
官方文档: 快速开始集成ai
注册自己的apikey:阿里云百炼平台
**记得要切换java版本到17,Spring Boot 3.x 最低要java17 **
bash
- Spring Boot 3.x + Java 17
- Spring AI Alibaba Starter v1.0.0-M3.3
- 向量数据库:Milvus 或 Elasticsearch
- 模型服务:阿里云 Dashscope(通义千问) DeepSeek 等等 阿里云给我提供了很多免费的
项目代码
bash
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aidemo</groupId>
<artifactId>ai-demo-one</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ai-demo-one</name>
<description>ai-demo-one</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.3.4</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
// 这里用的最新版本 25-08-13
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M6.1</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.aidemo.AiDemoOneApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
bash
# åº"ç"¨æœåŠ¡ WEB 访é---®ç<<¯å£
server.port=8080
spring.ai.dashscope.api-key=sk-e86857177213cfaw21XXXXXXXXX***
spring.ai.dashscope.chat.options.model=deepseek-r1
bash
package com.aidemo.demos.config;
import com.aidemo.demos.service.OrderToolsService;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author yueyue.guan
* @date 2025/8/13 17:04
* @desc
*/
@Configuration
public class AIConfig {
@Bean
public ChatClient chatClient(
ChatClient.Builder builder,
OrderToolsService orderToolsService // 注入工具
) {
return builder
.defaultTools(orderToolsService)
.defaultSystem("你是一名车辆订单助手,帮助用户查询订单状态和操作方法")
.build();
}
}
bash
package com.aidemo.demos.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
/**
* @Author yueyue.guan
* @date 2025/8/13 17:12
* @desc
*/
@Service
@Slf4j
public class OrderToolsService {
@Tool(name = "getOrderStatus", description = "根据订单号查询订单状态")
public String getOrderStatus(
@ToolParam(description = "订单号") String orderNo
){
log.info("查询订单状态:{}", orderNo);
return "订单 " + orderNo + " 正在提车中,车辆将在3个工作周内到账";
}
@Tool(name = "getWeather", description = "查询城市天气")
public String getWeather(
@ToolParam(description = "城市名称") String city
) {
log.info("查询城市天气:{}", city);
return city + ":晴天,25℃";
}
}
bash
package com.aidemo.demos.web;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author yueyue.guan
* @date 2025/8/13 18:02
* @desc
*/
@RestController
@Slf4j
public class DeepSeekController {
private final ChatClient chatClient;
public DeepSeekController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping("/deep/{prompt}")
public String chat(@PathVariable(value = "prompt") String prompt) {
return chatClient.prompt().user(prompt).call().content();
}
}
启动演示
小结
关于记忆(Memory)与流程引擎的开发应用,我们下一篇再看,记得动手实现一遍,真的很有意思。