274 lines
18 KiB
Markdown
274 lines
18 KiB
Markdown
<div align="center">
|
||
|
||
# Forge
|
||
|
||
**开源、自托管的一站式平台:可视化构建、测试并交付 AI Agent 与工作流。**
|
||
|
||
在画布上把 Agent、工具、知识与逻辑串联起来 —— 接入你的数据、连接你的系统,并一键部署到邮件、API、MCP 服务器或可嵌入的网页组件。无需编写框架代码。
|
||
|
||
[](LICENSE)
|
||
[](apps/api/pyproject.toml)
|
||
[](apps/web/package.json)
|
||
[](apps/api)
|
||
[](apps/web)
|
||
[](https://github.com/langchain-ai/langchain)
|
||
[](#contributing)
|
||
|
||
</div>
|
||
|
||
---
|
||
|
||
Forge 直接构建于 **MIT 许可的 LangChain v1 + LangGraph v1** 框架之上 —— **绝不**依赖 `langgraph-api`(Elastic 2.0)或 LangSmith(商业版)。你编排的一切都在自己的基础设施上运行,不会向任何第三方编排服务发送数据。
|
||
|
||
- **完全开源(MIT)。** 无专有内核、无用量上限、无厂商锁定。
|
||
- **零基础设施本地开发。** 基于 SQLite + 内嵌 Chroma + 进程内调度器启动 —— 无需 Docker、Postgres 或 Redis。
|
||
- **生产就绪。** 仅通过配置即可切换 Postgres + pgvector、Redis 与真实密钥存储;加固守卫在检测到不安全默认配置时会拒绝启动。
|
||
- **默认可观测。** 每次运行都是一条 span 瀑布图,展示 token、延迟与成本(精确到美分)。
|
||
|
||
## 目录
|
||
|
||
- [功能特性](#功能特性)
|
||
- [架构](#架构)
|
||
- [快速开始(本地、零基础设施)](#快速开始本地零基础设施)
|
||
- [使用 Docker 运行(生产形态)](#使用-docker-运行生产形态)
|
||
- [文档](#文档)
|
||
- [技术栈](#技术栈)
|
||
- [本地修改(与原仓库对比)](#本地修改与原仓库对比)
|
||
- [参与贡献](#参与贡献)
|
||
- [许可证](#许可证)
|
||
|
||
## 功能特性
|
||
|
||
<div align="center">
|
||
<video src="https://github.com/user-attachments/assets/798a6872-0a47-455f-81be-4566184e3e9c" controls muted width="85%"></video>
|
||
</div>
|
||
|
||
> **[观看演示](docs/media/Forge_demo.mp4)** —— 产品内置的 **Forge Assistant** 端到端构建并运行一个工作流。*(如果播放器未内联加载,请点击链接播放。)*
|
||
|
||
### 数据分析
|
||
|
||
<div align="center">
|
||
<video src="https://github.com/user-attachments/assets/ac064ef7-2a0b-4852-8360-82494c6471af" controls muted width="85%"></video>
|
||
</div>
|
||
|
||
### 工具构建器与响应投影
|
||
|
||
注册 **REST、GraphQL、Code、SQL、MCP 或内置** 工具,并针对真实输入进行在线测试。**JMESPath 响应投影** 在数据到达模型*之前*裁剪冗余负载 —— 实时观察原始 → 投影后的 **token 计量表** 收缩,以控制成本。每次出站调用都经过 **SSRF 防护** 筛查,并支持可选的重试、限流与缓存。通过 `{{env.*}}`(来自 `FORGE_TOOL_VARS`)将工具端点指向**按环境取值**的地址,同一工具行即可按部署解析到 dev / qa / prod 主机。平台**内置工具**(时间、计算器、网页抓取/搜索、知识检索、记忆)自动配置到每个项目并受保护不可删除。工具可组织成**工具集** —— 可复用、多对多的分组,在画布上充当文件夹,一键授权给 Agent,并可发布为 MCP 工具集。
|
||
|
||
<div align="center">
|
||
<video src="https://github.com/user-attachments/assets/6fc6cedc-f01f-421d-ad44-6299d0a1646e" controls muted width="85%"></video>
|
||
</div>
|
||
工具页面按集合分组显示(可在网格与列表之间切换),并支持一键**导出 / 导入**,在不同项目间迁移工具:
|
||
|
||
<p align="center"><img src="docs/media/Tools_dashboard.png" alt="Forge 工具页面:按可复用工具集分组的工具网格,支持网格/列表视图与一键导出导入" width="90%"></p>
|
||
|
||
### 可视化 Agent 构建器
|
||
|
||
通过模型、系统提示词、工具、知识、问答以及可排序的**中间件栈**,以友好的表单(无需 JSON)组合出 **Agent** 或 **Deep Agent**(面向长多步任务的规划 + 子 Agent)。实时的 *"模型所见"* 面板会在发布前展示编译后的提示词与中间件执行顺序。可视化构建 **supervisor**:从 Deep Agent 的 **subagents** 手柄拖拽到任意专家 Agent 节点,即可将其折叠为可调用的子 Agent(画布上的组织架构分支)—— 每个子 Agent 拥有自己的模型、工具与提示词,通过 `task` 工具调度,并在 trace 中显示为具名子 Agent span。
|
||
|
||
<div align="center">
|
||
<video src="https://github.com/user-attachments/assets/fe177f46-8e15-4c58-8b70-bc9b52ec3462" controls muted width="85%"></video>
|
||
</div>
|
||
|
||
### 可视化工作流构建器
|
||
|
||
在**拖拽画布**(React Flow)上串联整个应用:从面板拖入节点 —— **Agent** 与深度 Agent、模型调用、分类器、工具、变换、检索、人工输入/交接、路由器、循环、并行扇出/汇合、子工作流与触发器 —— 并用**类型化、经过校验**的连线连接。节点级检查器与实时**状态模式**保证运行类型安全,小地图、撤销/重做与复制/粘贴让大型图保持可控。**保存**、**测试**或打开 **Playground** 观看节点在流式运行中点亮 —— 然后**发布**。
|
||
|
||
<div align="center">
|
||
<video src="https://github.com/user-attachments/assets/d2e7f826-6844-4f92-8975-b1513e2fd8e9" controls muted width="85%"></video>
|
||
</div>
|
||
<p align="center"><img src="docs/media/Workflow.png" alt="Forge 可视化工作流构建器:React Flow 画布串联检索、路由器、Agent 与结束节点,含节点面板、状态模式检查器与小地图" width="90%"></p>
|
||
|
||
### 知识与 RAG
|
||
|
||
让 Agent 基于**你自己的数据**。添加粘贴文本、URL、爬取站点或上传文件(`.txt/.md/.csv/.json/.html/.pdf`);Forge 负责分块、嵌入(**默认支持离线**)并按文件夹组织为向量存储。精选的**问答对**可拦截常见问题,**检索调试器**让你精确检查检索返回的内容。
|
||
|
||
<p align="center"><img src="docs/media/Knowledge.png" alt="Forge 知识页面:文档来源、文件夹、分块状态与问答" width="90%"></p>
|
||
|
||
内置的**检索调试器**按语义相似度绘制每个分块并叠加查询 —— 让你清楚看到检索命中了哪些分块、以及为什么命中:
|
||
|
||
<p align="center"><img src="docs/media/Knowledge_storage_debugger.png" alt="Forge 知识检索调试器:按来源着色的 PCA 分块图,叠加查询标记检索命中的分块" width="90%"></p>
|
||
|
||
### 生成式 UI 组件
|
||
|
||
让 Agent 渲染**丰富的交互式 UI** —— 表格、卡片、表单,而不仅是纯文本。用实时预览一次性编写 HTML/CSS 组件;模型只输出微小的载荷,标记在**沙箱 iframe** 中渲染,绝不膨胀 token 流。按钮可将结构化动作直接回传给 Agent。
|
||
|
||
<p align="center"><img src="docs/media/Components.png" alt="Forge 组件构建器:HTML/CSS 编辑器与天气卡片实时沙箱预览" width="90%"></p>
|
||
|
||
### 可嵌入网页组件
|
||
|
||
通过一行脚本将你的助手嵌入**任何网站** —— 一个锁定你允许来源的悬浮聊天气泡。终端用户只看到对话;操作细节(步骤、token、成本、节点名)保留在仪表盘中,不外泄。
|
||
|
||
<p align="center"><img src="docs/media/Embeddings.png" alt="Forge 嵌入页面:组件开关、允许来源与可复制粘贴的启动脚本" width="90%"></p>
|
||
|
||
### 随处部署 —— 单一 run API、MCP 与通道
|
||
|
||
无需重写即可通过多种表面交付同一工作流:通过**单一 run API**(`POST /run` 处理新轮次、流式与人工介入恢复)进行服务器到服务器调用,将其暴露为 **MCP 服务器**,部署到**邮件**,或嵌入**网页组件**。按请求的调用方上下文(`X-Forge-Context`)让工具代表终端用户行事 —— 密钥绝不进入请求体。
|
||
|
||
<p align="center"><img src="docs/media/Integrations.png" alt="Forge Connect 页面:run API —— Forge API 基础 URL、POST /run 端点与可复制的 curl 示例" width="90%"></p>
|
||
|
||
> [!NOTE]
|
||
> **连接器尚未完整实现。** 预置的一键**连接器库 / 市场**(Google、Slack、Notion、GitHub、Salesforce 等)已列入[路线图](docs/ROADMAP.md#planned--exploring) —— **尚未发布**。目前集成外部系统需手工完成:创建 **REST / GraphQL / MCP 工具**并与 **Auth Provider**(Bearer / API key / Basic / OAuth2 / CSRF-session)配对使用。*(注意:`connector` **角色** —— 一种最小权限、仅 MCP 的用户 —— 是独立且已发布的功能,与连接器库无关。)*
|
||
|
||
### 可观测性与追踪
|
||
|
||
每次运行都捕获为**可折叠的 span 树** —— 模型调用、工具、链、子 Agent、延迟、token 与**成本**,按真实父子关系嵌套,让你精确看到发生了什么、花了多少钱。Deep Agent 派发显示为具名的 `subagent · <name>` span,Playground 实时流式呈现**Agent 活动时间线**(哪个子 Agent/工具在运行)。可配合 **评估** 在发布前捕获回归,并将 trace 导出到任意 **OpenTelemetry** 收集器(如 Langfuse)。
|
||
|
||
<p align="center"><img src="docs/media/Traces.png" alt="Forge 追踪页面:一次运行的 span 瀑布图,含每步延迟、token 与成本" width="90%"></p>
|
||
|
||
### 护栏、预算与治理
|
||
|
||
像生产环境一样运行。项目级**护栏与出站策略**(PII 脱敏、屏蔽词、网络允许/拒绝列表)默认应用于每个 Agent;**预算与配额**封顶支出与 token;**版本管理**为每次变更快照;全部位于按项目的**角色 / RBAC** 与审计日志之后 —— 集中于一个 Settings 页面。
|
||
|
||
<p align="center"><img src="docs/media/Settings.png" alt="Forge 项目设置:General、Members and Roles、API Keys、Model Pricing、Budgets and Quotas、Guardrails and Egress、Versioning 等分区侧栏" width="90%"></p>
|
||
|
||
### 更多功能
|
||
|
||
- **通道** —— 将工作流部署到**邮件**。
|
||
- **触发器** —— Webhook、定时(interval/cron)、入站邮件与轮询"应用事件"。
|
||
- **人工介入** —— 批准/拒绝暂停与到 Agent 收件箱的实时**交接**,回复经同一通道返回。
|
||
- **Auth Providers** —— Bearer、API key、Basic、OAuth2(客户端凭证**与**三方用户登录并自动刷新)与 CSRF/session —— 由加密的、仅引用式密钥(`secret://…`)支撑。
|
||
- **双向 MCP** —— 将你的工具暴露为原生 Streamable-HTTP/SSE 的 **MCP 服务器**(Claude Desktop、Cursor、VS Code 直接连接 —— 无需桥接),支持项目密钥、按用户**个人访问令牌**或可选 **OAuth 2.1** 认证,发布工具集、知识、问答或整个工作流;同时可消费外部 MCP 服务器的工具。
|
||
- **护栏与出站策略** —— 一个项目级 I/O 策略(PII 脱敏、屏蔽词、网络允许/拒绝列表)默认对每个 Agent 强制执行;项目只能*收紧*,不能放松。
|
||
- **导入与导出** —— 以可移植 JSON 包在项目间迁移工具、工作流、Agent 与组件(密钥*值*永不离库)。
|
||
- **评估** —— 由 `contains` / `exact` / `regex` / LLM-`judge` 打分的数据集,按工作流给出通过率,**实时流式**呈现(每个用例完成后立即在 UI 中解析,含单例延迟 + token)。
|
||
- **长期记忆**、响应缓存、带退避的重试与按租户**预算**。
|
||
- **多租户项目与角色**(owner/admin/editor/viewer/connector),含**按项目 RBAC**、可撤销的限定作用域 API 密钥、实体**版本历史**与**审计日志**。
|
||
- **模型无关** —— OpenAI、Anthropic、Google 或任意 LangChain provider,外加离线 `fake:` 模型,让你不花一分钱也能搭好管道。
|
||
|
||
> 完整功能详见 **[用户手册](docs/MANUAL.md)** 的端到端导览与实战示例。
|
||
|
||
## 架构
|
||
|
||
一个 pnpm + Python 单体仓库,通过共享模式契约让前后端保持同步:
|
||
|
||
```
|
||
forge/
|
||
├── apps/
|
||
│ ├── api/ FastAPI 后端 —— 引擎(编译器、注册中心、中间件)、工具、
|
||
│ │ 认证、知识、追踪、MCP 服务器、构建助手。Dockerfile 与
|
||
│ │ Alembic 迁移在此。 [Python]
|
||
│ └── web/ Next.js 控制台 —— 画布、配置面板、playground、trace。Dockerfile
|
||
│ 在此。 [TS/React]
|
||
├── packages/
|
||
│ └── schemas/ 共享 JSON Schema —— 唯一事实来源,后端校验器/编译器
|
||
│ 与前端 <SchemaForm> 均引用它。
|
||
├── docs/ 用户手册、路线图与媒体。
|
||
├── infra/ 生产数据库切换(Postgres 行级安全策略)。
|
||
└── docker-compose.yml 生产形态栈(Postgres · Redis · api · worker · web)。
|
||
```
|
||
|
||
**共享模式**是三个消费方的契约:后端**校验器**(保存时拒绝错误配置)、**编译器**(`compile_workflow`、`build_middleware`)与前端 **`<SchemaForm>`**(由同一文件生成表单)。
|
||
|
||
## 快速开始(本地、零基础设施)
|
||
|
||
### 前置条件
|
||
|
||
- **Python** 3.11–3.13 —— 后端引擎
|
||
- **Node** 22 LTS 与 **pnpm** 9+ —— Web 控制台
|
||
- 无需其他 —— 本地栈运行于 SQLite + 内嵌 Chroma + 进程内调度器,**无需 Docker、Postgres 或 Redis** 即可启动。
|
||
|
||
### 1. 配置环境
|
||
|
||
```bash
|
||
cp .env.example .env # macOS/Linux
|
||
copy .env.example .env # Windows
|
||
```
|
||
|
||
打开 `.env` 填入所需内容(如 LLM provider 密钥)。启动时一切均可选;调用模型的 Agent 需要 provider 密钥。**切勿提交你的 `.env`** —— 它已在 git-ignore 中。
|
||
|
||
### 2. 后端(FastAPI 引擎)
|
||
|
||
```bash
|
||
cd apps/api
|
||
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||
pip install -e ".[dev,all]" # 引擎 + 测试 + 向量/提供方/知识/MCP
|
||
pytest # 可选:离线校验引擎
|
||
uvicorn forge.main:app --reload --port 8000 # http://localhost:8000/docs
|
||
```
|
||
|
||
### 3. 前端(Next.js 控制台)
|
||
|
||
在另一个终端中,从仓库根目录:
|
||
|
||
```bash
|
||
pnpm install
|
||
pnpm --filter web dev # http://localhost:3000
|
||
```
|
||
|
||
打开 **http://localhost:3000** 使用控制台,**http://localhost:8000/docs** 查看 API。首次运行请使用 `you@forge.local` / `forge-admin` 登录,或创建一个新工作区。
|
||
|
||
## 使用 Docker 运行(生产形态)
|
||
|
||
仓库内置的 [`docker-compose.yml`](docker-compose.yml) 可拉起生产形态栈 —— **Postgres**(应用数据库 + 持久化 checkpointer)、**Redis**(共享限流/幂等 + 工作队列)、**API**、**worker** 与 **web** 控制台:
|
||
|
||
```bash
|
||
# 先设置真实密钥(FORGE_JWT_SECRET、FORGE_BOOTSTRAP_ADMIN_PASSWORD、provider 密钥)
|
||
docker compose up --build
|
||
```
|
||
|
||
设置 `FORGE_ENVIRONMENT=production` 后,Forge 会启用加固守卫,并在检测到默认密钥、SQLite 或非持久化 checkpointer 时**拒绝启动**。完整配置见 [`apps/api/README.md`](apps/api/README.md) 与 **[手册 §13 - 上线生产](docs/MANUAL.md)**。
|
||
|
||
## 文档
|
||
|
||
| 文档 | 内容 |
|
||
|---|---|
|
||
| **[用户手册](docs/MANUAL.md)** | 完整功能导览、节点目录与端到端用例(无需开发知识)。 |
|
||
| **[后端 README](apps/api/README.md)** | API 布局、本地与生产切换、依赖说明。 |
|
||
| **[技术栈与架构](TECH_STACK.md)** | 每个依赖及其用途,含请求/运行时序图。 |
|
||
| **[路线图与状态](docs/ROADMAP.md)** | 已发布、进行中与规划中的内容(连接器、更多通道等)。 |
|
||
| **[更新日志](CHANGELOG.md)** | 重要变更,遵循 Keep a Changelog + SemVer。 |
|
||
| **[参与贡献](CONTRIBUTING.md)** | 本地搭建、CI 检查与提交/PR 规范。 |
|
||
|
||
## 技术栈
|
||
|
||
| 层 | 技术 |
|
||
|---|---|
|
||
| **引擎** | LangChain v1 · LangGraph v1 · Deep Agents —— 仅 MIT 框架 |
|
||
| **后端** | Python · FastAPI · SQLAlchemy 2 (async) · Pydantic v2 |
|
||
| **前端** | Next.js 14 (App Router) · React 18 · TypeScript · React Flow |
|
||
| **数据(本地)** | SQLite · 内嵌 Chroma · 进程内缓存/调度器 |
|
||
| **数据(生产)** | Postgres 16 + pgvector · Redis 7 · Fernet/Vault 密钥 |
|
||
| **可观测性** | 内置 tracer + 成本核算 · OpenTelemetry / Langfuse 导出 |
|
||
|
||
## 本地修改(与原仓库对比)
|
||
|
||
本仓库是上游 [Forge](https://github.com/nihalashetty/Forge) 的**带本地定制化的分支**,由 **Gitinbox** 组织托管,用于内部 AI Agent 平台使用。
|
||
|
||
### 与原仓库的差异([`nihalashetty/Forge`](https://github.com/nihalashetty/Forge/tree/main))
|
||
|
||
| 领域 | 原仓库 | 本分支 |
|
||
|---|---|---|
|
||
| **模型目录**(`apps/api/forge/model_catalog.py`) | 仅 OpenAI / Anthropic / Google / 本地 fake 模型 | **新增 DeepSeek** `deepseek-chat`(128k,$0.28/$0.42)与 `deepseek-reasoner`(128k,$0.55/$2.19),注册为 OpenAI 兼容端点 |
|
||
| **DeepSeek 运行时** | 无 | 通过 `OPENAI_BASE_URL` 环境变量在运行时注入 Base URL(零引擎改动,`resolve_model` 端到端可用) |
|
||
|
||
其余引擎、前端与打包代码均与上游一致。与上游保持同步:
|
||
|
||
```bash
|
||
git remote add upstream https://github.com/nihalashetty/Forge.git # 仅首次
|
||
git fetch upstream && git merge upstream/main
|
||
```
|
||
|
||
**上游仓库:** <https://github.com/nihalashetty/Forge>
|
||
|
||
> 英文版:请查看 [README.en.md](README.en.md)
|
||
|
||
## 参与贡献
|
||
|
||
欢迎贡献。Forge 基于 MIT 许可,专为扩展而设计。
|
||
|
||
1. Fork 本仓库并创建功能分支。
|
||
2. 后端改动:在 `apps/api` 下运行 `pytest` 与 `ruff check forge migrations`。
|
||
3. 保持**共享模式**(`packages/schemas`)的权威性 —— 校验器、编译器与前端表单都从它读取。
|
||
4. 发起描述改动内容与理由的 Pull Request。
|
||
|
||
发现 Bug 或有想法?请[提交 issue](https://github.com/nihalashetty/Forge/issues)。
|
||
|
||
## 许可证
|
||
|
||
Forge 以 **[MIT 许可证](LICENSE)** 发布 —— 可免费使用、修改与分发(含商业用途)。它仅构建于 MIT 许可的 LangChain/LangGraph 生态之上,无 Elastic-2.0 或商业许可证依赖。
|
||
|
||
<div align="center">
|
||
<sub>构建于开源的 LangChain 与 LangGraph 生态。</sub>
|
||
</div>
|