当前位置: 首页 > news >正文

在 Spring Boot 中调用 AnythingLLM 的发消息接口

 整体逻辑:

自建系统的web UI界面调用接口:

1.SpringBoot接口:/anything/chatMessageAnything

2.调用anythingLLM - 调用知识库+deepseek r1 .

 

GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/gh_mirrors/an/anything-llm

Windows Installation ~ AnythingLLMhttps://docs.anythingllm.com/installation-desktop/windows

http://localhost:3001/api/docs/http://localhost:3001/api/docs/

要在 Spring Boot 中调用 AnythingLLM 的发消息接口,可以通过以下步骤实现。假设你已经了解 AnythingLLM 的 API 文档(如端点、认证方式、请求参数等),以下是通用实现方案:


1. 添加依赖

pom.xml 中添加 Spring Web 依赖(如果项目中没有):

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>


2. 配置 AnythingLLM API 参数

application.propertiesapplication.yml 中配置 API 的基础信息:

properties

# application.properties

anythingllm.api.url=https://api.anythingllm.com/v1/messages

anythingllm.api.key=your_api_key_here


3. 创建 API 调用服务

使用 RestTemplateWebClient 调用 AnythingLLM 的接口。以下是两种实现方式:

方式一:使用 RestTemplate

java

import org.springframework.http.HttpEntity;

import org.springframework.http.HttpHeaders;

import org.springframework.http.HttpMethod;

import org.springframework.http.ResponseEntity;

import org.springframework.stereotype.Service;

import org.springframework.web.client.RestTemplate;

@Service

public class AnythingLLMService {

private final RestTemplate restTemplate;

private final String apiUrl;

private final String apiKey;

public AnythingLLMService(

RestTemplate restTemplate,

@Value("${anythingllm.api.url}") String apiUrl,

@Value("${anythingllm.api.key}") String apiKey) {

this.restTemplate = restTemplate;

this.apiUrl = apiUrl;

this.apiKey = apiKey;

}

public ResponseEntity<String> sendMessage(String messageContent) {

// 设置请求头(包含 API Key)

HttpHeaders headers = new HttpHeaders();

headers.set("Authorization", "Bearer " + apiKey);

headers.set("Content-Type", "application/json");

// 构建请求体

String requestBody = "{\"content\": \"" + messageContent + "\"}";

// 发送 POST 请求

HttpEntity<String> request = new HttpEntity<>(requestBody, headers);

return restTemplate.exchange(

apiUrl,

HttpMethod.POST,

request,

String.class

);

}

}

方式二:使用 WebClient(推荐响应式编程)

java

import org.springframework.http.HttpHeaders;

import org.springframework.http.MediaType;

import org.springframework.stereotype.Service;

import org.springframework.web.reactive.function.client.WebClient;

import reactor.core.publisher.Mono;

@Service

public class AnythingLLMService {

private final WebClient webClient;

private final String apiUrl;

private final String apiKey;

public AnythingLLMService(

WebClient.Builder webClientBuilder,

@Value("${anythingllm.api.url}") String apiUrl,

@Value("${anythingllm.api.key}") String apiKey) {

this.webClient = webClientBuilder.baseUrl(apiUrl).build();

this.apiUrl = apiUrl;

this.apiKey = apiKey;

}

public Mono<String> sendMessage(String messageContent) {

return webClient.post()

.uri("/")

.header(HttpHeaders.AUTHORIZATION, "Bearer " + apiKey)

.contentType(MediaType.APPLICATION_JSON)

.bodyValue("{\"content\": \"" + messageContent + "\"}")

.retrieve()

.bodyToMono(String.class);

}

}


4. 控制器层(可选)

如果需要通过 HTTP 接口触发消息发送,可以添加一个 Controller:

java

import org.springframework.web.bind.annotation.*;

import reactor.core.publisher.Mono;

@RestController

@RequestMapping("/api/messages")

public class MessageController {

private final AnythingLLMService anythingLLMService;

public MessageController(AnythingLLMService anythingLLMService) {

this.anythingLLMService = anythingLLMService;

}

@PostMapping

public Mono<String> sendMessage(@RequestBody String messageContent) {

return anythingLLMService.sendMessage(messageContent);

}

}


5. 异常处理

添加全局异常处理,捕获 API 调用中的错误:

java

import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.RestControllerAdvice;

import org.springframework.web.client.HttpClientErrorException;

@RestControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler(HttpClientErrorException.class)

public ResponseEntity<String> handleHttpClientError(HttpClientErrorException ex) {

return ResponseEntity.status(ex.getStatusCode())

.body("API调用失败: " + ex.getResponseBodyAsString());

}

}


6. 测试调用

使用 RestTemplate 测试

java

@SpringBootTest

public class AnythingLLMServiceTest {

@Autowired

private AnythingLLMService anythingLLMService;

@Test

public void testSendMessage() {

ResponseEntity<String> response = anythingLLMService.sendMessage("Hello, AnythingLLM!");

assertEquals(HttpStatus.OK, response.getStatusCode());

}

}

使用 WebClient 测试

java

@Test

public void testSendMessage() {

anythingLLMService.sendMessage("Hello, AnythingLLM!")

.subscribe(response -> {

assertNotNull(response);

System.out.println("API Response: " + response);

});

}


注意事项

  1. API 认证 :根据 AnythingLLM 的文档调整认证方式(如 API Key、OAuth 等)。
  2. 请求体格式 :确保请求体的 JSON 结构与 API 要求一致(如字段名称、嵌套结构)。
  3. 超时配置 :如果接口响应较慢,需配置 RestTemplateWebClient 的超时时间。
  4. 日志记录 :建议在调用过程中添加日志,方便调试和监控。

如果需要更具体的实现(如文件上传、复杂参数),请提供 AnythingLLM 的 API 文档细节!

知识库文件上传


http://www.mrgr.cn/news/95289.html

相关文章:

  • Kafka自定义分区机制
  • Java后端开发技术详解
  • 详解string类+迭代器
  • Java并发编程面试代码练习
  • 【AIGC】Win10系统极速部署Docker+Ragflow+Dify
  • Rust与Java对比
  • 关于运行 npm run serve/dev 运行不起来,node_modules Git忽略不了等(问题)
  • 【C++语言】继承和多态常见的面试问题
  • AI大白话(三):深度学习——AI的‘大脑‘是如何构建的?
  • python3 -m http.sever 8080加载不了解决办法
  • java项目之基于ssm的疫苗预约系统(源码+文档)
  • 【小也的Java之旅系列】01 分布式、集群、微服务的区别
  • 【sgFloatDialog】自定义组件:浮动弹窗,支持修改尺寸、拖拽位置、最大化、还原、最小化、复位
  • 正则表达式详解(regular expression)
  • Spring学习
  • C语言入门知识(上)
  • (一)飞行器的姿态欧拉角, 欧拉旋转, 完全数学推导(基于坐标基的变换矩阵).(偏航角,俯仰角,横滚角)
  • vue使用element-ui自定义样式思路分享【实操】
  • 【QT5 多线程示例】互斥锁
  • Web-Machine-N7靶机通关攻略