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

人工智能 - 在 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 文档细节!

知识库文件上传

相关文章:

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

整体逻辑: 自建系统的web UI界面调用接口: 1.SpringBoot接口&#xff1a;/anything/chatMessageAnything 2.调用anythingLLM - 调用知识库deepseek r1 . 部署 AnythingLLM DeepSeek 本地知识库 的环境要求如下&#xff1a; 一、硬件要求 CPU 最低&#xff1a;4核&#x…...

体育直播模板nba英超直播欧洲杯直播模板手机自适应

源码名称&#xff1a;体育直播模板nba英超直播欧洲杯直播模板手机自适应帝国cms 7.5模板 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff01; 模板特点&#xff1a; 程序伪静态…...

STM32-ARM

一、体系架构 ARM里有37个寄存器ALU算数逻辑单元PC程序计数器&#xff1a;指向哪里执行哪里SP栈指针寄存器LR链接寄存器&#xff1a;保存函数入口地址CPSR(current program status register)当前程序状态寄存器&#xff1a;SOSR(CPSR的备份)MMU(内存管理单元)Cache高速缓冲(iCa…...

ripro 主题激活 问题写入授权Token失败,可能无文件写入权限

ripro 主题激活 问题 写入授权Token失败&#xff0c;可能无文件写入权限 找到主题下面的functions.php文件&#xff0c;给其他写入权限。就好了。...

Lustre 语言的 Rust 生成相关的工作

目前 Lustre V6 编译器支持编译生成的语言为C语言。但也注意到&#xff0c;以 Rust 语言为生成目标语言&#xff0c;也存在若干相关工作。 rustre&#xff08;elegaanz&#xff09; 该项工作为 Lustre v6 语言的解析器&#xff0c;使用 Rust 语言实现。生成 Lustre AST。 项…...

计算机网络——通信基础和传输介质

物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&#xff09;的传输 到了数据链路层之后&#xff0c;它会以帧为单位&#xff0c;把若干个比特交给物理层&#xff0c;物理层需要把这些比特信息转化成信号&#xff0c;在物理传输媒体上进行传输 通信基础基本概念 信…...

python-selenium 爬虫 由易到难

本质 python第三方库 selenium 控制 浏览器驱动 浏览器驱动控制浏览器 推荐 edge 浏览器驱动&#xff08;不容易遇到版本或者兼容性的问题&#xff09; 驱动下载网址&#xff1a;链接: link 1、实战1 &#xff08;1&#xff09;安装 selenium 库 pip install selenium&#…...

Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.

