news 2026/6/18 20:12:25

springai使用chroma向量数据库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springai使用chroma向量数据库

文章目录

    • 使用
        • maven依赖
        • 创建实体类
        • KnowledgeService接口类
        • KnowledgeServiceImpl接口实现类
        • controller
    • 报错
        • 报错 Error creating bean with name 'vectorStore' defined in class path resource [org/springframework/ai/autoconfigure/vectorstore/chroma/ChromaVectorStoreAutoConfiguration.class]: The v1 API is deprecated. Please use /v2 apis

开发环境用chromadb。

版本:
springai # 1.0.0-M6
chromadb # 0.5.23,要和springai匹配,所以不能选高版本

有两种方案:
1、python安装的也能用 # 这里用的这种

安装: pip install chromadb==0.5.23# 版本要和springai版本兼容启动: chroma run--host0.0.0.0--port8000验证: http://localhost:8000/docs# 这个地址可以看到chromadb的接口即可

2、docker安装windows本地版

使用

maven依赖
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-chroma-store-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency>
创建实体类

springai的Document已经支持chromadb,直接继承就行。

importorg.springframework.ai.document.Document;importjava.util.Map;publicclassKnowledgeDocumentextendsDocument{/** * 业务创建时的构造方法(自动生成 ID) */publicKnowledgeDocument(Stringcontent,StringsourceFile){super(content);this.getMetadata().put("source",sourceFile);this.getMetadata().put("created_at",System.currentTimeMillis());}/** * 内部全参构造方法(支持传入指定的 ID,用于从数据库/向量库还原对象) */privateKnowledgeDocument(Stringid,Stringcontent,Map<String,Object>metadata){super(id,content,metadata);}/** * 将 Spring AI 的 Document 转为我们的业务实体 */publicstaticKnowledgeDocumentfrom(Documentdoc){// 直接使用包含 ID 的构造方法,避免调用不存在的 setId 方法returnnewKnowledgeDocument(doc.getId(),doc.getText(),doc.getMetadata());}}
KnowledgeService接口类
publicinterfaceKnowledgeService{/** * 上传并解析文档入库 */voiduploadAndIndex(MultipartFilefile)throwsException;/** * 根据内容检索相关文档 */List<KnowledgeDocument>search(Stringquery,inttopK);}
KnowledgeServiceImpl接口实现类
importcom.example.demo.entity.KnowledgeDocument;importcom.example.demo.service.KnowledgeService;importlombok.RequiredArgsConstructor;importorg.springframework.ai.document.Document;importorg.springframework.ai.transformer.splitter.TokenTextSplitter;importorg.springframework.ai.vectorstore.SearchRequest;importorg.springframework.ai.vectorstore.VectorStore;importorg.springframework.stereotype.Service;importorg.springframework.web.multipart.MultipartFile;importjava.nio.charset.StandardCharsets;importjava.util.List;importjava.util.stream.Collectors;@Service@RequiredArgsConstructorpublicclassKnowledgeServiceImplimplementsKnowledgeService{privatefinalVectorStorevectorStore;privatefinalTokenTextSplittertokenTextSplitter=newTokenTextSplitter();@OverridepublicvoiduploadAndIndex(MultipartFilefile)throwsException{// 1. 读取文件内容Stringcontent=newString(file.getBytes(),StandardCharsets.UTF_8);// 2. 创建原始 DocumentDocumentrawDoc=newKnowledgeDocument(content,file.getOriginalFilename());// 3. 文本分块 (Chunking)List<Document>chunks=tokenTextSplitter.apply(List.of(rawDoc));// 4. 存入 ChromaDBvectorStore.add(chunks);}@OverridepublicList<KnowledgeDocument>search(Stringquery,inttopK){SearchRequestrequest=SearchRequest.builder().query(query).topK(topK).similarityThreshold(0.7).build();List<Document>results=vectorStore.similaritySearch(request);// 将底层 Document 转换回我们的业务实体returnresults.stream().map(KnowledgeDocument::from).collect(Collectors.toList());}}
controller
importcom.example.demo.entity.JsonResult;importcom.example.demo.entity.KnowledgeDocument;importcom.example.demo.service.KnowledgeService;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.lang3.StringUtils;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importorg.springframework.web.multipart.MultipartFile;importjava.util.List;/* * 知识库管理表 */@RestController()@RequestMapping("/api")@Slf4jpublicclassKnowledgeController{@AutowiredprivateKnowledgeServiceknowledgeService;/** * 上传并解析文档入库 */@PostMapping("/knowledge/upload")publicJsonResultupload(@RequestParam("file")MultipartFilefile){StringmethodName="知识库文档上传";JsonResultresult=JsonResult.ok();try{log.info(methodName+"_操作开始, fileName={}",file.getOriginalFilename());// 参数校验if(file.isEmpty()){thrownewIllegalArgumentException("上传的文件不能为空");}knowledgeService.uploadAndIndex(file);result=JsonResult.ok("文档上传并解析成功");log.info(methodName+"_操作完成, fileName={}",file.getOriginalFilename());returnresult;}catch(IllegalArgumentExceptione){log.error(methodName+"_操作失败, error=",e);returnJsonResult.fail("-1","操作失败,"+e.getMessage());}catch(Exceptione){log.error(methodName+"_操作异常, error=",e);returnJsonResult.fail("-1","操作异常,请联系系统管理员");}}/** * 根据内容检索相关文档 */@GetMapping("/knowledge/search")publicJsonResultsearch(@RequestParam("query")Stringquery,@RequestParam(value="topK",defaultValue="3")IntegertopK){StringmethodName="知识库内容检索";JsonResultresult=JsonResult.ok();try{log.info(methodName+"_查询操作开始, query={}, topK={}",query,topK);// 参数校验if(StringUtils.isEmpty(query)){thrownewIllegalArgumentException("检索关键词不能为空");}List<KnowledgeDocument>documents=knowledgeService.search(query,topK);result=JsonResult.ok(documents);log.info(methodName+"_操作完成, 检索到 {} 条结果",documents.size());returnresult;}catch(IllegalArgumentExceptione){log.error(methodName+"_操作失败, error=",e);returnJsonResult.fail("-1","操作失败,"+e.getMessage());}catch(Exceptione){log.error(methodName+"_操作异常, error=",e);returnJsonResult.fail("-1","操作异常,请联系系统管理员");}}}

报错

报错 Error creating bean with name ‘vectorStore’ defined in class path resource [org/springframework/ai/autoconfigure/vectorstore/chroma/ChromaVectorStoreAutoConfiguration.class]: The v1 API is deprecated. Please use /v2 apis

chromadb和springai的版本问题。
一开始chromadb用的是1.5.9,和springai不匹配,改为0.5.23版本,是兼容v1版本的,问题解决。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 20:11:17

多模态大语言模型融合技术:ES-Merging方法解析与应用

1. 多模态大语言模型融合技术前沿&#xff1a;ES-Merging方法深度解析在生物医学AI领域&#xff0c;多模态大语言模型&#xff08;MLLM&#xff09;正成为解决复杂跨模态任务的关键技术。这类模型需要整合来自分子结构、蛋白质序列、细胞转录组等不同模态的专业知识&#xff0c…

作者头像 李华
网站建设 2026/6/18 19:58:31

ComfyUI-WanVideoWrapper:你的AI视频创意引擎

ComfyUI-WanVideoWrapper&#xff1a;你的AI视频创意引擎 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想象一下&#xff0c;你脑海中那个生动的场景——竹林中的古老石塔&#xff0c;微风轻拂…

作者头像 李华
网站建设 2026/6/18 19:55:13

生产级机器学习系统:延迟、弹性与可观测性实战指南

1. 项目概述&#xff1a;当模型走出笔记本&#xff0c;真正开始“呼吸”现实世界你有没有经历过这样的场景&#xff1f;花了三个月时间调参、优化、交叉验证&#xff0c;AUC冲到0.92&#xff0c;特征重要性图漂亮得能当屏保&#xff0c;团队在评审会上掌声雷动&#xff0c;PM当…

作者头像 李华
网站建设 2026/6/18 19:53:10

Notebook到生产级ML服务:Triton推理服务器落地实战

1. 项目概述&#xff1a;这不是一次“部署上线”&#xff0c;而是一场从实验室到产线的系统性迁移 “From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题里藏着一个被无数数据科学家反复咀嚼、又悄悄咽下的苦涩真相&#xff1a; 写完 model.…

作者头像 李华