框架:Ruoyi-Vue-Plus版本:5.3.1Spring-boot版本:3.4.4JDK:17spring-ai版本:1.0.0需安装Ollama,且具备模型"nomic-embed-text"
资料已上传至技术群
ai_knowledge,ai_knowledge_document,ai_knowledge_segment,ai_model,ai_api_key
docker-compose--version
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:milvusdocker-composeup-d
dockerimages
dockerps
dockerps-a
dockerrestartetcd容器iddockerrestartminio容器iddockerrestartmilvus容器iddockerrestartattu容器id
#浏览器访问miniolocalhost:9000
#浏览器访问milvuslocalhost:19500
<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>spring:application:name:RuoYi-Vue-Plusai:vectorstore:milvus:initialize-schema:truedatabase-name:defaultcollection-name:testclient:host:milvus服务ip地址port:19530username:rootpassword:milvus
#字段1doc_id:文档id,也就是表ai_knowledge_segment中对应的字段vector_id,方便验证、查询
#字段2embedding:向量维度,利用向量模型nomic-embed-text解析成向量,需要指定维度768,如果是1024或其它会报错!
#字段3content:文档内容,利用tika解析文档
#字段4metadata:元数据,需要存储业务数据,如知识库id、文档id
/***上传文档列表**@parambo*@return*/@PostMapping("/createKnowledgeDocumentList")publicR<List<Long>>createKnowledgeDocumentList(@RequestBodyAiKnowledgeDocumentListBobo){returnR.ok(aiKnowledgeDocumentService.createKnowledgeDocumentList(bo));}/***上传文档列表**@parambo*@return*/List<Long>createKnowledgeDocumentList(AiKnowledgeDocumentListBobo);
/*** 上传文档列表**@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);
@OverridepublicVectorStoregetOrCreateVectorStore(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);}
加入技术群可以获取资料,含AI资料、Spring AI中文文档等,等你加入~
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |