当前位置: 首页 > 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.jsqmd.com/news/58900/

相关文章:

  • 2023应急救援背囊实力榜:迈康时代引领创新,十大品牌核心技术深度解析
  • 2025最新耐候胶品牌推荐!建筑密封材料领军企业权威榜单发布,性能卓越助力工程安全,密封耐候胶生产厂家 / 建筑胶粘剂服务商推荐
  • 2025最新密封胶厂家推荐!绿色建材领军企业权威榜单发布,技术与环保双优引领行业发展
  • 2025最新密封胶企业推荐!建筑/工业全场景高口碑榜单,技术实力与应用适配性双优指南
  • 2023电磁兼容测试领军者:凌赫高科引领EMC检测技术革新,一站式解决电磁干扰难题
  • 2025最新密封胶品牌推荐!绿色建材领军企业权威榜单发布,技术与环保双优引领行业发展
  • 2023宁波网站建设实力榜:搜客来引领,十大专业服务商深度解析
  • 2025最新防霉胶品牌推荐!权威榜单发布,技术实力铸就防霉新标杆防霉胶生产企业/建筑密封胶品牌推荐
  • 2025最新环保胶品牌推荐!国内优质建材服务商权威榜单发布,资质创新双优助力绿色工程
  • 2025电线行业实力榜:奔达康电缆以创新技术引领,九大电线类型深度解析
  • 2025模具钢材行业实力榜:正德模胚以高性能材料领跑,六家顶尖本土品牌深度解析
  • XHORSE XM38 4-Button Universal Smart Key: 5pcs for European/American Vehicles
  • 2025最新防霉胶品牌推荐!高端建筑密封胶行业权威榜单发布,资质技术双优助力高湿环境粘结需求
  • 2025最新环保胶品牌推荐!绿色建材领军企业权威榜单发布,技术与环保双优助力行业升级
  • 实验04
  • 2025制氮碳分子筛行业先锋:海华新材引领高效分离技术,六家创新企业深度解析
  • 2025上海装修平台实力榜:优客网以创新设计与高效服务领跑,六大本土品牌深度解析
  • 2025年ISO认证行业技术发展趋势与专业服务解决方案
  • 3个常见ISO认证坑,上海企业主中招率超60%!这样避坑省心又省钱
  • 2025年ISO认证咨询公司前十强权威榜单:上海歆贝领跑行业
  • 2025年上海ISO认证咨询机构前十排行及专业推荐
  • MMH_蓝桥杯Python_语法基础_逻辑运算与条件语句
  • 2025年ISO认证咨询公司排行榜:上海歆贝信息科技领跑行业
  • 2025高碳素超轻超硬鱼竿哪家强?从材质到手感全解析
  • 2025企业管理咨询服务公司实力榜:正睿咨询集团以创新策略引领,六大行业先锋深度解析
  • 2025最新美缝剂品牌实力榜!行业权威榜单发布,五大品牌引领装修辅料新标杆
  • 2025大回旋切断机厂家实力榜:东莞市大信自动化设备有限公司以智能高效技术领跑,六大核心优势深度解析
  • Qt开源无边框窗口项目解析
  • 2025混合机厂家实力榜:双龙集团以高效盘条式技术领跑,九款创新机型深度解析
  • 2025最新免钉胶品牌推荐!建筑装修用胶权威榜单发布,资质技术双优助力高品质施工