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

人工智能 - 在 Spring Boot 中调用 AnythingLLM+DeepSeek 的知识库获取消息接口

 整体逻辑:

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

1.SpringBoot接口:/anything/chatMessageAnything

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

部署 AnythingLLM + DeepSeek 本地知识库 的环境要求如下:


一、硬件要求

  1. CPU

    • 最低:4核(如 Intel Core i5 或 AMD Ryzen 5)
  • 推荐:高性能 CPU(如 Intel Core i7 或 AMD Ryzen 7)
  • 内存

    • 最低:16GB RAM(需启用交换空间扩展)
  • 推荐:32GB 或更高(支持大模型推理与多任务处理)
  • 存储

    • 最低:20GB 可用空间(用于模型与依赖库)
  • 推荐:50GB+(支持多模型存储与数据扩展)

二、软件要求

  1. 操作系统

    • 支持 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.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 文档细节!

知识库文件上传

相关文章:

  • 大模型开发(六):LoRA项目——新媒体评论智能分类与信息抽取系统
  • 『 C++ 』多线程同步:条件变量及其接口的应用实践
  • 17.Linux蓝牙串口相关协议与使用步骤
  • GGUF 和 llama.cpp 是什么关系
  • 【记一次】AI微调训练步数计算方式
  • 在使用 RabbitMQ 时,手动确认消息和死信队列
  • 告别命令行,我用图形界面畅玩 DeepSeek-R1 1.5B
  • Redis为什么用跳表实现有序集合?
  • 深入解析 Uniswap:自动做市商模型的数学推导与智能合约架构
  • vue有几个版本
  • 【IDEA】IDEA常用快捷键(适应包括xml所有类型文件)
  • Redis 知识点梳理
  • 宠物AI识别技术颠覆自助洗宠场景,解决4大难题
  • systemd-networkd 的 /etc/systemd/network/*.network 的配置属性名称是不是严格区分大小写?是
  • 设计模式之装饰器模式
  • 项目日记 -云备份 -服务器配置信息模块
  • 区块链项目价值跃迁:从技术叙事到资本共振的包装艺术
  • 【Text2reward】环境状态信息学习笔记
  • python __name__与__main__深刻理解(涵详细解释、应用场景、代码举例、高级用法)
  • 基于WebRtc,GB28181,Rtsp/Rtmp,SIP,JT1078,H265/WEB融合视频会议接入方案
  • 万玲、胡春平调任江西省鹰潭市副市长
  • “半世纪来对无争议边界最深入袭击”:印巴冲突何以至此又如何收场?
  • 民生访谈|摆摊设点、公园搭帐篷、行道树飘絮,管理难题怎么解?
  • 央行:5月8日起7天期逆回购操作利率由此前的1.50%调整为1.40%
  • 潘功胜:降准0.5个百分点,降低政策利率0.1个百分点
  • 潘功胜:将下调个人住房公积金贷款利率0.25个百分点