在正式的生产环境中,Chroma不推荐使用内存模式,而是要选用 httpClient服务端的模式。这个模式是封装在了docker中,运行起来超简单的。
Docker环境
补充点Docker的知识,安装和基本使用。已有的可以略过。
install
安装部署Docker
docker-compose
sudo apt install –y curl
// 可以先检查下curl: whereis curl ,如果已有不用安装。
//脚本安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
<...>
docker -v /docker version
// Docker version 24.0.5, build ced0996
apt update
apt install docker-compose-plugin
docker compose version
//Docker Compose version v2.20.2
安装好Docker和docker compose就可以了。
Chroma docker安装
mkdir chromadb & cd chromadb
git clone https://github.com/chroma-core/chroma.git
# server
docker compose up -d --build
......
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
server latest 1db4c828e77a 36 seconds ago 649MB
可以看到已经安装好开始运行!在linode上安装很快,可能几分钟吧。国内安装的话可能要折腾一下,可能要半小时或一小时吧。
连接服务端
import chromadb
chroma_client = chromadb.HttpClient(host='localhost', port=8000)
很简洁的两条代码就可以啰!
在LangChain中的整合
import chromadb
from langchain.vectorstores import Chroma
# 加载和实例化数据库
collection = 'testNN'
embedding = OpenAIEmbeddings(
model="text-embedding-ada-002",
openai_api_key=env_vars['OPENAI_API_KEY']
)
httpClient = chromadb.HttpClient(host='localhost', port=8000)
vectordb = Chroma(collection_name=collection, embedding_function=embedding, client=httpClient)
print(33, vectordb)
实例化数据库后就可以对它进行增删改查了,具体操作可以翻看下前面的文章。
总体来说,Chroma单独做数据库还是很容易拉起来,操作也算简单。在做知识库类的项目中,还是可以起到蛮重要的作用。