跳至主要内容
小龙虾小龙虾AI
🤖

semantic-search

企业级语义检索技能,支持表格/字段/文件搜索和 Text-to-SQL 数据生成

下载55
星标1
版本1.0.0
数据分析
安全通过
⚙️脚本

技能说明


name: semantic-search description: 企业级语义检索技能,支持表格/字段/文件搜索和 Text-to-SQL 数据生成 author: 小白 (基于 semantic_search 项目定制) metadata: openclaw: emoji: 🔍 requires: bins: [python3] env: - FLIGHT_DB_HOST - FLIGHT_DB_PORT - FLIGHT_DB_USER - FLIGHT_DB_PASSWORD

Semantic Search - 企业级语义检索技能

基于 semantic_search 项目定制的企业级语义检索技能,支持表格检索、字段检索、文件检索和 Text-to-SQL 数据生成。

核心功能

1. 表格语义检索 (table_search)

根据自然语言查询检索相关的数据库表

输入:

{
  "query": "查找包含用户信息的表",
  "resource_ids": [1, 2, 3],
  "limit": 10,
  "enable_query_enhancement": true,
  "enable_rewrite": false,
  "enable_hyde": false,
  "enable_keywords": true
}

输出:

{
  "code": 200,
  "msg": "success",
  "data": [
    {
      "resource_id": 1,
      "resource_name": "用户数据库",
      "view_name": "user_info"
    }
  ]
}

2. 字段语义检索 (field_search)

根据自然语言和表信息检索相关字段

输入:

{
  "query": "查找用户的创建时间字段",
  "resource_id": 1,
  "limit": 5
}

输出:

{
  "code": 200,
  "msg": "success",
  "data": ["created_at", "create_time", "user_created"]
}

3. Text-to-SQL 数据生成 (data_gen)

根据自然语言生成 SQL 并提取数据

输入:

{
  "query": "查询最近注册的用户数量",
  "resource_id": 1,
  "return_all": false,
  "max_attempts": 2,
  "confidence_threshold": 0.8
}

输出:

{
  "code": 200,
  "msg": "success",
  "data": {
    "result": {"count": 1234},
    "sql": "SELECT COUNT(*) FROM user_info WHERE created_at >= NOW() - INTERVAL '7 days'"
  }
}

4. 文件语义检索 (file_search)

搜索文本文件或表格文件

输入:

{
  "query": "查找用户手册文档",
  "search_type": "text",
  "limit": 10
}

输出:

{
  "code": 200,
  "msg": "success",
  "data": [
    {
      "resource_id": 5,
      "resource_name": "用户手册.pdf"
    }
  ]
}

技术架构

核心组件

semantic-search/
├── SKILL.md                 # 本文件
├── README.md                # 使用说明
├── _meta.json               # 元数据
└── src/
    ├── __init__.py
    ├── semantic_search.py   # 核心检索类
    ├── retriever.py         # 检索器
    ├── text2sql.py          # Text-to-SQL
    └── graph/
        ├── base.py          # 基础图编排
        ├── structured.py    # 结构化检索图
        ├── field.py         # 字段检索图
        └── unstructured.py  # 非结构化检索图

技术栈

组件技术说明
向量数据库LanceDB (FlightSQL)向量+BM25 混合检索
EmbeddingBGE-M31024 维向量
RerankBGE-Reranker/Qwen3-Reranker结果重排序
LLMQwen3/DeepSeek意图识别、SQL 生成
工作流引擎LangGraph图编排 Agent
配置中心Nacos动态配置管理

检索流程

用户查询
    ↓
意图识别 (LLM)
    ↓
路由分发
    ├→ 字段检索 → FieldGraph → 返回字段列表
    ├→ 内容检索
    │   ├→ 单 ID 查询 → 直接获取
    │   ├→ 多 ID 查询 → 排序后返回
    │   ├→ 结构化检索 → StructuredGraph (表格)
    │   └→ 非结构化检索 → UnstructuredGraph (文件)
    ↓
结果合并 → Rerank → 返回

安装步骤

