向量数据库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 \

 

 

 

 

全部评论