混合搜索引擎

Semango是一个结合了词法(BM25)和语义(向量)搜索的混合搜索引擎,支持代码库和文档的自然语言查询。

  • by omarkamali
  • C++
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 omarkamali/semango

使用说明

🥭 塞曼戈

🥭 塞曼戈 是一个结合了词汇(BM25)和语义(向量)搜索的混合搜索引擎。对代码库和文档进行索引,并使用自然语言查询进行搜索。

网站和文档:https://semango.org

特性

  • 混合搜索:将BM25词汇搜索(Bleve)与向量相似度(FAISS)相结合
  • 多格式摄入:Markdown/文本、代码(纯文本)、PDF、CSV/JSON/JSONL、Parquet、SQLite、Excel
  • 增量索引:仅重新索引已更改的文件(按mtime+size),使后续运行接近即时
  • 嵌入提供者:兼容OpenAI的API或本地ONNX模型
  • GPU加速:内置对CUDA加速本地嵌入的支持
  • MCP服务器:LLM工具使用的模型上下文协议支持(stdio和SSE传输)
  • Web 界面:嵌入式基于React的暗模式搜索界面
  • REST API:用于编程访问的轻量级HTTP API
  • 优雅地关闭:清除所有命令中的Ctrl+C处理
  • 单一二进制:具有嵌入式UI资产的自包含可执行文件

安装

下载二进制文件

# macOS / Linux
curl -L "https://github.com/omarkamali/semango/releases/latest/download/semango_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m).tar.gz" | tar xz
sudo mv semango /usr/local/bin/

码头工人

docker pull ghcr.io/omarkamali/semango:latest
docker run -p 8181:8181 -v $(pwd):/data ghcr.io/omarkamali/semango:latest

从源代码构建

需要Go 1.23+、Node.js 20+和CGO依赖项(FAISS、OpenBLAS)。

git clone https://github.com/omarkamali/semango.git
cd semango
make build

快速开始

# 1. Initialize configuration
semango init

# 2. Index your content
semango index

# 3. Start the server (includes web UI + auto-reconciliation)
semango server

打开http://localhost:8181对于web UI,或查询API:

curl -X POST http://localhost:8181/search \
  -H "Authorization: Bearer your-secret-token" \
  -H "Content-Type: application/json" \
  -d '{"query": "how does authentication work", "top_k": 5}'

CLI命令

命令 描述
semango init 创建默认值 semango.yml 配置文件
semango index 索引文件(增量--跳过未更改的文件)
semango index stats 显示索引统计信息(文档计数)
semango search <query> 从命令行搜索
semango server 使用UI和定期对账启动HTTP服务器
semango mcp stdio 通过stdin/stdout启动MCP服务器
semango mcp sse 通过HTTP/SSE启动MCP服务器
semango models list 列出可用的本地ONNX型号
semango version 打印版本信息

提示: 跑步 semango index 第二次不进行文件更改会立即完成——只有修改过的文件会被重新嵌入和重新索引。


## Configuration

Semango uses `semango.yml` for configuration. Key options:

```yaml
embedding:
  provider: openai          # or "local" for ONNX models
  model: text-embedding-3-large
  # Optional: base_url, api_key, api_key_env, base_url_env
  
lexical:
  enabled: true
  index_path: ./semango/index/bleve
  
hybrid:
  vector_weight: 0.7
  lexical_weight: 0.3
  fusion: linear            # or "rrf"
  
files:
  include:
    - '**/*.md'
    - '**/*.go'
    - '**/*.pdf'
  exclude:
    - .git/**
    - node_modules/**

server:
  port: 8181
  auth:
    type: token
    token_env: SEMANGO_TOKENS

看 docs/SEMANGO_GUIDE.md 以获取完整的配置参考。

环境变量

变量 描述 默认/可选
SEMANGO_TOKENS API有效令牌的逗号分隔列表 已分析但尚未强制执行
OPENAI_API_KEY 当使用API密钥时 provider: openai 如果使用 api_key 或 api_key_env 未设置
OPENAI_BASE_URL OpenAI兼容API的基本URL 默认为OpenAI官方端点
SEMANGO_ENV_FILE 通往 .env 要加载的文件 默认为 .env
SEMANGO_MODEL_DIR 本地ONNX型号的缓存目录 默认为 ~/.cache/semango

您还可以通过设置来自定义Semango要查找的环境变量 api_key_env 或 base_url_env 在你的 semango.yml.

MCP(模型上下文协议)

Semango可以充当 主控程序 服务器,让LLM将您的索引内容用作搜索工具:

# stdio transport (for Claude Desktop, etc.)
semango mcp stdio --config semango.yml

# SSE transport (HTTP-based, for remote clients)
semango mcp sse --host 0.0.0.0 --port 8080 --config semango.yml

文档

  • https://semango.org/guide/
  • 本地嵌入 --使用本地ONNX模型
  • 表格数据 --摄入CSV/JSON/JSONL/Parquet/SQLite/Excel文件
  • MCP集成 --将Semango与LLM结合使用

在线的https://semango.org

贡献

欢迎投稿!请参阅 贡献.md 作为指导方针。

许可证

MIT许可证.

作者

由...建造 奥马尔·卡马利 (https://omarkamali.com)--Omneity实验室(https://omneitylabs.com)