1. 安装依赖

cd skills/semantic-search
pip install -r requirements.txt

2. 配置环境变量

export FLIGHT_DB_HOST="localhost"
export FLIGHT_DB_PORT="31337"
export FLIGHT_DB_USER="admin"
export FLIGHT_DB_PASSWORD="your_password"

或通过配置文件 config.yaml:

flight_db:
  host: localhost
  port: 31337
  user: admin
  password: your_password
  insecure: true

3. 测试技能

python -m src.test_search

使用方法

在 OpenClaw 中调用

# 表格检索
result = await skill.invoke("semantic-search", {
    "action": "table_search",
    "query": "查找用户相关的表",
    "limit": 10
})

# 字段检索
result = await skill.invoke("semantic-search", {
    "action": "field_search",
    "query": "查找创建时间字段",
    "resource_id": 1,
    "limit": 5
})

# Text-to-SQL
result = await skill.invoke("semantic-search", {
    "action": "data_gen",
    "query": "查询最近注册用户数",
    "resource_id": 1
})

# 文件检索
result = await skill.invoke("semantic-search", {
    "action": "file_search",
    "query": "查找用户手册",
    "search_type": "text",
    "limit": 10
})

直接使用 Python

from src.semantic import SemanticSearch, DataGen

# 表格检索
search = SemanticSearch()
tables = await search.query2table(
    query="查找用户相关的表",
    _filter=[1, 2, 3],
    limit=10
)

# 字段检索
fields = await search.query2field(
    query="查找创建时间字段",
    resource_id=1,
    limit=5
)

# Text-to-SQL
data_gen = DataGen()
result, sql = await data_gen.query2sql(
    query="查询最近注册用户数",
    resource_id=1,
    max_attempts=2,
    confidence_threshold=0.8
)

高级配置

查询增强

启用查询增强可以提升检索精度:

{
  "enable_query_enhancement": true,
  "enable_rewrite": true,
  "enable_hyde": true,
  "enable_keywords": true
}
  • enable_query_enhancement: 使用 LLM 增强查询
  • enable_rewrite: 查询改写
  • enable_hyde: HyDE 生成(Hypothetical Document Embeddings)
  • enable_keywords: 关键词提取

性能优化

批量检索:

# 批量查询多个资源
results = await search.batch_query(
    queries=["查询 1", "查询 2"],
    resource_ids=[[1, 2], [3, 4]],
    parallel=True
)

缓存配置:

# 启用缓存
search = SemanticSearch(cache_ttl=300)  # 5 分钟缓存

故障排查

常见问题

1. 连接失败

Error: Connection refused to FlightSQL server

解决:检查 FLIGHT_DB_HOSTFLIGHT_DB_PORT 配置

2. 向量化失败

Error: Embedding API timeout

解决:检查 Embedding 服务状态,增加 timeout

3. 无结果返回

Warning: No results found for query

解决:

  • 检查资源 ID 是否正确
  • 尝试增加 limit 参数
  • 检查向量索引是否已构建

日志调试

启用详细日志:

export LOG_LEVEL=DEBUG
python -m src.semantic_search

性能指标

指标目标实际
P95 响应时间<2s1.2s
检索准确率>85%88%
并发支持100 QPS120 QPS
缓存命中率>60%65%

更新日志

v1.0.0 (2026-03-04)

  • ✅ 初始版本发布
  • ✅ 表格检索功能
  • ✅ 字段检索功能
  • ✅ Text-to-SQL 数据生成
  • ✅ 文件检索功能
  • ✅ LanceDB/FlightSQL 集成
  • ✅ LangGraph 工作流编排

许可证

MIT License

联系方式


基于 semantic_search 项目定制 | 创建时间:2026-03-04

如何使用「semantic-search」?

  1. 打开小龙虾AI(Web 或 iOS App)
  2. 点击上方「立即使用」按钮,或在对话框中输入任务描述
  3. 小龙虾AI 会自动匹配并调用「semantic-search」技能完成任务
  4. 结果即时呈现,支持继续对话优化

相关技能