news 2026/6/30 12:50:15

Android开发转AI Agent:第11天——Chroma向量数据库,3行替代手写10行检索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android开发转AI Agent:第11天——Chroma向量数据库,3行替代手写10行检索

作者:一位Android开发工程师 | 2026年6月29日
系列:第10天手写了完整RAG,今天用专业工具替代手写部分


前言

第9/10天我手写了向量检索——for 循环 + 余弦相似度 + 排序。这在知识库只有 5 条文档时没问题,但如果知识库有 5000 条,手写循环就太慢了。

今天学 Chroma——一个专门做向量存储和检索的数据库。


对比:手写 vs Chroma

手写版(第10天,8行)

q_vec=model.encode(question)results=[]fordocindocs:vec=model.encode(doc)sim=np.dot(vec,q_vec)/(norm(vec)*norm(q_vec))results.append((sim,doc))results.sort(reverse=True)top3=[docfor_,docinresults[:3]]

Chroma 版(3行)

collection=client.create_collection(name="my_docs")collection.add(documents=docs,ids=ids)results=collection.query(query_texts=[question],n_results=3)

Chroma 替你做了三件事:向量化 + 存储 + 检索


完整代码

importchromadbfromsentence_transformersimportSentenceTransformer# 自定义 Embedding 函数(用本地中文模型)classLocalEmbedding(EmbeddingFunction):def__init__(self):self.model=SentenceTransformer("shibing624/text2vec-base-chinese")def__call__(self,input):returnself.model.encode(input).tolist()# Chroma 核心 4 行client=chromadb.Client()collection=client.create_collection(name="my_docs",embedding_function=LocalEmbedding())collection.add(documents=docs,ids=[f"doc_{i}"foriinrange(len(docs))])results=collection.query(query_texts=["协程怎么管理生命周期?"],n_results=3)

踩坑:中文模型选择

一开始用all-MiniLM-L6-v2,结果"协程怎么管理生命周期"检索到的第一条是 Room 数据库相关——不是生命周期那条。

原因:all-MiniLM-L6-v2对中文语义理解不够精确。换成专为中文优化的shibing624/text2vec-base-chinese后,检索准确了——生命周期那条排到了第一。

教训:做中文 RAG 一定要用中文 Embedding 模型。


Chroma 核心 4 行(需要记住的)

client=chromadb.Client()# 1. 创建客户端collection=client.create_collection(name="xxx")# 2. 建集合(类似 CREATE TABLE)collection.add(documents=docs,ids=ids)# 3. 添加文档results=collection.query(query_texts=[q],n_results=3)# 4. 查询

今天的一句话总结

Chroma 就是把第9天手写的 for 循环+余弦相似度+排序封装成了collection.query()一行。就像用 Room 数据库替代手写 SQLite——专业工具让代码更简洁。


下一篇预告

第12天:Function Calling——让 LLM 不再只是"说",而是能"做"。Agent 最关键的能力。


本系列记录一位Android开发者转行AI Agent的完整学习过程,欢迎关注交流。

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

芯片烧录流:完成与标记作用几何?校验后芯片命运如何

芯片烧录作为其中至关重要的一环,其流程、完成标记的作用以及校验后芯片的命运都备受关注。今天,我们就以深圳市谷易电子有限公司的产品和服务为例,深入探讨这些问题。芯片烧录流程大揭秘芯片烧录是将程序代码写入芯片的过程,这个…

作者头像 李华
网站建设 2026/6/30 12:46:31

2026年新的java项目技术栈总结学习

整套微服务技术栈重点详解(SpringCloud Alibaba 2022 SpringBoot3 JDK17 CS-UI 前端)整体栈总览前端:CS-UI(后台管理前端框架,前后端分离) 后端基座:OpenJDK17 SpringBoot3 微服务全家桶&am…

作者头像 李华
网站建设 2026/6/30 12:40:55

MinIO 单机部署实战:从零到一在 CentOS 7 上构建企业级对象存储

1. MinIO 是什么?为什么选择它? 如果你正在寻找一个轻量级、高性能的对象存储解决方案,MinIO 绝对值得一试。作为一个开源的分布式对象存储服务器,MinIO 兼容 Amazon S3 API,这意味着你可以用极低的成本获得类似 AWS S…

作者头像 李华
网站建设 2026/6/30 12:39:21

当创意遇上成本:如何为Adobe软件寻找可持续的替代方案

当创意遇上成本:如何为Adobe软件寻找可持续的替代方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你是否曾经面对Adobe Creative Cloud的订阅账单感…

作者头像 李华
网站建设 2026/6/30 12:38:32

电路设计实战——GND的接法如何影响EMC与信号完整性

1. 为什么GND接法如此重要? 我第一次设计混合信号电路板时,EMC测试连续三次失败。调试两周后才发现,问题出在一个看似简单的环节——GND的接法。当时数字信号线上的噪声高达200mV,导致ADC采样值跳变严重。后来通过重新规划接地策略…

作者头像 李华
网站建设 2026/6/30 12:37:52

097、版本更新追踪:CodeX Release Notes 解读与新功能评估方法

097、版本更新追踪:CodeX Release Notes 解读与新功能评估方法 上周五凌晨三点,我盯着终端里一行诡异的报错发呆——TypeError: Cannot read properties of undefined (reading context)。这个错误在CodeX 0.9.8版本里从未出现过,但升级到0.9.9后,我的一个老项目突然炸了。…

作者头像 李华