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

RAG 项目随笔

ollama pull nomic-embed-text 基于 Ollama 部署 DeepSeek 大模型,提供 API 接口。 运用 Spring AI 框架承接接口实现 RAG 知识库能力。 这款 RAG 知识库支持文本解析,以及 Git 代码库的解析。

技术选型

JDK 17 ~ 21

Postgresql

SpringBoot 3.2.3

Spring AI 0.8.1 ~ 1.0.0

Redis

Docker

Ollama + DeepSeek

拉取 Ollama 模型使用 deepSeek-1.5b

拉取模型,推荐小一点,够做开发就可以

ollama pull deepseek-r1:1.5b

(可选)运行模型,运行后关闭,继续安装模型。 Ctrl/Command + D

ollama run deepseek-r1:1.5b

向量文本

ollama pull nomic-embed-text

curl http://127.0.0.1:11434/api/generate \

-H "Content-Type: application/json" \-d '{"model": "deepseek-r1:1.5b","prompt": "1+1","stream": false}'

docker-compose

`

docker-comopse -f docker-compose-environment-aliyun.yml up -d

version: '3'

services:

对话模型

ollama pull deepseek-r1:1.5b

运行模型

ollama run deepseek-r1:1.5b

联网模型

ollama pull nomic-embed-text

ollama:

image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/ollama:0.5.10container_name: ollamarestart: unless-stoppedports:- "11434:11434"

redis:

image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/redis:6.2container_name: redisrestart: alwayshostname: redisprivileged: trueports:- 16379:6379volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.confcommand: redis-server /usr/local/etc/redis/redis.confnetworks:- my-networkhealthcheck:test: [ "CMD", "redis-cli", "ping" ]interval: 10stimeout: 5sretries: 3

RedisAdmin https://github.com/joeferner/redis-commander

账密 admin/admin

redis-admin:

image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/redis-commander:0.8.0container_name: redis-adminhostname: redis-commanderrestart: alwaysports:- 8081:8081environment:- REDIS_HOSTS=local:redis:6379- HTTP_USER=admin- HTTP_PASSWORD=admin- LANG=C.UTF-8- LANGUAGE=C.UTF-8- LC_ALL=C.UTF-8networks:- my-networkdepends_on:redis:condition: service_healthy

vector_db:

image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/pgvector:v0.5.0container_name: vector_dbrestart: alwaysenvironment:- POSTGRES_USER=postgres- POSTGRES_PASSWORD=postgres- POSTGRES_DB=ai-rag-knowledge- PGPASSWORD=postgresvolumes:- ./pgvector/sql/init.sql:/docker-entrypoint-initdb.d/init.sqllogging:options:max-size: 10mmax-file: "3"ports:- '15432:5432'healthcheck:test: "pg_isready -U postgres -d ai-rag-knowledge"interval: 2stimeout: 20sretries: 10networks:- my-network

networks:

my-network:

driver: bridge

`

对应 controller 接口

`

@RestController()

@CrossOrigin("*")

@RequestMapping("/api/v1/ollama/")

public class OllamaController implements IAiService {

@Resourceprivate OllamaChatClient chatClient;/*** http://localhost:8090/api/v1/ollama/generate?model=deepseek-r1:1.5b&message=1+1*/@RequestMapping(value = "generate", method = RequestMethod.GET)@Overridepublic ChatResponse generate(@RequestParam String model, @RequestParam String message) {return chatClient.call(new Prompt(message, OllamaOptions.create().withModel(model)));}/*** http://localhost:8090/api/v1/ollama/generate_stream?model=deepseek-r1:1.5b&message=hi*/@RequestMapping(value = "generate_stream", method = RequestMethod.GET)@Overridepublic Flux<ChatResponse> generateStream(@RequestParam String model, @RequestParam String message) {return chatClient.stream(new Prompt(message, OllamaOptions.create().withModel(model)));}

}

`

需要注意流式查询返回前端判断 STOP 结束符

SpringAI : 提供向量模型处理框架,支持文件的解析、拆分和向量化操作。

TikaDocumentReader : 用于解析上传的文件,支持多种文件格式(如 MD、TXT、SQL 等)。

