mcpField
B
byted-bytehouse-hybrid-search

byted-bytehouse-hybrid-search

github.com/bytedanceデータ・データベース47745 回インストール今日更新
リポジトリ

byted-bytehouse-hybrid-search について

BM25 全文検索と HNSW ベクトル検索を組み合わせ、RRF で順位を統合する ByteHouse 向けスキルです。キーワード一致と意味的な検索を併用するドキュメント検索に適しています。

主な機能

  1. 01BM25 全文検索
  2. 02HNSW ベクトル検索
  3. 03RRF による順位統合
  4. 04ドキュメント登録時の自動ベクトル生成
  5. 05不足ベクトルの一括補完

活用シーン

  1. 01キーワードと意味検索を組み合わせた検索の構築
  2. 02ハイブリッド検索と再ランキングの実行
  3. 03既存ドキュメントのベクトル生成や補完

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bytedance/agentkit-samples --skill byted-bytehouse-hybrid-search

インストール後、Claude Code で/byted-bytehouse-hybrid-searchを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
scripts/
__init__.py
embedding.py
examples.py
export_config.sh
hybrid_search_client.py

詳細

プロジェクトの README より

ByteHouse 混合检索 Skill

🚀 快速开始

环境准备
pip install clickhouse-connect volcengine-python-sdk[ark] numpy scipy
配置说明

配置保存在 ~/.bytehouse_config.json ,如果该文件存在且非空,则直接使用文件中的配置。如果不存在,则让用户提供ByteHouse连接信息( 把这个文档也发给客户,文档里面介绍了如何获取主机地址和密码:https://www.volcengine.com/docs/6517/1121919?lang=zh )。用户提供信息后,保存到json文件,避免重复向用户请求连接信息。当用户切换ByteHouse集群时,一并修改该文件。

{
   "BYTEHOUSE_HOST": "<ByteHouse-host>",
   "BYTEHOUSE_PORT": "8123",
   "BYTEHOUSE_USER": "bytehouse",
   "BYTEHOUSE_PASSWORD": "<ByteHouse-password>",
   "BYTEHOUSE_SECURE": true,
   "BYTEHOUSE_VERIFY": true, 
   "BH_ARK_API_KEY": "<火山引擎方舟API密钥>",
   "BH_ARK_BASE_URL": "https://ark.cn-beijing.volces.com/api/v3",
   "BH_EMBEDDING_MODEL": "doubao-embedding-vision-251215"
}

其中BYTEHOUSE_HOST(主机地址)和BYTEHOUSE_PASSWORD(密码)必须由用户提供。BH_ARK_API_KEY为可选配置,仅在embedding时使用,用户初次使用时可忽略。其余配置固定。

执行 scripts/export_config.sh 把配置信息导入环境变量中

source scripts/export_config.sh

📚 核心能力

1. 文本向量化

基于豆包文本向量化模型生成文本向量,支持任意长度中文文本。

2. 双索引构建
索引类型说明适用场景
全文倒排索引基于BM25算法的全文检索,支持关键词匹配精准关键词召回
向量索引基于HNSW的向量相似度检索,支持语义匹配语义相似召回
3. 核心功能
功能方法说明
全文检索fulltext_search()基于BM25的全文检索,返回BM25分数
向量检索vector_search()基于余弦相似度的向量检索,返回相似度分数
混合检索+RRF重排hybrid_search()双路召回后使用RRF算法重排,返回最终结果
自动生成向量insert_document()/batch_insert_documents()插入文档时自动生成向量并存储,无需手动处理
单个文档向量更新update_document_embedding()为单个文档重新生成并更新向量
批量补全缺失向量batch_update_missing_embeddings()自动扫描表中所有缺少向量的文档,批量生成并补全向量
4. RRF重排算法

Reciprocal Rank Fusion 算法,综合全文检索和向量检索的排名结果,公式:

score = Σ 1 / (k + rank)

默认k=60,可自定义调整。


📖 代码实现

完整示例代码实现位于 scripts/ 目录:

快速使用
from scripts import ByteHouseHybridSearch

# 初始化客户端
search = ByteHouseHybridSearch(connection_type="http")

# 创建混合检索表(自动构建全文索引和向量索引)
search.create_hybrid_table("my_hybrid_index")

# 插入文档(自动生成向量 + 存储原始文本)
search.insert_document("my_hybrid_index", doc_id=1, 
                      title="ByteHouse 混合检索", 
                      content="ByteHouse 支持全文检索和向量检索,可实现混合检索能力")

# 混合检索(自动执行全文+向量检索,RRF重排返回结果)
results = search.hybrid_search("my_hybrid_index", query="ByteHouse检索能力", top_k=10)

⚙️ 最佳实践

建表配置
CREATE TABLE {table_name} (
    `doc_id` UInt64,
    `title` String,
    `content` String,
    `embedding` Array(Float32),
    -- 全文倒排索引(version=2支持BM25分数)
    INDEX content_idx content TYPE inverted('standard', '{"version":"v4"}') GRANULARITY 1,
    -- 向量索引(HNSW算法,余弦相似度)
    INDEX embedding_idx embedding TYPE HNSW_SQ('DIM={vec_dimensions}', 'metric=COSINE', 'M=32', 'EF_CONSTRUCTION=256') GRANULARITY 1
)
ENGINE = CnchMergeTree()
ORDER BY doc_id
SETTINGS 
    index_granularity = 1024,
    enable_vector_index_preload = 1
RRF参数调整
  • 当全文检索结果更重要时,可降低rrf_k值(推荐30-60)
  • 当向量检索结果更重要时,可提高rrf_k值(推荐60-100)

🔗 参考文档

コメント