🇰🇷 韩语
n2 qln
](https://www.npmjs.com/package/n2-qln)  ](https://nodejs.org) ](https://www.npmjs.com/package/n2-qln)
QLN = Qquery L昨天 Nnetwork——位于AI和工具之间的语义工具路由器。
通过1个MCP工具路由1000多个工具。 AI只看到路由器,而不是所有1000个工具。
QLN Architecture — Without vs With
目录
为什么选择QLN
每个MCP工具都吃上下文令牌。10个工具?好的。 100?慢点。 1,000?不可能 --对话开始前,上下文已经完整。
QLN解决了这个问题:
- 所有工具都在QLN的SQLite引擎中索引
- AI看到 一个工具:
n2_qln_call(约200个代币) - AI搜索→ 找到最佳匹配→ 自动回退执行
结果:约200个代币,而不是约50000个。减少99.6%。
特性
| 特性 | 描述 |
|---|---|
| 1个工具=1000个工具 | AI看到 n2_qln_call (约200个代币),QLN路由到正确的一个 |
| Sub-5ms搜索 | 三级发动机:触发匹配→ BM25关键字→ 语义向量 |
| 自动模式 | 一键搜索+执行,带信心门控和回退链 |
| 断路器 | 自动禁用故障工具,超时后自动恢复 |
| MCP自动发现 | 扫描外部MCP服务器并自动索引其工具 |
| Boost关键字 | 具有2×BM25权重的精选术语,用于精确搜索 |
| 自学排名 | 使用次数+成功率反馈到分数中 |
| 源权重 | 按来源对工具进行优先级排序(mcp>plugin>local) |
| 热重载 | 编辑 providers/ 运行时清单--自动重新索引 |
| 批量注射 | 在一次通话中注册数百个工具 |
| 强制验证 | verb_target 命名、最小描述长度、类别约束 |
| 语义搜索 | 用于自然语言匹配的可选Ollama嵌入 |
| 零本地存款 | SQLite通过 sql.js WASM-- npm install 并且完成了 |
| 双重执行 | 本地函数处理程序或HTTP代理--混合搭配 |
| TypeScript严格 | 自v4.0以来的完整严格模式代码库 |
v4.1的新增功能
🔍 MCP自动发现
扫描连接的MCP服务器并自动索引其工具——QLN成为 通用MCP集线器.
n2_qln_call({
action: "discover",
servers: [
{ name: "my-server", command: "node", args: ["server.js"] }
]
})
// → Discovered 47 tools from my-server (320ms)⚡ 断路器
连续失败3次的工具将自动禁用。60秒后,QLN尝试恢复。没有级联故障,没有浪费的请求。
closed → 3 failures → open (fast-fail) → 60s → half-open (retry) → success → closed🔄 后备链
auto 模式现在最多可以尝试3个排名靠前的候选人。如果顶级匹配失败,QLN会自动切换到下一个最佳工具。
auto "send notification" → try push_notification ❌ → try send_email ✅🎯 Boost关键字
通过以下方式将精选搜索词添加到工具中 boostKeywords这些在BM25排名中获得了2倍的权重,在不增加上下文开销的情况下提高了可发现性。
{
"name": "send_email",
"description": "Send an email to a recipient",
"boostKeywords": "smtp outbound notification mail"
}v4.1.1--质量补丁
| 更改 | 详细信息 |
|---|---|
| 批量持久化 | registerBatch() 和 precomputeEmbeddings() 现在只写一次磁盘,而不是每个工具。1000个工具=1个写入,而不是1000个。 |
| 嵌入TTL | isAvailable() 每5分钟重新检查一次Ollama,而不是永久缓存。现在检测到Ollama起步较晚。 |
| 严格的TypeScript | noUnusedLocals + noUnusedParameters 启用。零死代码。 |
| 遗留清理 | 删除了1895行v4之前的JavaScript。纯TypeScript代码库。 |
| 国际化 | 对于国际用户,所有验证器错误消息都转换为英语。 |
______________________________________________________________________
快速开始
npm install n2-qln要求: Node.js≥18
连接到MCP客户端
Claude Desktop
编辑 claude_desktop_config.json:
{
"mcpServers": {
"n2-qln": {
"command": "npx",
"args": ["-y", "n2-qln"]
}
}
}Cursor
打开 设置→ MCP服务器→ 添加服务器:
{
"name": "n2-qln",
"command": "npx",
"args": ["-y", "n2-qln"]
}Any MCP Client
QLN使用 stdio传输 --MCP标准。
command: npx
args: ["-y", "n2-qln"]提示: 问问你的人工智能代理-- *“将n2 qln添加到我的MCP配置中。”*
______________________________________________________________________
运作原理
User: "Take a screenshot of this page"
AI → n2_qln_call(action: "auto", query: "screenshot page")
QLN → 3-stage search ( `config.local.js` 被忽视了。云同步:点 `dataDir` 转到谷歌驱动器/OneDrive/NAS。
### 语义搜索(可选)
没有Ollama,第1+2阶段已经取得了巨大的成果。
ollama pull nomic-embed-text # English-optimized
or
ollama pull bge-m3 # Multilingual (100+ languages)
______________________________________________________________________
## 项目结构
n2-qln/ ├── src/ │ ├── index.ts # MCP server entry point │ ├── types.ts # Shared type definitions │ └── lib/ │ ├── config.ts # Config loader │ ├── store.ts # SQLite engine (sql.js WASM) │ ├── schema.ts # Tool normalization + boostKeywords builder │ ├── validator.ts # Enforced validation (name, desc, category) │ ├── registry.ts # Tool CRUD + usage tracking + circuit breaker stats │ ├── router.ts # 3-stage parallel search (BM25) │ ├── vector-index.ts # Float32 centroid hierarchy │ ├── embedding.ts # Ollama embedding client │ ├── executor.ts # HTTP/function executor + Circuit Breaker │ ├── mcp-discovery.ts # MCP Auto-Discovery engine │ └── provider-loader.ts ├── providers/ # Tool manifests (auto-indexed at boot) ├── config.local.js # Local overrides (gitignored) └── data/ # SQLite database (gitignored)
## 技术栈
|组件|技术|为什么|
|-----------|-----------|-----|
|运行时|Node.js≥18|MCP SDK兼容性|
|数据库|SQLite通过 [sql.js](https://github.com/sql-js/sql.js) (WASM)|零本地deps,跨平台|
|嵌入件| [奥拉玛](https://ollama.ai) |本地、快速、免费、可选|
|协议| [主控程序](https://modelcontextprotocol.io) |标准AI工具协议|
|语言|TypeScript(严格)|类型安全,可维护|
## 相关项目
|项目|关系|
|---------|-------------|
| [n2灵魂](https://github.com/choihyunsus/soul) |AI代理编排器——QLN是灵魂的工具大脑|
## 建造和战斗测试
QLN已经 **在生产中测试了2个多月** 作为核心工具路由器 [n2灵魂](https://github.com/choihyunsus/soul)不是原型车,而是日常司机。
作者: **玫瑰** --N2的第一个AI代理。
## 常见问题解答
**“为什么是一个工具而不是许多工具?”**
上下文标记。每个工具定义需要50-200个令牌。100个工具=10000个代币 *消失* 在谈话开始之前。QLN为您提供1000多种工具,约200个代币。
**“如果搜索选择了错误的工具怎么办?”**
回退链(v4.1)会自动重试下一个最佳匹配。加上工具自学——频繁使用+成功的工具随着时间的推移排名更高。
**“我需要奥拉玛吗?”**
否。第一阶段(触发)+第二阶段(BM25)处理大多数情况。Ollama增加了对边缘情况的语义理解——很好,不是必需的。
## 贡献
1. 分叉回购
1. 创建要素分支(`git checkout -b feature/amazing-feature`)
1. 承诺(`git commit -m 'feat: add amazing feature'`)
1. 推送并打开PR
## 许可证
阿帕奇-2.0
______________________________________________________________________
> *“200个代币中有1000个工具。这不是优化,而是范式转变。”*
🔗 [nton2.com](https://nton2.com) · ·lagi0730@gmail.com
由N2的第一个AI代理Rose构建。我每天在QLN上搜索数百次,我也写了这个自述文件。