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

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版本的,问题解决。

http://www.jsqmd.com/news/1037927/

相关文章:

  • 【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (6)--- Rollout
  • 上海汽车音响改装首选 | 音乐人生:20年专业积淀,上海音响改装标杆品牌 - 音乐人生汽车音响
  • 基于智谱GLM-5构建高效命令行AI助手:从原理到实战
  • 5.18冲刺
  • 靠谱高速冲床源头厂家推荐:易田高速冲床契合精密制造趋势 - 资讯纵览
  • GARYNOVA首饰共创联系方式获取,专属顾问全程进度可视 - 松梢月冷
  • 2026吸水棒选型指南:代表性源头厂家解析 满足多场景合规需求 - 资讯纵览
  • 破解湘潭实木衣柜定制痛点:五真原木定制方法论如何实现健康高品质落地? - 资讯纵览
  • 首饰共创合作哪家口碑佳?GARYNOVA三级质检材质保真甄选 - 松梢月冷
  • 第五代高速USB与IrDA集成芯片:单芯片方案的设计优势与实战指南
  • TensorFlow医学影像分析实战:MRI预处理与3D模型微调
  • Zotero Actions Tags:智能自动化插件让文献管理效率提升300%
  • 《梦断代码》|复盘项目败因,规避开发误区 - 20243867孙堃2405
  • 5.15冲刺
  • GARYNOVA首饰共创联系方式怎么找?专属顾问进度可视 - 秋山寄远
  • Windows系统文件opencl.dll丢失找不到问题解决
  • 快速射电暴与超新星遗迹环境研究
  • 正则表达式核心语法与实战:从模式匹配到高效文本处理
  • 2026 福州金价持续走高,教你避开回收陷阱高价出手黄金 - 奢侈品回收评测
  • 2026法考APP如何选择不踩坑?四大主流品牌全方位对比评测来了! - 信息热点
  • 3步高效配置洛雪音乐音源方案:构建稳定免费的音乐播放体系
  • 79
  • Kiro Hook 实战指南:保存文件自动 lint、commit 自动测试,6 个场景配置详解
  • 2026年6月三轮小吃车厂家推荐指南 - 多才菠萝
  • 2023年AI工程化落地实战:从RAG、小样本CV到可控生成的硬核经验
  • Python+pytest+Playwright:从Web自动化测试到RPA的工程化实践
  • 2026年6月四轮餐车厂家推荐指南 - 多才菠萝
  • 2026年IP隔离浏览器推荐选型:静态动态双模式,适配不同运营需求 - 资讯纵览
  • TensorFlow 2.x实战:CRNN+CTC端到端文本识别落地指南
  • 高效双语翻译扩展KISS Translator:10个实用配置技巧提升邮件阅读体验