网站首页 > java教程 正文
背景
如果有这样的需求,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遍历循环,处理速度也是很慢的。有没有办法能够同时处理几十个请求,提高效率呢?
后面有机会给大家分享!
- 上一篇: 六个调用第三方接口遇到的大坑(调用第三方接口的流程)
- 下一篇: 调用AI接口API,需要遵循以下步骤
猜你喜欢
- 2025-07-08 对Spring MVC接口进行Mock测试(springmvc对外接口)
- 2025-07-08 还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS
- 2025-07-08 干掉OpenFeign,SpringBoot 3.0 自带的 HTTP 客户端真香!
- 2025-07-08 java开发三年,Java中接口的使用你得知道,不然你凭什么涨薪
- 2025-07-08 Java的类与接口(java接口和接口实现类)
- 2025-07-08 如何理解Java中接口存在的意义(java中接口有什么用)
- 2025-07-08 面试:如何保证接口的幂等性?常见的实现方案有哪些?
- 2025-07-08 java实现接口防刷(java接口防刷策略)
- 2025-07-08 java 9新特性 接口方法私有化(java私有属性怎么调用)
- 2025-07-08 妙用Java 8中的 Function接口(java里function的作用)
你 发表评论:
欢迎- 最近发表
-
- 搞趣网:我的世界全新皮肤包原始居民下载地址
- 我的世界拔刀剑MOD下载(我的世界拔刀剑mod下载国际版)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- 一些可以显著提高大型 Java 项目启动速度的尝试
- 常见的java敏感异常介绍(java 常见的异常)
- Java 开发者必看!三招实现外部 Jar 包动态加载(含热更新方案)
- Java JAR 启动内存参数配置指南:从基础设置到性能优化
- 对Spring MVC接口进行Mock测试(springmvc对外接口)
- 还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS
- 干掉OpenFeign,SpringBoot 3.0 自带的 HTTP 客户端真香!
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)