Retriever - volc VikingDB

基本介绍

火山引擎 VikingDB 检索器是 Retriever 接口的一个实现,火山引擎 VikingDB 是火山引擎提供的向量数据库服务,提供了高性能的向量检索能力,本组件通过火山引擎 VikingDB Go SDK 与服务进行交互。该组件实现了 [🚧]Eino: Retriever 使用说明

使用方式

组件初始化

火山引擎 VikingDB 检索器通过 NewRetriever 函数进行初始化,主要配置参数如下:

retriever, err := NewRetriever(ctx, &RetrieverConfig{
    // 服务配置
    Host:              "api.volcengineapi.com", // 服务地址
    Region:            "cn-beijing",            // 区域
    AK:                "your-ak",               // 访问密钥 ID
    SK:                "your-sk",               // 访问密钥密码
    Scheme:            "https",                 // 协议
    ConnectionTimeout: 30,                      // 连接超时时间(秒)
    
    // 数据配置
    Collection: "collection-name",  // 集合名称
    Index:      "index-name",      // 索引名称
    
    // 向量化配置
    EmbeddingConfig: EmbeddingConfig{
        UseBuiltin:   true,        // 是否使用内置向量化
        ModelName:    "model-name",// 模型名称
        UseSparse:    true,        // 是否使用稀疏向量
        DenseWeight:  0.5,         // 稠密向量权重
        Embedding:    embedder,    // 自定义向量化器
    },
    
    // 检索配置
    Partition:      "partition",   // 分区名称
    TopK:           ptrOf(100),   // 返回结果数量
    ScoreThreshold: ptrOf(0.7),   // 相似度阈值
    
    // 过滤配置
    FilterDSL: map[string]any{    // DSL 过滤条件
        "term": map[string]any{
            "field": "value",
        },
    },
})

检索文档

文档检索通过 Retrieve 方法实现:

docs, err := retriever.Retrieve(ctx, "查询文本", retriever.WithTopK(5))

完整使用示例

基本检索

package main

import (
    "context"
    
    "github.com/cloudwego/eino-ext/components/retriever/volc_vikingdb"
)

func main() {
    ctx := context.Background()
    
    // 初始化检索器
    r, err := volc_vikingdb.NewRetriever(ctx, &volc_vikingdb.RetrieverConfig{
        Host:       "api.volcengineapi.com",
        Region:     "cn-beijing",
        AK:         "your-ak",
        SK:         "your-sk",
        Collection: "your-collection",
        Index:      "your-index",
        EmbeddingConfig: volc_vikingdb.EmbeddingConfig{
            UseBuiltin: true,
            ModelName:  "model-name",
            UseSparse:  true,
            DenseWeight: 0.5,
        },
        TopK: ptrOf(5),
    })
    if err != nil {
        panic(err)
    }
    
    // 执行检索
    docs, err := r.Retrieve(ctx, "如何使用 VikingDB?")
    if err != nil {
        panic(err)
    }
    
    // 处理结果
    for _, doc := range docs {
        println("文档ID:", doc.ID)
        println("内容:", doc.Content)
        println("相似度:", doc.MetaData["_score"])
    }
}

自定义向量化

package main

import (
    "context"
    
    "github.com/cloudwego/eino-ext/components/retriever/volc_vikingdb"
    "github.com/cloudwego/eino/components/embedding"
)

func main() {
    ctx := context.Background()
    
    // 初始化向量化器 (以 openai 为例)
    embedder, err := &openai.NewEmbedder(ctx, &openai.EmbeddingConfig{})
    if err != nil {
        panic(err)
    }
    
    // 初始化检索器
    r, err := volc_vikingdb.NewRetriever(ctx, &volc_vikingdb.RetrieverConfig{
        Host:       "api.volcengineapi.com",
        Region:     "cn-beijing",
        AK:         "your-ak",
        SK:         "your-sk",
        Collection: "your-collection",
        Index:      "your-index",
        EmbeddingConfig: volc_vikingdb.EmbeddingConfig{
            UseBuiltin: false,
            Embedding:  embedder,
        },
    })
    if err != nil {
        panic(err)
    }
    
    // 执行检索
    docs, err := r.Retrieve(ctx, "查询文本")
    if err != nil {
        panic(err)
    }
    
    // 处理结果
    for _, doc := range docs {
        println(doc.Content)
    }
}

相关文档


最后修改 January 9, 2025 : feat: add eino cn docs (#1182) (ad75444)