TokenTextSplitter : 用于将解析后的文本内容拆分为更小的片段,便于后续处理和存储。

PostgreSQL 向量库 : 用于存储处理后的文本向量数据,支持高效的相似性搜索和检索。

TikaDocumentReader reader = new TikaDocumentReader(new PathResource(file));
List documents = reader.get();
List documentSplitterList = tokenTextSplitter.apply(documents);

                documents.forEach(doc -> doc.getMetadata().put("knowledge", repoProjectName));documentSplitterList.forEach(doc -> doc.getMetadata().put("knowledge", repoProjectName));

使用 JGit可以拉取
Git git = Git.cloneRepository()
.setURI(repoUrl)
.setDirectory(new File(localPath))
.setCredentialsProvider(new UsernamePasswordCredentialsProvider(userName, token))
.call();

上传文件解析

 @RequestMapping(value = "file/upload", method = RequestMethod.POST, headers = "content-type=multipart/form-data")@Overridepublic Response<String> uploadFile(@RequestParam String ragTag, @RequestParam("file") List<MultipartFile> files) {log.info("上传知识库开始 {}", ragTag);for (MultipartFile file : files) {TikaDocumentReader documentReader = new TikaDocumentReader(file.getResource());List<Document> documents = documentReader.get();List<Document> documentSplitterList = tokenTextSplitter.apply(documents);documents.forEach(doc -> doc.getMetadata().put("knowledge", ragTag));documentSplitterList.forEach(doc -> doc.getMetadata().put("knowledge", ragTag));pgVectorStore.accept(documentSplitterList);RList<String> elements = redissonClient.getList("ragTag");if (!elements.contains(ragTag)) {elements.add(ragTag);}}
http://www.gsyq.cn/news/69321.html

相关文章:

  • 2023电磁兼容测试领军者:凌赫高科引领EMC检测技术革新,一站式解决电磁干扰难题
  • 2025最新防霉胶品牌推荐!权威榜单发布,技术实力铸就防霉新标杆防霉胶生产企业/建筑密封胶品牌推荐
  • 2025最新环保胶品牌推荐!国内优质建材服务商权威榜单发布,资质创新双优助力绿色工程
  • XHORSE XM38 4-Button Universal Smart Key: 5pcs for European/American Vehicles
  • 2025上海装修平台实力榜:优客网以创新设计与高效服务领跑,六大本土品牌深度解析
  • 3个常见ISO认证坑,上海企业主中招率超60%!这样避坑省心又省钱
  • 2025企业管理咨询服务公司实力榜:正睿咨询集团以创新策略引领,六大行业先锋深度解析
  • 2025混合机厂家实力榜:双龙集团以高效盘条式技术领跑,九款创新机型深度解析
  • 2025最新免钉胶品牌推荐!建筑装修用胶权威榜单发布,资质技术双优助力高品质施工
  • 2025中国水泵行业实力榜:金盛辉以高效节能技术引领,十大本土品牌深度解析
  • 第六天敏捷冲刺
  • Scrum 冲刺博客(第一天)
  • 第43天(中等题 数据结构)
  • LangChain4j实战-检索增强生成RAG (Retrieval-Augmented Generation)
  • 2025上海防水翻新公司最新 TOP5 权威推荐:全场景解决方案与本地化服务指南
  • 2025上海防水补漏最新top企业推荐:防水、维修、检测、翻新,从住宅到工建全场景覆盖
  • 2025年上海防水工程公司最新TOP5 推荐:全场景防水解决方案权威指南
  • Hudi 数据模型分析
  • 2025最新刑事纠纷律师事务所推荐!刑事辩护/合规领域优质律所权威榜单发布
  • 12-2午夜盘思
  • 12.2(2)
  • 11.servlet里面的监听器
  • newDay24
  • 12月2日日记
  • 10.日志中间件
  • 备课
  • 令牌环式同步:乒乓球对练的四种实现方式
  • 2025年11月助听器十大品牌推荐 自然之声以专业康复服务位
  • 歌声转换SVC主流方法原理剖析3 — So-VITS-SVC
  • 2025全国助听器厂家推荐榜:专业验配+全程康复成听损家