整体逻辑:
自建系统的web UI界面调用接口:
1.SpringBoot接口:/anything/chatMessageAnything
2.调用anythingLLM - 调用知识库+deepseek r1 .
部署 AnythingLLM + DeepSeek 本地知识库 的环境要求如下:
一、硬件要求
-
CPU
- 最低:4核(如 Intel Core i5 或 AMD Ryzen 5)
- 推荐:高性能 CPU(如 Intel Core i7 或 AMD Ryzen 7)
-
内存
- 最低:16GB RAM(需启用交换空间扩展)
- 推荐:32GB 或更高(支持大模型推理与多任务处理)
-
存储
- 最低:20GB 可用空间(用于模型与依赖库)
- 推荐:50GB+(支持多模型存储与数据扩展)
二、软件要求
-
操作系统
- 支持 Linux(CentOS 7+/Ubuntu 12+) 或 Windows 10+(WSL2 推荐)
-
运行时环境
- Python 3.8+ (用于数据处理与服务端逻辑)
- Node.js 16+ (用于启动 AnythingLLM 前端与后端服务)
- Ollama (用于本地部署 DeepSeek 等大语言模型)
-
容器化工具(可选)
- Docker (支持通过容器快速部署,避免环境冲突)
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.properties
或 application.yml
中配置 API 的基础信息:
properties
# application.properties
anythingllm.api.url=https://api.anythingllm.com/v1/messages
anythingllm.api.key=your_api_key_here
3. 创建 API 调用服务
使用 RestTemplate
或 WebClient
调用 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);
});
}
注意事项
- API 认证 :根据 AnythingLLM 的文档调整认证方式(如 API Key、OAuth 等)。
- 请求体格式 :确保请求体的 JSON 结构与 API 要求一致(如字段名称、嵌套结构)。
- 超时配置 :如果接口响应较慢,需配置
RestTemplate
或WebClient
的超时时间。 - 日志记录 :建议在调用过程中添加日志,方便调试和监控。
如果需要更具体的实现(如文件上传、复杂参数),请提供 AnythingLLM 的 API 文档细节!