项目简介
AgentForge 是一个自托管的 AI Agent 数据平台。支持上传文档或连接 27 种外部数据源(对象存储、关系型数据库、OLAP、NoSQL、文档平台、代码仓库、企业云),通过 混合检索(向量余弦相似度 + BM25 重打分 + 可选 Cross-Encoder 精排)返回高质量上下文,并通过 MCP / Skill 将数据无缝集成到 Claude Desktop / OpenClaw / Hermes 等智能体应用。
项目采用 Python 3.11+ 开发,后端使用 FastAPI 框架,前端采用 Bulma CSS + Alpine.js。向量数据库默认使用 ChromaDB,可切换为 PostgreSQL + pgvector。嵌入模型使用本地 sentence-transformers(all-MiniLM-L6-v2),无需外部 API 密钥。APScheduler 负责外部数据源的定时增量同步。
安装指南
环境要求
- Python 3.11 或更高版本
- 可选:PostgreSQL 数据库(默认使用 SQLite)
- 可选:pgvector 扩展(用于 PostgreSQL 向量存储)
通过 PyPI 安装(推荐)
pip install agentf
源码安装
git clone https://github.com/canmengfly/AgentForge.git
cd AgentForge
python -m venv .venv && source .venv/bin/activate
pip install -e .
启动服务
agentf-api
启动后访问 http://localhost:8000,默认账户为 admin / admin123。
快速开始
1. 登录系统
启动后访问 http://localhost:8000,使用默认账户 admin / admin123 登录,首次登录后请立即修改管理员密码。
2. 创建集合
在管理界面创建文档集合,用于组织不同主题的知识文档。每个用户的数据位于专属命名空间 u{user_id}_{collection_name},服务端严格隔离。
3. 添加数据
两种方式任选一种或组合:
- 上传文档:支持 TXT / MD / HTML / PDF / DOCX 文件上传或粘贴文本
- 连接外部数据源:在「数据源」页面选择 27 种连接器之一,配置凭证 + 同步间隔,调度器将自动同步内容到向量库
4. 测试检索
使用混合检索功能验证效果。调用 POST /me/search/all 可在所有集合(上传文档 + 外部数据源)统一检索,结果经向量相似度 + BM25 重打分后返回 Top-K。
5. 配置 MCP / Skill
在「Agent 集成」页面一键生成 MCP 配置 JSON 或下载 Skill YAML,将 AgentForge 无缝接入 Claude Desktop / OpenClaw / Hermes 等智能体应用。
功能特性
| 分类 | 详情 |
|---|---|
| 文档摄入 | TXT、MD、HTML、PDF、DOCX——文件上传或粘贴文本 |
| 外部数据源 | 27 种连接器:对象存储、关系型数据库、OLAP、NoSQL、文档平台、代码仓库、企业云 |
| 混合检索 | 向量余弦相似度 + BM25 重打分(针对 SQL 结构化数据源) |
| 精排器 | 可选 Cross-Encoder 精排(sentence-transformers),提升结果精度 |
| 定时同步 | 基于 APScheduler,对所有外部数据源执行增量同步 |
| 向量后端 | ChromaDB(默认)或 PostgreSQL + pgvector |
| 用户系统 | 管理员 + 普通用户角色,JWT httpOnly Cookie 认证,bcrypt cost 12 |
| API Token | 持久化 API 令牌(aft_ 前缀),SHA-256 哈希存储,仅创建时显示一次 |
| MCP 服务器 | stdio 传输,暴露 5 个工具供 Claude 调用 |
| Agent 集成 | MCP 配置生成、Skill YAML 下载、API 测试控制台 |
| Web UI | Bulma CSS + Alpine.js,管理控制台、用户文档管理 |
用户数据隔离
每个用户的文档存储于专属 ChromaDB 集合:u{user_id}_{collection_name}。命名空间前缀在服务端强制校验——用户 A 无法访问用户 B 的数据。
外部数据源
AgentForge 支持 27 种外部数据源,可定时同步并与上传文档一同检索。
支持的连接器
| 分类 | 类型 |
|---|---|
| 对象存储 | 阿里云 OSS、Amazon S3、腾讯云 COS、华为云 OBS |
| 关系型数据库 | MySQL、PostgreSQL、Oracle、SQL Server、TiDB、OceanBase |
| OLAP / 数据仓库 | Apache Doris、ClickHouse、Apache Hive、Snowflake |
| 搜索 / NoSQL | Elasticsearch、MongoDB |
| 文档平台 | 飞书文档、钉钉文档、腾讯文档、Confluence、Notion、语雀 |
| 代码平台 | GitHub、GitLab |
| 企业云 | Microsoft SharePoint、Google Drive |
添加数据源
- 侧边栏进入「数据源」页面
- 点击「新建数据源」,选择类型并填写连接凭证
- 点击「测试连接」验证凭证有效性
- 设置同步间隔(如
30分钟)并保存 - 调度器自动同步内容到你指定的集合
同步行为
- 全量同步:首次运行拉取全部内容
- 增量同步:后续运行仅拉取新增 / 修改内容(数据源支持者)
- 同步的文档出现在你指定的集合中,即时可检索
文档管理
AgentForge 提供完整的文档生命周期管理功能,包括上传、查询和删除操作。
支持的文件格式
| 格式 | 扩展名 | 解析方式 |
|---|---|---|
| 纯文本 | .txt |
直接读取 |
| Markdown | .md |
保留格式文本 |
| HTML | .html |
BeautifulSoup 解析 |
.pdf |
pdfplumber 提取 | |
| Word | .docx |
python-docx 解析 |
混合检索
AgentForge 的检索结果由两路信号融合而成:
- 向量相似度——sentence-transformers 余弦距离,应用于所有集合
- BM25 重打分——词频排序,针对结构化 SQL 数据源(MySQL / PostgreSQL / Oracle / SQL Server / TiDB / OceanBase / Doris / ClickHouse / Hive / Snowflake)
可选启用 Cross-Encoder 精排器,使用专用相关性模型进一步精排结果顺序。
检索流程
- 用户输入查询文本
- 向量检索并行汇总(fan-out)各集合候选结果,初始候选池为
top_k × 4 - SQL 类数据源叠加 BM25 重打分(k₁=1.5,b=0.75)
- 可选 Cross-Encoder 精排
- 按
doc_id去重并返回 Top-K
评分融合
向量相似度与 BM25 分数归一化到 [0, 1] 后按以下公式混合:
final_score = α · vector_score + (1 - α) · bm25_score
混合权重 α 对 SQL 类集合默认为 0.5,对纯向量源为 1.0。
推荐精排模型
| 模型 | 体积 | 延迟(CPU) | 说明 |
|---|---|---|---|
cross-encoder/ms-marco-MiniLM-L-6-v2 |
~68 MB | ~50 ms / chunk | 速度与质量最佳平衡 |
cross-encoder/ms-marco-MiniLM-L-12-v2 |
~117 MB | ~100 ms / chunk | 质量更高 |
cross-encoder/ms-marco-electra-base |
~435 MB | ~200 ms / chunk | 最高质量 |
统一检索 API
POST /me/search/all
Content-Type: application/json
{
"query": "quarterly revenue by region",
"top_k": 10
}
该接口跨你的所有集合(上传文档 + 同步的外部数据源)运行混合检索,返回统一排序的结果列表。
嵌入模型
默认 sentence-transformers/all-MiniLM-L6-v2,本地运行,维度 384,无需外部 API 密钥;可通过 EMBEDDING_MODEL 环境变量切换为其他 sentence-transformers 模型。
启用精排时可配置 RERANKER_MODEL(例如 cross-encoder/ms-marco-MiniLM-L-6-v2)。
用户认证
AgentForge 采用 JWT 认证机制,令牌存储在 httpOnly Cookie 中,有效防止 XSS 攻击。
安全特性
- 密码使用 bcrypt 加密,cost factor 为 12
- JWT 令牌设置合理过期时间
- 支持禁用用户账户
- 用户数据在存储层级隔离
MCP 服务器集成
MCP(Model Context Protocol)是 Anthropic 推出的开放协议,用于标准化 AI 助手与外部数据源和工具的连接方式。AgentForge 提供 MCP 服务器实现,让 Claude 可以直接访问你的知识库。
提供的工具
| 工具名 | 功能 |
|---|---|
search_knowledge |
语义搜索知识库 |
list_collections |
列出所有文档集合 |
add_text_document |
添加文本文档 |
get_document_chunks |
获取文档分块内容 |
delete_document |
删除指定文档 |
配置方法
在「Agent 集成」页面,系统会自动生成 MCP 配置 JSON,拷贝至 Claude Desktop 配置文件即可。同时支持下载 Skill YAML,以即用形式接入 OpenClaw / Hermes 等支持 Skill 协议的智能体应用。页面还提供 API 测试控制台,可在浏览器内验证各工具。
传输方式
当前采用 stdio(标准输入输出)传输,由 Claude Desktop / Claude Code 按需拉起——无需手动启动 MCP 服务。
API 文档
AgentForge 提供完整 RESTful API,所有端点都接收和返回 JSON。支持两种认证方式:浏览器自动携带的 JWT httpOnly Cookie,或请求头中的 Authorization: Bearer aft_xxx。
用户文档端点 /me/*
| 方法 | 端点 | 功能 |
|---|---|---|
| GET | /me/collections | 列出当前用户的所有集合 |
| POST | /me/documents/text | 添加文本文档 |
| POST | /me/documents/upload | 上传文件(TXT / MD / HTML / PDF / DOCX) |
| GET | /me/documents | 列出集合下的文档 |
| DELETE | /me/documents/{doc_id} | 删除文档及其分块 |
| DELETE | /me/collections/{name} | 删除整个集合 |
| GET | /me/chunks | 分页列出分块 |
| POST | /me/search | 在指定集合中执行混合检索 |
| POST | /me/search/all | 跨所有集合统一混合检索 |
数据源端点 /me/datasources
| 方法 | 端点 | 功能 |
|---|---|---|
| GET | /me/datasources | 列出已连接的数据源 |
| POST | /me/datasources | 创建数据源 |
| GET | /me/datasources/{id} | 获取数据源详情 |
| PUT | /me/datasources/{id} | 更新数据源配置 |
| DELETE | /me/datasources/{id} | 删除数据源 |
| POST | /me/datasources/{id}/test | 测试连接 |
| POST | /me/datasources/{id}/sync | 手动触发一次同步 |
API Token 端点 /me/tokens
| 方法 | 端点 | 功能 |
|---|---|---|
| GET | /me/tokens | 列出当前用户的 API Token |
| POST | /me/tokens | 创建 Token(明文仅返回一次) |
| DELETE | /me/tokens/{id} | 删除 Token |
管理员端点 /api/admin/*
| 方法 | 端点 | 功能 |
|---|---|---|
| GET | /api/admin/stats | 平台统计数据 |
| GET | /api/admin/users | 用户列表(可分页与过滤) |
| POST | /api/admin/users | 创建用户 |
| PUT | /api/admin/users/{id} | 更新用户(角色 / 邮箱 / 密码 / 状态) |
| DELETE | /api/admin/users/{id} | 删除用户 |
| GET | /api/admin/collections | 列出全平台集合 |
检索请求示例
POST /me/search
Content-Type: application/json
Authorization: Bearer aft_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"query": "什么是向量数据库?",
"collection": "notes",
"top_k": 5
}
检索响应示例
{
"results": [
{
"chunk_id": "xyz789",
"doc_id": "abc123",
"content": "向量数据库是一种专门设计...",
"score": 0.892,
"metadata": {
"source_type": "mysql",
"table": "products"
}
}
]
}
环境配置
所有配置均通过环境变量读取,支持 .env 文件。
| 变量 | 默认值 | 说明 |
|---|---|---|
DATA_DIR |
./data |
SQLite 与 ChromaDB 文件根目录 |
CHROMA_PERSIST_DIR |
{DATA_DIR}/chroma |
ChromaDB 持久化目录 |
JWT_SECRET |
必填 | JWT 签名密钥(至少 32 位字符) |
JWT_EXPIRE_MINUTES |
10080 |
Cookie 令牌有效期(分钟,默认 7 天) |
VECTOR_BACKEND |
chroma |
向量后端:chroma 或 pgvector |
PG_VECTOR_URL |
"" |
使用 pgvector 时的 PostgreSQL DSN |
EMBEDDING_DIM |
384 |
嵌入向量维度(必须与模型匹配) |
EMBEDDING_MODEL |
all-MiniLM-L6-v2 |
sentence-transformers 模型名称 |
RERANKER_MODEL |
"" |
Cross-Encoder 模型名称(空 = 禁用精排) |
.env 示例
DATA_DIR=/var/agentforge/data
JWT_SECRET=replace-with-a-random-32-char-string
VECTOR_BACKEND=chroma
EMBEDDING_MODEL=all-MiniLM-L6-v2
RERANKER_MODEL=cross-encoder/ms-marco-MiniLM-L-6-v2