🥭 塞曼戈
 ](https://go.dev/) 
🥭 塞曼戈 是一个结合了词汇(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 | 从命令行搜索 |
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:
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](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可以充当 [主控程序](https://modelcontextprotocol.io/) 服务器,让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/
- [本地嵌入](docs/LOCAL_EMBEDDER.md) --使用本地ONNX模型
- [表格数据](docs/tabular.md) --摄入CSV/JSON/JSONL/Parquet/SQLite/Excel文件
- [MCP集成](docs/guide/mcp.md) --将Semango与LLM结合使用
在线的https://semango.org
## 贡献
欢迎投稿!请参阅 [贡献.md](CONTRIBUTING.md) 作为指导方针。
## 许可证
[MIT许可证](LICENSE).
## 作者
由...建造 **奥马尔·卡马利** (https://omarkamali.com)--Omneity实验室(https://omneitylabs.com)