内容
# 米米尔
[](https://github.com/jcode-works/jcode-mimir/actions/workflows/ci.yml)
[](https://github.com/jcode-works/jcode-mimir/actions/workflows/codeql.yml)
[](https://www.npmjs.com/package/@jcode.labs/mimir)
[](./LICENSE)
开源、本地优先的私有项目知识存储与检索。
米米尔提供了一个TypeScript命令行工具和库,可以安装在任何Node.js仓库中。它索引目标仓库的文件,本地存储向量与LanceDB,并使用Ollama进行本地嵌入和回答。
由Jean-Baptiste Thery创建,并以JCode Labs的npm范围发布。
## 开源
米米尔是一个公开的开源项目,遵循MIT许可证。它设计为可检查、可分叉,并在无需JCode Labs账户的情况下可使用。
通过拉取请求欢迎贡献。从[`CONTRIBUTING.md`](./CONTRIBUTING.md)开始。安全报告应保持私密,并遵循[`SECURITY.md`](./SECURITY.md)中的策略。
## 状态
早期公开软件包。API可能在`1.0.0`之前发生变化。
## 要求
- Node.js 20+
- pnpm、npm、yarn或bun
- Ollama在本地运行
- 安装后嵌入模型:
```bash
ollama pull nomic-embed-text
```
可选答案模型:
```bash
ollama pull gemma4
```
## 从npm安装
该软件包是公开的。用户无需JCode Labs账户或npm令牌即可安装。
使用pnpm:
```bash
pnpm add -D @jcode.labs/mimir
```
使用npm:
```bash
npm install --save-dev @jcode.labs/mimir
```
维护者令牌仅在发布新版本时需要。
## 从Git安装
```bash
pnpm add -D git+ssh://git@github.com/jcode-works/jcode-mimir.git
```
用于本地开发:
```bash
pnpm add -D file:../jcode-mimir
```
在创建npm压缩包之前,运行:
```bash
pnpm build
pnpm pack
```
## 在任意仓库中使用
初始化本地项目配置:
```bash
pnpm exec kb init
```
在`private/`下添加私有文档,然后运行:
```bash
pnpm exec kb ingest
pnpm exec kb search "vendor invoice status"
pnpm exec kb ask "What do the documents prove?"
pnpm exec kb audit
pnpm exec kb status
```
使用npm,在安装软件包后使用`npx`:
```bash
npx kb init
npx kb ingest
npx kb search "vendor invoice status"
npx kb ask "What do the documents prove?"
npx kb audit
npx kb status
```
## 代理技能与MCP
米米尔附带了一个可移植的代理技能和一个标准的MCP服务器。
在仓库中安装代理工具包:
```bash
pnpm exec kb install-skill
```
这会创建:
```plain text
.mimir/skills/mimir/SKILL.md
.mimir/mcp.json
.mimir/README.md
```
支持技能文件夹的代理可以加载`.mimir/skills/mimir/`。其他代理可以读取生成的`.mimir/README.md`并使用MCP配置片段。
从仓库根目录启动MCP服务器:
```bash
pnpm exec kb serve-mcp
```
公开的MCP工具:
- `mimir_status`
- `mimir_search`
- `mimir_ask`
- `mimir_audit`
打印从已安装软件包中捆绑的技能路径:
```bash
pnpm exec kb skill-path
```
## 数据边界
软件包代码位于`node_modules`或此仓库中。项目数据保留在运行CLI的仓库中:
```plain text
your-project/
private/ # 要摄入的原始文档
.kb/config.json # 本地配置
.kb/sources.txt # 可选的额外源路径
.kb/storage/ # 生成的LanceDB索引
```
软件包从不发送项目文档。`kb init`为`.kb/storage/`和`private/**`添加gitignore条目。
## 支持的文件
- Markdown:`.md`, `.mdx`
- 文本:`.txt`, `.text`
- JSON:`.json`
- YAML:`.yaml`, `.yml`
- CSV/TSV:`.csv`, `.tsv`
- HTML:`.html`, `.htm`
- PDF:`.pdf`
## 配置
`.kb/config.json`:
```json
{
"rawDir": "private",
"storageDir": ".kb/storage",
"sourcesFile": ".kb/sources.txt",
"tableName": "chunks",
"ollamaHost": "http://localhost:11434",
"embedModel": "nomic-embed-text",
"llmModel": "gemma4:latest",
"topK": 5,
"chunkSize": 1200,
"chunkOverlap": 150
}
```
环境变量覆盖:
- `KB_RAW_DIR`
- `KB_STORAGE_DIR`
- `KB_SOURCES_FILE`
- `KB_OLLAMA_HOST`
- `KB_EMBED_MODEL`
- `KB_LLM_MODEL`
- `KB_TOP_K`
- `KB_CHUNK_SIZE`
- `KB_CHUNK_OVERLAP`
## 库API
```ts
import { ingest, search, ask } from "@jcode.labs/mimir"
await ingest({ rebuild: true })
const results = await search("vendor invoice status")
const answer = await ask("What documents support the project timeline?")
```
## 隐私
- 嵌入和答案默认使用本地Ollama。
- 向量索引存储在本地。
- 原始私有文档应保留在目标仓库的忽略的`private/`文件夹中。
- 请勿在此软件包仓库中放置机密或扫描件。
## 许可证
MIT © Jean-Baptiste Thery。