赞
踩
随着大模型的崛起,数据的海洋愈发浩渺无垠。受限于token的数量,无数的开发者们如同勇敢的航海家,开始在茫茫数据之海中探寻新的路径。他们选择了将浩如烟海的知识、新闻、文献、语料等,通过嵌入算法(embedding)的神秘力量,转化为向量数据,存储在神秘的Chroma向量数据库中。每当用户在大模型的界面上输入一个问题,这个问题也会如同被施了魔法一般,被转化为向量,然后在向量数据库中寻找与之最匹配的相关知识。这些知识如同宝藏一般,被精心组合成大模型的上下文,为其提供了丰富的思考背景。这种方式不仅削减了大模型的计算负担,提高了响应的速度,还大大降低了成本。更令人惊叹的是,它巧妙地绕过了大模型的token限制,成为了一种既简单又高效的处理手段。而向量数据库,在大模型的记忆存储等领域中,发挥着无可替代的作用。它的存在,如同一位守护者,默默地守护着大模型的智慧与记忆,让其在知识的海洋中畅游无阻。
由于大模型的火热,现在市面上的向量数据库众多,主流的向量数据库对比如下所示:
向量数据库 | URL | GitHub Star | Language |
---|---|---|---|
chroma | https://github.com/chroma-core/chroma | 7.4K | Python |
milvus | https://github.com/milvus-io/milvus | 21.5K | Go/Python/C++ |
pinecone | https://www.pinecone.io/ | ❌ | ❌ |
qdrant | https://github.com/qdrant/qdrant | 11.8K | Rust |
typesense | https://github.com/typesense/typesense | 12.9K | C++ |
weaviate | https://github.com/weaviate/weaviate | 6.9K | Go |
本文重点围绕向量数据库Chroma的使用和实战,主要包括以下内容:
Chroma的目标是帮助用户更加便捷地构建大模型应用,更加轻松的将知识(knowledge)、事实(facts)和技能(skills)等我们现实世界中的文档整合进大模型中。
Chroma提供的工具:
Chroma的设计优先考虑:
目前官方提供了Python和JavaScript版本,也有其他语言的社区版本支持。
首先需要Python环境(Chroma官方原生支持Python和JavaScript,本文用Python做示例)
pip install chromadb
直接运行如下代码,便是一个完整的Demo:
- import chromadb
- chroma_client = chromadb.Client()
-
- collection = chroma_client.create_collection(name="my_collection")
-
- collection.add(
- documents=["This is a document about engineer", "This is a document about steak"],
- metadatas=[{"source": "doc1"}, {"source": "doc2"}],
- ids=["id1", "id2"]
- )
-
- results = collection.query(
- query_texts=["Which food is the best?"],
- n_results=2
- )
-
- print(results)
上面的代码中,我们向Chroma提交了两个文档(简单起见,是两个字符串),一个是This is a document about engineer,一个是This is a document about steak。若在add方法没有传入embedding参数,则会使用Chroma默认的all-MiniLM-L6-v2 方式进行embedding。随后,我们对数据集进行query,要求返回两个最相关的结果。提问内容为:Which food is the best?
返回结果:
- {
- 'ids': [
- ['id2', 'id1']
- ],
- 'distances': [
- [1.5835548639297485, 2.1740970611572266]
- ],
- 'metadatas': [
- [{
- 'source': 'doc2'
- }, {
- 'source': 'doc1'
- }]
- ],
- 'embeddings': None,
- 'documents': [
- ['This is a document about steak', 'This is a document about engineer']
- ]
- }
结果显示,两个文档都被正确返回,且id2由于是steak(牛排),相关性与我们的提问更大,排在了首位。还打印了distances。
Chroma一般是直接作为内存数据库使用,但是也可以进行持久化存储。
在初始化Chroma Client时,使用PersistentClient:
client = chromadb.PersistentClient(path="/Users/yourname/xxxx")
这样在运行代码后,在你指定的位置会新建一个chroma.sql
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。