网站首页 > 精选教程 正文
背景
如果有这样的需求,java微服务访问aget的api做一些数据操作,具体应该怎么做呢?考虑以下问题:
- 使用什么工具?
- 参数如何封装?
- agent只接收流式模式,就是那种一个字一个字往外面蹦,那java又应该使用什么样的代码来接收呢?
第一个思路
假设你不知道,那就先啥也别想了,整理好自己的问题,然后直接询问deepseek,指不定就有现成的代码直接能用,我使用问小白试了试,给的示例操作步骤还是很清晰的
思路二:直接使用下面的代码
从ai拿过来的代码还是需要自己本地测试验证的,我自己做了测试通过了,在这里直接给大家分享
指定的agent返回json数据
{
"items": "x",
"log": "x",
"explanation": "x"
}
导入pom
我是用的springboot,所以没加版本
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
通过接口触发调用agent的api
@PostMapping("getInformation")
public R getInformation(@RequestBody Map<String, Object> inputBean) {
new Thread(() -> {
try {
DifyService.callDifyStreaming("你好,你是谁?);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
return R.data();
}
DifyService访问
注意修改自己的地址和apikey
public class DifyService {
private static final String DIFY_URL = "http://localhost/v1/chat-messages";
private static final String API_KEY = "Bearer agent密钥";
public static void callDifyStreaming(String query) throws InterruptedException {
// 构建请求体
DifyRequestBean requestBody = new DifyRequestBean();
requestBody.setQuery(query);
requestBody.setInputs(Collections.emptyMap());
requestBody.setResponse_mode("streaming");
requestBody.setUser("abc-123");
requestBody.setFiles(Collections.emptyList());
// 创建WebClient
WebClient client = WebClient.builder()
.baseUrl(DIFY_URL)
.defaultHeader("Authorization", API_KEY)
.defaultHeader("Content-Type", "application/json")
.build();
// 发送流式请求
Flux<String> responseStream = client.post()
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(requestBody)
.retrieve()
.bodyToFlux(String.class);
// 处理流式响应
CountDownLatch latch = new CountDownLatch(1);
StringBuffer responseBuilder = new StringBuffer();
responseStream.subscribe(
data -> {
StreamResponse streamResponse = JSONObject.parseObject(data, StreamResponse.class);
String answer = streamResponse.getAnswer();
if (ObjectUtils.isNotEmpty(answer)) {
responseBuilder.append(answer);
}
},
error -> {
System.err.println("发生错误: " + error.getMessage());
latch.countDown();
},
() -> {
System.out.println("最终回答:" + responseBuilder);
FinalResponseData streamResponse = JSONObject.parseObject(decode, FinalResponseData.class);
streamResponse.setQuery(query);
System.out.println(streamResponse.getLog());
ListToExcel.generateExcel(Collections.singletonList(streamResponse), "D:\\" + DateUtil.now().getTime() + ".xlsx");
latch.countDown();
}
);
latch.await();
}
}
使用以上代码能够直接访问agent获取json数据,然后处理结果。
但是这里有个问题,就是这个Java代码一次只能处理一个query,如果我有业务需要,一次有几十个query需要处理,即使我用for遍历循环,处理速度也是很慢的。有没有办法能够同时处理几十个请求,提高效率呢?
后面有机会给大家分享!
猜你喜欢
- 2025-05-21 Spring应用上下文 ApplicationContext
- 2025-05-21 Spring Boot3 中接口防抖操作全解析
- 2025-05-21 jmeter接口测试教程
- 2025-05-21 使用httpclient post请求中文乱码解决办法
- 2025-05-21 前端请求一到,后端就乱套?揭秘 Spring MVC 底层调用全流程!
- 2025-05-21 在 Spring Boot3 中轻松解决接口跨域访问问题
- 2025-05-21 SpringBoot 数据验证与表单处理全面指南(史上最全)
- 2025-05-21 原来大牛们口中的接口Mock测试是长这样的,今天我终于搞懂了
- 2025-05-21 3 分钟Java 开发 MCP Server,一键打通飞书机器人消息发送通道!
- 2025-05-21 Java 调用 DeepSeek 模型的完整示例及特点
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)