向量数据库Chroma的Java客户端使用
发布于:2024-05-05 16:47
五一节关注很多RAG微调相关开源产品,都不尽如人意,故而转向自己折腾向量数据库,现在选型也比较多,做个记录。
在这篇博文中,我主要介绍了 Chroma Vector DB Java 客户端,该工具旨在简化 Chroma Vector DB 与 Java 应用程序的集成。这个新的客户端库为开发人员提供了易于使用的 API,以访问强大的 AI/ML 平台 Chroma Vector DB 的功能。无论您是初学者还是经验丰富的开发人员,这款 Java 客户端都可以帮助您开始使用 Chroma Vector DB,并将您的 AI/ML 项目提升到一个新的水平。
如果需要跟着本文章流程自己DIY,那么你最好具备:Java、Maven、docker、minikube、python3.9或者python3.10
准备环境:
1、启动一个单节点的minikube,安装chroma charts
minikube start --profile=chroma
helm repo add chroma <https://amikos-tech.github.io/chromadb-chart/>
helm repo update
helm install chroma charts/chromadb-chart --set chromadb.allowReset=true
kubectl port-forward svc/chroma-chromadb 8000:8000
或者
minikube service chroma-chromadb --url
2、创建一个 virtualenv 并安装依赖项:
python -m virtualenv venv
. venv/bin/activate
pip install -r requirements.txt
安装依赖并启动chroma
LLOW_RESET=true IS_PERSISTENT=1 uvicorn chromadb.app:app --workers 1 --host 0.0.0.0 --port 8000 --proxy-headers --log-config log_config.yml
3、这里没有从maven库直接下载,而是自己Clone代码编译最新代码,新手可以直接maven引用:
Clone代码编译:
https://github.com/amikos-tech/chromadb-java-client
直接maven:
<dependency>
<groupId>io.github.amikos-tech</groupId>
<artifactId>chromadb-java-client</artifactId>
<version>0.1.0-SNAPSHOT</version>
</dependency>
4、测试
package main;
import com.google.gson.internal.LinkedTreeMap;
import tech.amikos.chromadb.Client;
import tech.amikos.chromadb.Collection;
import tech.amikos.chromadb.EmbeddingFunction;
import tech.amikos.chromadb.OpenAIEmbeddingFunction;
import java.util.*;
/**
* Hello Chroma!
*
*/
public class App
{
public static void main(String[] args) {
try {
Client client = new Client(System.getenv("CHROMA_URL"));
String apiKey = System.getenv("OPENAI_API_KEY");
EmbeddingFunction ef = new OpenAIEmbeddingFunction(apiKey);
Collection collection = client.createCollection("test-collection", null, true, ef);
List<Map<String, String>> metadata = new ArrayList<>();
metadata.add(new HashMap<String, String>() {{
put("type", "scientist");
}});
metadata.add(new HashMap<String, String>() {{
put("type", "spy");
}});
collection.add(null, metadata, Arrays.asList("Hello, my name is John. I am a Data Scientist.", "Hello, my name is Bond. I am a Spy."), Arrays.asList("1", "2"));
LinkedTreeMap<String, Object> qr = collection.query(Arrays.asList("Who is the spy"), 10, null, null, null);
System.out.println(qr);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
}
}
}
注意配置:
CHROMA_URL=http://localhost:8000 \
OPENAI_API_KEY=sk-XXXXXXXXX \
全部评论