Files
forge/README.md
T
figmar 34bc140195
CI / API - lint + tests (push) Has been cancelled
CI / Web - typecheck + build (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
docs: add Chinese README as default (README.md), keep English as README.en.md
2026-08-10 21:28:02 +08:00

274 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div align="center">
# Forge
**开源、自托管的一站式平台:可视化构建、测试并交付 AI Agent 与工作流。**
在画布上把 Agent、工具、知识与逻辑串联起来 —— 接入你的数据、连接你的系统,并一键部署到邮件、API、MCP 服务器或可嵌入的网页组件。无需编写框架代码。
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Python](https://img.shields.io/badge/Python-3.113.13-3776AB?logo=python&logoColor=white)](apps/api/pyproject.toml)
[![Node](https://img.shields.io/badge/Node-22%20LTS-339933?logo=nodedotjs&logoColor=white)](apps/web/package.json)
[![FastAPI](https://img.shields.io/badge/FastAPI-009688?logo=fastapi&logoColor=white)](apps/api)
[![Next.js](https://img.shields.io/badge/Next.js-14-000000?logo=nextdotjs&logoColor=white)](apps/web)
[![Built with LangChain v1 + LangGraph v1](https://img.shields.io/badge/Built%20with-LangChain%20v1%20%2B%20LangGraph%20v1-1C3C3C)](https://github.com/langchain-ai/langchain)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#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>` spanPlayground 实时流式呈现**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.113.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>