What went wrong: Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac’. Could not resolve all files for configuration ‘:path_provider_android:androidJdkImage’. Failed to transform core-for-system-modules.jar to match attributes {…...

【Linux 维测专栏 2 -- Deadlock detection介绍】

文章目录 kernel 编译选项配置deadlock 测试代码deadlock 测试 logkernel 编译选项配置 通过 menuconfig 配置下面编译选项 # lockdep CONFIG_LOCK_STAT=y CONFIG_PROVE_LOCKING=y CONFIG_DEBUG_LOCKDEP=y上面配置完成后会定义下面宏: CONFIG_LOCK_DEBUGGING_SUPPORT=y CONF…...

T113-i开发板的休眠与RTC定时唤醒指南

​​在嵌入式系统设计中&#xff0c;休眠与唤醒技术是优化电源管理、延长设备续航的关键。飞凌嵌入式基于全志T113-i处理器开发设计的OK113i-S开发板提供了两种休眠模式&#xff1a;freeze和mem&#xff0c;以满足不同应用场景下的功耗与恢复速度需求。本文将详细介绍如何让OK1…...

Node.js系列(4)--微服务架构实践

Node.js微服务架构实践 &#x1f504; 引言 微服务架构已成为构建大规模Node.js应用的主流选择。本文将深入探讨Node.js微服务架构的设计与实现&#xff0c;包括服务拆分、服务治理、通信机制等方面&#xff0c;帮助开发者构建可扩展的微服务系统。 微服务架构概述 Node.js…...

基于Spring Boot的公司资产网站的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

CSS 中flex - grow、flex - shrink和flex - basis属性的含义及它们在弹性盒布局中的协同作用。

大白话CSS 中flex - grow、flex - shrink和flex - basis属性的含义及它们在弹性盒布局中的协同作用。 在 CSS 的弹性盒布局&#xff08;Flexbox&#xff09;里&#xff0c;flex-grow、flex-shrink 和 flex-basis 这三个属性对弹性元素的尺寸和伸缩性起着关键作用。下面为你详细…...

基于CVX优化器的储能电池调峰调频算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 原理概述 4.2 CVX工具箱概述 5.完整工程文件 1.课题概述 基于CVX优化器的储能电池调峰调频算法matlab仿真。CVX 是一种用于求解凸优化问题的强大工具。凸优化问题具有良好的数学性质&#xff0c;能…...

SpringBoot3+Vue3开发学生成绩管理系统

系统介绍 此系统功能包含&#xff1a;首页、课程管理、成绩查询、成绩详情、班级管理、专业管理、用户管理等功能。用户管理又细分为账号管理、学生管理、教师管理、管理员管理。 基础功能包含&#xff1a;登录、退出、修改登录人信息、修改登录人密码。 分为4种角色&#x…...

正则魔法:解码 return /^\d+$/.test(text) ? text : ‘0‘ 的秘密

&#x1f680; 正则魔法&#xff1a;解码 return /^\d$/.test(text) ? text : 0 的秘密 &#x1f31f; 嘿&#xff0c;技术探险家们&#xff01;&#x1f44b; 今天我们要破解一段看似简单的代码&#xff1a;return /^\d$/.test(text) ? text : 0。它藏在一个 Vue 前端组件中…...

基于BClinux8部署Ceph 19.2(squid)集群

#作者&#xff1a;闫乾苓 文章目录 1.版本选择Ceph版本发布历史目前官方在维护的版本 2.部署方法3.服务器规划4.前置配置4.1系统更新4.2配置hosts cat >> /etc/hosts << EOFssh-keygenssh-copy-id ceph01ssh-copy-id ceph02ssh-copy-id ceph034.5 Python34.6 Syst…...

CVPR2025 | 对抗样本智能安全方向论文汇总 | 持续更新中~

汇总结果来源&#xff1a;CVPR 2025 Accepted Papers 若文中出现的 论文链接 和 GitHub链接 点不开&#xff0c;则说明还未公布&#xff0c;在公布后笔者会及时添加. 若笔者未及时添加&#xff0c;欢迎读者告知. 文章根据题目关键词搜索&#xff0c;可能会有遗漏. 若笔者出现…...

[leetcode]1631. 最小体力消耗路径(bool类型dfs+二分答案/记忆化剪枝/并查集Kruskal思想)

题目链接 题意 给定 n m n\times m nm地图 要从(1,1) 走到 (n,m) 定义高度绝对差为四联通意义下相邻的两个点高度的绝对值之差 定义路径的体力值为整条路径上 所有高度绝对差的max 求所有路径中 最小的路径体力值是多少 方法1 这是我一开始自己写的记忆化剪枝 比较暴力 时…...

Linux-Ubuntu 系统学习笔记 | 从入门到实战

&#x1f4d8; Linux-Ubuntu 系统学习笔记 | 从入门到实战 &#x1f4dc; 目录 环境安装基本操作Linux操作系统介绍文件系统常用命令用户权限管理编辑器vimGCC编译器动态库与静态库Makefile 1. 环境安装 &#x1f31f; 下载镜像 推荐使用清华大学开源镜像站下载Ubuntu镜像&a…...

Java学习笔记-XXH3哈希算法

XXH3是由Yann Collet设计的非加密哈希算法&#xff0c;属于XXHash系列的最新变种&#xff0c;专注于极速性能与低碰撞率&#xff0c;适用于对计算效率要求极高的场景。 极速性能 在RAM速度限制下运行&#xff0c;小数据&#xff08;如 1-128 字节&#xff09;处理可达纳秒级&…...

【容器运维】docker搭建私有仓库

一、基础方案&#xff1a;使用 Docker Registry 快速搭建 1. 拉取并启动 Registry 镜像 # 拉取官方镜像 docker pull registry:2# 运行容器&#xff08;数据持久化到宿主机目录&#xff09; docker run -d -p 5000:5000 \--name my-registry \-v /opt/data/registry:/var/lib…...

深入理解 Spring 框架中的 AOP 技术

一、引言 在 Java 开发领域&#xff0c;Spring 框架凭借其强大的功能和丰富的特性&#xff0c;成为了众多开发者构建企业级应用的首选。其中&#xff0c;面向切面编程&#xff08;AOP&#xff09;作为 Spring 框架的核心技术之一&#xff0c;为开发者提供了一种全新的程序结构…...

磁盘清理工具-TreeSize Free介绍

TreeSizeFree是一个磁盘空间管理工具&#xff0c;主要用于分析磁盘使用情况&#xff0c;帮助用户找到占用空间大的文件和文件夹: 特点&#xff1a;按大小排序&#xff1a;快速找到占用空间最大的文件或文件夹 一般可以删除: 扫描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…...

redis MISCONF Redis is configured to save RDB snapshots报错解决

直接上解决方案 修改redis配置文件 stop-writes-on-bgsave-error no 重启redis...

c#知识点补充2

1.非静态类能否调用静态方法可以 2.对string类型扩展方法&#xff0c;如何进行 类用静态类&#xff0c;参数是this 调用如下 3.out的用法 一定要给a赋值 这种写法不行 这样才行 4.匿名类 5.委托的使用 无论是匿名委托&#xff0c;还是具命委托&#xff0c;委托实例化后一定要…...

循环神经网络(Recurrent Neural Network, RNN)与 Transformer

循环神经网络&#xff08;RNN&#xff09;与 Transformer 1. 循环神经网络&#xff08;RNN&#xff09;简介 1.1 RNN 结构 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种适用于处理序列数据的神经网络。其核心特点是通过隐藏状态&#xff08;Hi…...

力扣45.跳跃游戏

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<vector> class Solution {public:int jump(vector<int>& nums) {int ans[10005] ;memset(ans,1e4,sizeof(ans));ans[0]0;for(int i0;i<nums.size();i){for(int j1;j…...

招聘面试季--方法论--如何从零到-规划一个新的app产品

规划一个新APP产品的系统化步骤及关键要点&#xff1a; 一、需求验证阶段 ‌明确目标用户与核心需求‌ 通过用户调研&#xff08;问卷、访谈&#xff09;定义目标人群的痛点和场景&#xff0c;例如购物类APP需优先满足浏览、支付等核心需求‌。判断APP的必要性&#xff1a;若功…...

MacOS安装 nextcloud 的 Virtual File System

需求 在Mac上安装next cloud实现类似 OneDrive 那样&#xff0c;文件直接保存在服务器&#xff0c;需要再下载到本地。 方法 在 官网下载Download for desktop&#xff0c;注意要下对版本&#xff0c;千万别下 Mac OS默认的那个。 安装了登录在配置过程中千万不要设置任何同…...