前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >langchain4j+Chroma小试牛刀

langchain4j+Chroma小试牛刀

原创
作者头像
code4it
发布2025-03-05 19:51:17
发布2025-03-05 19:51:17
800
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文主要研究一下如何使用langchain4j对接Chroma向量数据库

步骤

安装Chroma

代码语言:javascript
代码运行次数:0
复制
docker run -d \
  --name chromadb \
  -p 8000:8000 \
  -v "$(pwd)/chroma_data:/chroma/chroma" \
  -e IS_PERSISTENT=TRUE \
  -e ANONYMIZED_TELEMETRY=TRUE \
  docker.1ms.run/chromadb/chroma:latest

pom.xml

代码语言:javascript
代码运行次数:0
复制
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-chroma</artifactId>
            <version>1.0.0-beta1</version>
        </dependency>

example

代码语言:javascript
代码运行次数:0
复制
public class JlamaChromaExample {

    public static void main(String[] args) {
        String chromaEndpoint = "http://localhost:8000";
        EmbeddingStore<TextSegment> embeddingStore = ChromaEmbeddingStore
                .builder()
                .baseUrl(chromaEndpoint)
                .collectionName("test1_collection")
                .logRequests(true)
                .logResponses(true)
                .build();

        EmbeddingModel embeddingModel = JlamaEmbeddingModel.builder()
                .modelName("intfloat/e5-small-v2")
                .build();

        TextSegment segment1 = TextSegment.from("I like football.");
        Embedding embedding1 = embeddingModel.embed(segment1).content();
        embeddingStore.add(embedding1, segment1);

        TextSegment segment2 = TextSegment.from("The weather is good today.");
        Embedding embedding2 = embeddingModel.embed(segment2).content();
        embeddingStore.add(embedding2, segment2);

        Embedding queryEmbedding = embeddingModel.embed("What is your favourite sport?").content();
        List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.findRelevant(queryEmbedding, 1);
        EmbeddingMatch<TextSegment> embeddingMatch = relevant.get(0);

        System.out.println(embeddingMatch.score()); // 0.8144288493114709
        System.out.println(embeddingMatch.embedded().text()); // I like football.
    }
}

这里使用了Jlama提供的JlamaEmbeddingModel,官方示例的AllMiniLmL6V2EmbeddingModel在mac下会报错ai.djl.engine.EngineException: Unexpected flavor: cpu

输出如下

代码语言:javascript
代码运行次数:0
复制
WARNING: Using incubator modules: jdk.incubator.vector
INFO  c.g.tjake.jlama.model.AbstractModel - Model type = F32, Working memory type = F32, Quantized memory type = F32
WARN  c.g.t.j.t.o.TensorOperationsProvider - Native operations not available. Consider adding 'com.github.tjake:jlama-native' to the classpath
INFO  c.g.t.j.t.o.TensorOperationsProvider - Using Panama Vector Operations (OffHeap)
0.8279024262570531
I like football.

小结

langchain4j提供了langchain4j-chroma模块用于访问Chroma。需要注意的是

  • Chroma无法根据字母数字元数据的大于或小于进行过滤,仅支持整数和浮点数。
  • Chroma的过滤方式并非如下:如果你按“key”不等于“a”进行过滤,实际上会返回所有“key”值不等于“a”的记录,但不会返回没有“key”元数据的记录

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤
    • 安装Chroma
    • pom.xml
    • example
  • 小结
  • doc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档