返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

Spring AI实现知识库搭建(实战篇)

[复制链接]
链载Ai 显示全部楼层 发表于 3 小时前 |阅读模式 打印 上一主题 下一主题
背景:技术框架转型,将Langchain4j实现的功能转为Spring AI实现,方便升级、维护
此篇内容篇幅较长,需要具备一定的开发能力!

框架:Ruoyi-Vue-Plus版本:5.3.1Spring-boot版本:3.4.4JDK:17spring-ai版本:1.0.0
需安装Ollama,且具备模型"nomic-embed-text"

步骤一:知识库表设计
资料已上传至技术群
新增5个表
ai_knowledge,ai_knowledge_document,ai_knowledge_segment,ai_model,ai_api_key
步骤二:环境搭建
此次演示采用milvus向量库
需要具备Docker环境,此次采用Docker Desktop搭建milvus服务
Docker Desktop怎么安装,此篇博客不演示,如遇到问题,可以加技术群咨询
docker-compose--version
如运行以上命令没问题,则具备Docker环境
docker-compose.yml
version:'3.5'services:etcd:container_name:milvus-etcdimage:quay.io/coreos/etcd:v3.5.18environment:-ETCD_AUTO_COMPACTION_MODE=revision-ETCD_AUTO_COMPACTION_RETENTION=1000-ETCD_QUOTA_BACKEND_BYTES=4294967296-ETCD_SNAPSHOT_COUNT=50000volumes:-${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcdcommand:etcd-advertise-client-urls=http://etcd:2379-listen-client-urlshttp://0.0.0.0:2379--data-dir/etcdhealthcheck:test:["CMD","etcdctl","endpoint","health"]interval:30stimeout:20sretries:3minio:container_name:milvus-minioimage:minio/minio:RELEASE.2025-04-22T22-12-26Zenvironment:MINIO_ACCESS_KEY:minioadminMINIO_SECRET_KEY:minioadminports:-"9000:9000"-"9001:9001"volumes:-${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_datacommand:minioserver/minio_data--console-address":9001"healthcheck:test:["CMD","curl","-f","http://localhost:9000/minio/health/live"]interval:30stimeout:20sretries:3standalone:container_name:milvus-standaloneimage:milvusdb/milvus:v2.5.13command:["milvus","run","standalone"]security_opt:-seccomp:unconfinedenvironment:ETCD_ENDPOINTS:etcd:2379MINIO_ADDRESS:minio:9000volumes:-${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvushealthcheck:test:["CMD","curl","-f","http://localhost:9091/healthz"]interval:30sstart_period:90stimeout:20sretries:3ports:-"19530:19530"-"9091:9091"depends_on:-"etcd"-"minio"attu:container_name:attuimage:zilliz/attu:v2.5.7environment:MILVUS_URL:milvus-standalone:19530ports:-"19500:3000"depends_on:-"standalone"networks:default:name:milvus
Linux/Windows如果具备Docker环境,在某一个目录下新建文件docker-compose.yml,执行以下命令即可
docker-composeup-d
使用以下命令验证
dockerimages
使用以下命令验证是否启动
dockerps
如果执行"docker ps"显示为空,则按照以下步骤执行
dockerps-a
先后启动,注意顺序
dockerrestartetcd容器iddockerrestartminio容器iddockerrestartmilvus容器iddockerrestartattu容器id
eg:其中attu是一个可视化访问milvus的界面
(1)minio验证是否启动成功
#浏览器访问miniolocalhost:9000
默认账号:minioadmin
默认密码:minioadmin
(2)milvus验证是否启动成功
#浏览器访问milvuslocalhost:19500
不点击认证,也可登录,如需点击认证
用户名:root
密码:milvus
步骤三:引入依赖
<tika.version>3.0.0</tika.version><spring-ai.version>1.0.0</spring-ai.version><commons-io.version>2.16.1</commons-io.version>
<!--Tika提取文件必须--><dependency><groupId>org.apache.tika</groupId><artifactId>tika-core</artifactId><version>${tika.version}</version><exclusions><exclusion><artifactId>commons-io</artifactId><groupId>commons-io</groupId></exclusion></exclusions></dependency><!--解析文档必须--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-tika-document-reader</artifactId><version>${spring-ai.version}</version></dependency><!--解析文档必须--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency>
步骤四:配置
application.yml
spring:application:name:RuoYi-Vue-Plusai:vectorstore:milvus:initialize-schema:truedatabase-name:defaultcollection-name:testclient:host:milvus服务ip地址port:19530username:rootpassword:milvus
此时需要在milvus中default数据库新建集合"test"
字段信息如图,在集合test需包含4个字段
#字段1doc_id:文档id,也就是表ai_knowledge_segment中对应的字段vector_id,方便验证、查询
#字段2embedding:向量维度,利用向量模型nomic-embed-text解析成向量,需要指定维度768,如果是1024或其它会报错!
#字段3content:文档内容,利用tika解析文档
#字段4metadata:元数据,需要存储业务数据,如知识库id、文档id
补充:设置字段metadata是有依据可寻
其中Document对象具备metadata,存储数据时需对应!
步骤五:代码生成
(1)知识库
(2)模型
(3)秘钥
步骤六:思路讲解
核心接口:上传文档列表
[1]AiKnowledgeDocumentController
/***上传文档列表**@parambo*@return*/@PostMapping("/createKnowledgeDocumentList")publicR<List<Long>>createKnowledgeDocumentList(@RequestBodyAiKnowledgeDocumentListBobo){returnR.ok(aiKnowledgeDocumentService.createKnowledgeDocumentList(bo));}
[2]IAiKnowledgeDocumentService
/***上传文档列表**@parambo*@return*/List<Long>createKnowledgeDocumentList(AiKnowledgeDocumentListBobo);
[3]AiKnowledgeDocumentServiceImpl
 /**  * 上传文档列表  *  *@parambo  *@return  */ @Override @Transactional(rollbackFor =Exception.class) publicList<Long>createKnowledgeDocumentList(AiKnowledgeDocumentListBo bo) {   // 校验    aiKnowledgeService.validateKnowledgeExists(bo.getKnowledgeId());
if(ObjectUtil.isEmpty(bo.getList())) { thrownewServiceException("至少上传一个文件"); }
// 批量读取文档内容 List<AiKnowledgeDocument> aiKnowledgeDocuments =prepareDocuments(bo);
baseMapper.insertBatch(aiKnowledgeDocuments); // 切片 processDocumentSegment(aiKnowledgeDocuments);
returnextractDocumentIds(aiKnowledgeDocuments); }
获取向量对象方法
VectorStoregetOrCreateVectorStore(Class<?extendsVectorStore>type,EmbeddingModelembeddingModel,Map<String,Class<?>>metadataFields);
 @Override publicVectorStoregetOrCreateVectorStore(Long embedModelId, Map<String, Class<?>> metadataFields){   // 获取模型信息   AiModelVoaiModelVo=validateModel(embedModelId);   AiApiKeyVoaiApiKeyVo=aiApiKeyService.validateApiKey(aiModelVo.getKeyId());   AiPlatformEnumaiPlatformEnum=AiPlatformEnum.validatePlatform(aiApiKeyVo.getPlatform());
// 创建或获取嵌入模型 EmbeddingModelembeddingModel=modelFactoryService.getOrCreateEmbeddingModel( aiPlatformEnum, aiApiKeyVo.getApiKey(), aiApiKeyVo.getUrl(), aiModelVo.getModel() );
returnmodelFactoryService.getOrCreateVectorStore(MilvusVectorStore.class, embeddingModel, metadataFields); }
此时指定的是milvus存储,看过我文档spring-ai存储向量数据可将其改为SimpleVectorStore.class
看到此图,是不是很熟悉,不错,很方便扩展!
步骤七:录入数据
eg:必须按以下顺序执行
(1)新增秘钥
验证
(2)新增模型
验证
(3)新增知识库
验证
(4)上传文件
eg:框架自带
验证
(5)查询文件
eg:框架自带
(6)查询文件列表
eg:框架自带
(7)删除文件
eg:框架自带
验证
二次验证
步骤八:接口测试
验证
(1)文档表
(2)切片表
(3)向量库
二次验证
至此,Spring AI实现知识库demo版结束啦,需要资料可以加技术群获取!
ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">本人正在打造技术交流群,欢迎志同道合的朋友一起探讨,一起努力,通过自己的努力,在技术岗位这条道路上走得更远。QQ群号:925317809 备注:技术交流 即可通过!

加入技术群可以获取资料,含AI资料、Spring AI中文文档等,等你加入~


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