跳转至

向量存储 (VectorStore)

示例代码: examples/knowledge/vectorstores

向量存储是 Knowledge 系统的核心组件,负责存储和检索文档的向量表示。

支持的向量存储

trpc-agent-go 支持多种向量存储实现:

向量存储 说明
Memory 内存向量存储
PGVector PostgreSQL + pgvector 扩展
TcVector 腾讯云向量数据库
Elasticsearch 支持 v7/v8/v9 多版本
Qdrant 高性能向量数据库
Milvus 高性能向量数据库

搜索模式

向量存储支持四种搜索模式,系统会根据查询内容自动选择最合适的模式:

搜索模式 枚举值 说明 特殊要求
Vector SearchModeVector 语义相似度搜索,理解查询意图 需要 Embedder
Keyword SearchModeKeyword 关键词精确匹配,适合专业术语 PGVector 需启用 WithEnableTSVector(true)
Hybrid SearchModeHybrid 混合向量和关键词(推荐,默认) PGVector 需启用 WithEnableTSVector(true)
Filter SearchModeFilter 仅按元数据过滤,不计算相似度 -

示例:

// 默认自动搜索
reqSearch := &knowledge.SearchRequest{
    Query: "Large language model applications",
    //History: nil,
    //UserID: "",
    //SessionID: "",
    //MaxResults: 0,
    //MinScore: 0,
    //SearchFilter: nil,
    //SearchMode: 0,
}
rspSearch, err := kb.Search(ctx, reqSearch)
if err != nil {
    log.Debugf("Failed to search knowledge base: %v", err)
    return
}
log.Infof("Search Result:[%+v]", rspSearch)
for i, r := range rspSearch.Documents {
    log.Infof("rspSearch.DOC_%d.score=%v,doc:[%+v]", i, r.Score, r.Document)
}

// 带过滤条件搜索
filter := knowledge.SearchFilter{
    //DocumentIDs: nil,
    //Metadata: nil,
    FilterCondition: searchfilter.And(
        searchfilter.Equal("category", "film"),
        searchfilter.Equal("country_code", "us"),
    ),
}
reqSearchWithFilter := &knowledge.SearchRequest{
    Query:        "排行第一的电影",
    SearchFilter: &filter,
}
rspSearchWithFilter, err := kb.Search(ctx, reqSearchWithFilter)
if err != nil {
    log.Debugf("Failed to search knowledge base: %v", err)
    return
}
log.Infof("Search Result:[%+v]", rspSearchWithFilter)
for i, r := range rspSearchWithFilter.Documents {
    log.Infof("rspSearchWithFilter.DOC_%d.score=%v,doc:[%+v]", i, r.Score, r.Document)
}

过滤器支持

所有向量存储都支持过滤器功能,包括 ID 过滤、元数据过滤和复杂条件过滤(FilterCondition)。

更多内容