文章目录
阿里云百炼推出的智能体应用、工作流应用和智能体编排应用,有效解决了大模型在处理私有领域问题、获取最新信息、遵循固定流程以及自动规划复杂项目等方面的局限,显著拓展了其应用范围。
1.准备工作
- 登录阿里百炼平台,新建一个appkey,然后创建一个智能体应用,获取一个appId
- 开发环境:JDK17+、SpringBoot3.x+
2.引入maven依赖
xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.8</version>
</parent>
<groupId>com.linging</groupId>
<artifactId>spring-ai-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M5.1</version>
</dependency>
</dependencies>
</project>
3.application.yml
yaml
spring:
ai:
dashscope:
agent:
app-id: xxxx # 大模型应用ID,需要在平台发布(创建时会指定使用的模型)
api-key: xxxx # 百炼API Key
workspace-id: xxxx # 业务空间ID,可选,未配置时使用主账号空间
4.调用
4.1.非流式调用
java
/**
* 非流式调用
*/
@RestController
@RequestMapping("/ai")
public class BailianAgentRagController {
private static final Logger logger = LoggerFactory.getLogger(BailianAgentRagController.class);
private DashScopeAgent agent;
@Value("${spring.ai.dashscope.agent.app-id:xxx}")
private String appId;
public BailianAgentRagController(DashScopeAgentApi dashscopeAgentApi) {
this.agent = new DashScopeAgent(dashscopeAgentApi);
}
@GetMapping("/bailian/agent/call")
public String call(@RequestParam(value = "message",
defaultValue = "如何使用SDK快速调用阿里云百炼的应用?") String message) {
ChatResponse response = agent.call(new Prompt(message, DashScopeAgentOptions.builder().withAppId(appId).build()));
if (response == null || response.getResult() == null) {
logger.error("chat response is null");
return "chat response is null";
}
AssistantMessage app_output = response.getResult().getOutput();
return app_output.getContent();
}
}
4.2.流式调用
java
/**
* 流式调用
*/
@RestController
@RequestMapping("/ai")
public class BailianAgentRagStreamController {
private static final Logger logger = LoggerFactory.getLogger(BailianAgentRagStreamController.class);
private DashScopeAgent agent;
@Value("${spring.ai.dashscope.agent.app-id:xxx}")
private String appId;
public BailianAgentRagStreamController(DashScopeAgentApi dashscopeAgentApi) {
this.agent = new DashScopeAgent(dashscopeAgentApi,
DashScopeAgentOptions.builder()
.withSessionId("current_session_id")
.withIncrementalOutput(true)
.withHasThoughts(true)
.build());
}
@GetMapping(value="/bailian/agent/stream", produces="text/event-stream;charset=utf-8")
public Flux<String> stream(@RequestParam(value = "message",
defaultValue = "你好,请问你的知识库文档主要是关于什么内容的?") String message, HttpServletResponse re) {
re.setContentType("text/event-stream;charset=utf-8");
return agent.stream(new Prompt(message, DashScopeAgentOptions.builder().withAppId(appId).build())).map(response -> {
if (response == null || response.getResult() == null) {
logger.error("chat response is null");
return "chat response is null";
}
AssistantMessage app_output = response.getResult().getOutput();
String content = app_output.getContent();
return content;
});
}
@GetMapping(value="/bailian/agent/stream/html", produces="text/html;charset=utf-8")
public Flux<String> streamHtml(@RequestParam(value = "message",
defaultValue = "你好,请问你的知识库文档主要是关于什么内容的?") String message) {
return agent.stream(new Prompt(message, DashScopeAgentOptions.builder().withAppId(appId).build())).map(response -> {
if (response == null || response.getResult() == null) {
logger.error("chat response is null");
return "chat response is null";
}
AssistantMessage app_output = response.getResult().getOutput();
String content = app_output.getContent();
return content;
});
}
}