docs: add Chinese README as default (README.md), keep English as README.en.md
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

This commit is contained in:
figmar
2026-08-10 21:28:02 +08:00
parent fe5bd06f76
commit 34bc140195
2 changed files with 402 additions and 129 deletions
+133 -129
View File
@@ -2,9 +2,9 @@
# Forge
**The open-source, self-hosted platform for visually building, testing, and shipping AI agents & workflows.**
**开源、自托管的一站式平台:可视化构建、测试并交付 AI Agent 与工作流。**
Wire agents, tools, knowledge, and logic on a canvas - ground them in your data, connect them to your systems, and deploy to email, an API, an MCP server, or an embeddable web widget. No framework code required.
在画布上把 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)
@@ -18,252 +18,256 @@ Wire agents, tools, knowledge, and logic on a canvas - ground them in your data,
---
Forge is built directly on the **MIT-licensed LangChain v1 + LangGraph v1** framework - and **never** depends on `langgraph-api` (Elastic 2.0) or LangSmith (commercial). Everything you orchestrate runs on your own infrastructure; nothing is sent to a third-party orchestration service.
Forge 直接构建于 **MIT 许可的 LangChain v1 + LangGraph v1** 框架之上 —— **绝不**依赖 `langgraph-api`Elastic 2.0)或 LangSmith(商业版)。你编排的一切都在自己的基础设施上运行,不会向任何第三方编排服务发送数据。
- **Fully open source (MIT).** No proprietary core, no usage caps, no vendor lock-in.
- **Zero-infra local dev.** Boots on SQLite + embedded Chroma + an in-process scheduler - no Docker, Postgres, or Redis required to start.
- **Production-ready.** Swap to Postgres + pgvector, Redis, and a real secret store with config only - a hardening guard refuses to boot with insecure defaults.
- **Observable by default.** Every run is a span waterfall with tokens, latency, and cost down to fractions of a cent.
- **完全开源(MIT)。** 无专有内核、无用量上限、无厂商锁定。
- **零基础设施本地开发。** 基于 SQLite + 内嵌 Chroma + 进程内调度器启动 —— 无需 DockerPostgres Redis
- **生产就绪。** 仅通过配置即可切换 Postgres + pgvectorRedis 与真实密钥存储;加固守卫在检测到不安全默认配置时会拒绝启动。
- **默认可观测。** 每次运行都是一条 span 瀑布图,展示 token、延迟与成本(精确到美分)。
## Table of contents
## 目录
- [Features](#features)
- [Architecture](#architecture)
- [Quick start](#quick-start-local-zero-infra)
- [Run with Docker](#run-with-docker-production-shaped)
- [Documentation](#documentation)
- [Tech stack](#tech-stack)
- [Local modifications](#local-modifications)
- [Contributing](#contributing)
- [License](#license)
- [功能特性](#功能特性)
- [架构](#架构)
- [快速开始(本地、零基础设施)](#快速开始本地零基础设施)
- [使用 Docker 运行(生产形态)](#使用-docker-运行生产形态)
- [文档](#文档)
- [技术栈](#技术栈)
- [本地修改(与原仓库对比)](#本地修改与原仓库对比)
- [参与贡献](#参与贡献)
- [许可证](#许可证)
## Features
## 功能特性
<div align="center">
<video src="https://github.com/user-attachments/assets/798a6872-0a47-455f-81be-4566184e3e9c" controls muted width="85%"></video>
</div>
> **[Watch the demo](docs/media/Forge_demo.mp4)** - the in-product **Forge Assistant** builds and runs a workflow end to end. *(If the player doesn't load inline, click the link to play.)*
> **[观看演示](docs/media/Forge_demo.mp4)** —— 产品内置的 **Forge Assistant** 端到端构建并运行一个工作流。*(如果播放器未内联加载,请点击链接播放。)*
### 数据分析
### Analytics
<div align="center">
<video src="https://github.com/user-attachments/assets/ac064ef7-2a0b-4852-8360-82494c6471af" controls muted width="85%"></video>
</div>
### Tool Builder with Response Projection
### 工具构建器与响应投影
Register **REST, GraphQL, Code, SQL, MCP, or built-in** tools and test them live against real inputs. A **JMESPath response projection** trims bulky payloads *before* they reach the model - watch the raw → projected **token meter** shrink in real time to control cost. Every outbound call is screened by an **SSRF guard**, with optional retries, rate limits, and caching. Point a tool's endpoint at a **per-environment value** with `{{env.*}}` (from `FORGE_TOOL_VARS`) so the same tool row resolves to your dev / qa / prod host per deploy. The platform **built-ins** (time, calculator, web fetch/search, knowledge search, memory) are auto-provisioned into every project and protected from deletion. Organize tools into **tool sets** - reusable, many-to-many groups that double as folders on the screen, get granted to an agent in one click, and publish as MCP toolsets.
注册 **RESTGraphQLCodeSQLMCP 或内置** 工具,并针对真实输入进行在线测试。**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>
The Tools screen groups everything by set (switchable between grid and list), with one-click **export / import** to move tools between projects:
工具页面按集合分组显示(可在网格与列表之间切换),并支持一键**导出 / 导入**,在不同项目间迁移工具:
<p align="center"><img src="docs/media/Tools_dashboard.png" alt="Forge Tools screen: the tool grid grouped into reusable tool sets, with grid/list views and one-click export and import" width="90%"></p>
<p align="center"><img src="docs/media/Tools_dashboard.png" alt="Forge 工具页面:按可复用工具集分组的工具网格,支持网格/列表视图与一键导出导入" width="90%"></p>
### Visual Agent Builder
### 可视化 Agent 构建器
Compose an **Agent** or a **Deep Agent** (planning + subagents for long multi-step tasks) from a model, a system prompt, tools, knowledge, Q&A, and a reorderable **middleware stack** - all from friendly forms, no JSON. A live *"what the model sees"* panel shows the exact compiled prompt and middleware execution order before you ship. Build a **supervisor** visually: drag from a Deep Agent's **subagents** handle to any specialist agent node and it folds in as a callable sub-agent (an org-chart branch on the canvas) - each with its own model, tools, and prompt, dispatched via the `task` tool and shown as named sub-agent spans in the trace.
通过模型、系统提示词、工具、知识、问答以及可排序的**中间件栈**,以友好的表单(无需 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>
### Visual Workflow Builder
### 可视化工作流构建器
在**拖拽画布**(React Flow)上串联整个应用:从面板拖入节点 —— **Agent** 与深度 Agent、模型调用、分类器、工具、变换、检索、人工输入/交接、路由器、循环、并行扇出/汇合、子工作流与触发器 —— 并用**类型化、经过校验**的连线连接。节点级检查器与实时**状态模式**保证运行类型安全,小地图、撤销/重做与复制/粘贴让大型图保持可控。**保存**、**测试**或打开 **Playground** 观看节点在流式运行中点亮 —— 然后**发布**。
Wire an entire app on a **drag-and-drop canvas** (React Flow): drop nodes from the palette - **agents** & deep agents, model calls, classifiers, tools, transforms, retrieval, human input/handoff, routers, loops, parallel fan-out/join, subworkflows, and triggers - and connect them with **typed, validated** edges. A per-node inspector and a live **state schema** keep runs type-safe, while a minimap, undo/redo, and copy/paste keep big graphs manageable. **Save**, **Test**, or open the **Playground** to watch nodes light up as the run streams - then **Publish**.
<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 visual workflow builder: a React Flow canvas wiring retrieval, router, agent, and end nodes, with a node palette, a state-schema inspector, and a minimap" width="90%"></p>
<p align="center"><img src="docs/media/Workflow.png" alt="Forge 可视化工作流构建器:React Flow 画布串联检索、路由器、Agent 与结束节点,含节点面板、状态模式检查器与小地图" width="90%"></p>
### Knowledge & RAG
### 知识与 RAG
Ground agents in **your own data**. Add pasted text, URLs, crawled sites, or uploaded files (`.txt/.md/.csv/.json/.html/.pdf`); Forge chunks, embeds (**offline-capable by default**), and stores them as vectors organized in folders. Curated **Q&A pairs** deflect common questions, and a **search debugger** lets you inspect exactly what retrieval returns.
让 Agent 基于**你自己的数据**。添加粘贴文本、URL、爬取站点或上传文件(`.txt/.md/.csv/.json/.html/.pdf`);Forge 负责分块、嵌入(**默认支持离线**)并按文件夹组织为向量存储。精选的**问答对**可拦截常见问题,**检索调试器**让你精确检查检索返回的内容。
<p align="center"><img src="docs/media/Knowledge.png" alt="Forge knowledge screen showing document sources, folders, chunking status, and Q&A" width="90%"></p>
<p align="center"><img src="docs/media/Knowledge.png" alt="Forge 知识页面:文档来源、文件夹、分块状态与问答" width="90%"></p>
The built-in **search debugger** plots every chunk by semantic similarity and overlays a query - so you can see exactly which chunks a search retrieves, and why:
内置的**检索调试器**按语义相似度绘制每个分块并叠加查询 —— 让你清楚看到检索命中了哪些分块、以及为什么命中:
<p align="center"><img src="docs/media/Knowledge_storage_debugger.png" alt="Forge knowledge search debugger: a PCA chunk map colored by source, with a query overlay marking the retrieved chunks" width="90%"></p>
<p align="center"><img src="docs/media/Knowledge_storage_debugger.png" alt="Forge 知识检索调试器:按来源着色的 PCA 分块图,叠加查询标记检索命中的分块" width="90%"></p>
### Generative UI Components
### 生成式 UI 组件
Let agents render **rich, interactive UI** - tables, cards, forms - instead of plain text. Author an HTML/CSS component once with a live preview; the model emits a tiny payload while the markup renders in a **sandboxed iframe** and never bloats the token stream. Buttons can send structured actions straight back to the agent.
让 Agent 渲染**丰富的交互式 UI** —— 表格、卡片、表单,而不仅是纯文本。用实时预览一次性编写 HTML/CSS 组件;模型只输出微小的载荷,标记在**沙箱 iframe** 中渲染,绝不膨胀 token 流。按钮可将结构化动作直接回传给 Agent
<p align="center"><img src="docs/media/Components.png" alt="Forge component builder with HTML/CSS editor and a live sandboxed preview of a weather card" width="90%"></p>
<p align="center"><img src="docs/media/Components.png" alt="Forge 组件构建器:HTML/CSS 编辑器与天气卡片实时沙箱预览" width="90%"></p>
### Embeddable Web Widget
### 可嵌入网页组件
Drop your assistant onto **any website** with a one-line script - a floating chat bubble locked to the origins you allow. End users see only the conversation; operational details (steps, tokens, cost, node names) stay private in the dashboard.
通过一行脚本将你的助手嵌入**任何网站** —— 一个锁定你允许来源的悬浮聊天气泡。终端用户只看到对话;操作细节(步骤、token、成本、节点名)保留在仪表盘中,不外泄。
<p align="center"><img src="docs/media/Embeddings.png" alt="Forge embed screen with widget toggle, allowed origins, and a copy-paste launcher snippet" width="90%"></p>
<p align="center"><img src="docs/media/Embeddings.png" alt="Forge 嵌入页面:组件开关、允许来源与可复制粘贴的启动脚本" width="90%"></p>
### Deploy anywhere - one run API, MCP & channels
### 随处部署 —— 单一 run APIMCP 与通道
Ship the same workflow through many surfaces without rewriting it: call it server-to-server over a **single run API** (`POST /run` handles new turns, streaming, and human-in-the-loop resumes), expose it as an **MCP server**, deploy it to **email**, or drop in the **web widget**. Per-request caller context (`X-Forge-Context`) lets tools act on behalf of your end users - with secrets never in the request body.
无需重写即可通过多种表面交付同一工作流:通过**单一 run API**`POST /run` 处理新轮次、流式与人工介入恢复)进行服务器到服务器调用,将其暴露为 **MCP 服务器**,部署到**邮件**,或嵌入**网页组件**。按请求的调用方上下文(`X-Forge-Context`)让工具代表终端用户行事 —— 密钥绝不进入请求体。
<p align="center"><img src="docs/media/Integrations.png" alt="Forge Connect screen showing the run API: the Forge API base URL, the POST /run endpoint, and a copy-paste curl example" width="90%"></p>
<p align="center"><img src="docs/media/Integrations.png" alt="Forge Connect 页面:run API —— Forge API 基础 URL、POST /run 端点与可复制的 curl 示例" width="90%"></p>
> [!NOTE]
> **Connectors are not yet fully implemented.** The prebuilt, one-click **connector library / marketplace** (Google, Slack, Notion, GitHub, Salesforce, …) is on the [roadmap](docs/ROADMAP.md#planned--exploring) — it is **not shipped yet**. Today you integrate an external system by hand: create a **REST / GraphQL / MCP tool** and pair it with an **Auth Provider** (Bearer / API key / Basic / OAuth2 / CSRF-session). *(Note: the `connector` **role** — a least-privileged MCP-only user — is a separate, shipped feature and unrelated to the connector library.)*
> **连接器尚未完整实现。** 预置的一键**连接器库 / 市场**(GoogleSlackNotionGitHubSalesforce 等)已列入[路线图](docs/ROADMAP.md#planned--exploring) —— **尚未发布**。目前集成外部系统需手工完成:创建 **REST / GraphQL / MCP 工具**并与 **Auth Provider**Bearer / API key / Basic / OAuth2 / CSRF-session)配对使用。*(注意:`connector` **角色** —— 一种最小权限、仅 MCP 的用户 —— 是独立且已发布的功能,与连接器库无关。)*
### Observability & Traces
### 可观测性与追踪
Every run is captured as a **collapsible span tree** - model calls, tools, chains, sub-agents, latency, tokens, and **cost**, nested by real parent/child so you can see exactly what happened and what it cost. Deep-agent dispatches appear as named `subagent · <name>` spans, and the Playground streams a **live agent-activity** timeline (which sub-agent/tool ran, as it happens). Pair it with **Evaluations** to catch regressions before you publish, and export traces to any **OpenTelemetry** collector (e.g. Langfuse).
每次运行都捕获为**可折叠的 span 树** —— 模型调用、工具、链、子 Agent、延迟、token 与**成本**,按真实父子关系嵌套,让你精确看到发生了什么、花了多少钱。Deep Agent 派发显示为具名的 `subagent · <name>` spanPlayground 实时流式呈现**Agent 活动时间线**(哪个子 Agent/工具在运行)。可配合 **评估** 在发布前捕获回归,并将 trace 导出到任意 **OpenTelemetry** 收集器(如 Langfuse)。
<p align="center"><img src="docs/media/Traces.png" alt="Forge traces screen showing a run's span waterfall with per-step latency, tokens, and cost" width="90%"></p>
<p align="center"><img src="docs/media/Traces.png" alt="Forge 追踪页面:一次运行的 span 瀑布图,含每步延迟、token 与成本" width="90%"></p>
### Guardrails, budgets & governance
### 护栏、预算与治理
Run it like production. A project-level **Guardrails & Egress** policy (PII redaction, blocked terms, and a network allow/deny list) applies to every agent by default; **budgets & quotas** cap spend and tokens; **versioning** snapshots every change; and it all sits behind per-project **roles / RBAC** and an audit log - from one Settings surface.
像生产环境一样运行。项目级**护栏与出站策略**(PII 脱敏、屏蔽词、网络允许/拒绝列表)默认应用于每个 Agent;**预算与配额**封顶支出与 token;**版本管理**为每次变更快照;全部位于按项目的**角色 / RBAC** 与审计日志之后 —— 集中于一个 Settings 页面。
<p align="center"><img src="docs/media/Settings.png" alt="Forge project Settings with a section sidebar: General, Members and Roles, API Keys, Model Pricing, Budgets and Quotas, Guardrails and Egress, Versioning, and more" width="90%"></p>
<p align="center"><img src="docs/media/Settings.png" alt="Forge 项目设置:GeneralMembers and RolesAPI KeysModel PricingBudgets and QuotasGuardrails and EgressVersioning 等分区侧栏" width="90%"></p>
### And many more
### 更多功能
- **Channels** - deploy a workflow to **Email**.
- **Triggers** - webhooks, schedules (interval/cron), inbound email, and polling "app events".
- **Human-in-the-loop** - approve/reject pauses and live **handoff** to an Agent inbox, with the reply delivered back over the same channel.
- **Auth Providers** - Bearer, API key, Basic, OAuth2 (client-credentials **and** 3-legged user login with auto-refresh), and CSRF/session - backed by encrypted, reference-only secrets (`secret://…`).
- **MCP, both ways** - expose your tools as an **MCP server** over native Streamable-HTTP/SSE (Claude Desktop, Cursor, and VS Code connect directly - no bridge), authenticated by a project key, per-user **personal access tokens**, or optional **OAuth 2.1**, publishing tool sets, knowledge, Q&A, or a whole workflow; and consume tools from external MCP servers.
- **Guardrails & egress policy** - one project-level I/O policy (PII redaction, blocked terms, and a network allow/deny list) enforced on every agent by default; a project can only *tighten* it, never loosen it.
- **Import & export** - move tools, workflows, agents, and components between projects as portable JSON bundles (secret *values* never leave).
- **Evaluations** - datasets scored by `contains` / `exact` / `regex` / LLM-`judge` for a pass rate per workflow, **streamed live** (each case resolves in the UI as it finishes, with per-case latency + tokens).
- **Long-term memory**, response caching, retries with backoff, and per-tenant **budgets**.
- **Multi-tenant projects & roles** (owner/admin/editor/viewer/connector) with **per-project RBAC**, scoped revocable API keys, entity **version history**, and an **audit log**.
- **Provider-agnostic models** - OpenAI, Anthropic, Google, or any LangChain provider, plus an offline `fake:` model so you can build the plumbing without spending a cent.
- **通道** —— 将工作流部署到**邮件**。
- **触发器** —— Webhook、定时(interval/cron)、入站邮件与轮询"应用事件"。
- **人工介入** —— 批准/拒绝暂停与到 Agent 收件箱的实时**交接**,回复经同一通道返回。
- **Auth Providers** —— BearerAPI keyBasicOAuth2(客户端凭证**与**三方用户登录并自动刷新)与 CSRF/session —— 由加密的、仅引用式密钥(`secret://…`)支撑。
- **双向 MCP** —— 将你的工具暴露为原生 Streamable-HTTP/SSE **MCP 服务器**Claude DesktopCursorVS 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 密钥、实体**版本历史**与**审计日志**。
- **模型无关** —— OpenAIAnthropicGoogle 或任意 LangChain provider,外加离线 `fake:` 模型,让你不花一分钱也能搭好管道。
> See the full **[User Manual](docs/MANUAL.md)** for an end-to-end tour and worked examples.
> 完整功能详见 **[用户手册](docs/MANUAL.md)** 的端到端导览与实战示例。
## Architecture
## 架构
A pnpm + Python monorepo with a shared schema contract that keeps the backend and frontend in lockstep:
一个 pnpm + Python 单体仓库,通过共享模式契约让前后端保持同步:
```
forge/
├── apps/
│ ├── api/ FastAPI backend - the engine (compiler, registry, middleware), tools,
│ │ auth, knowledge, tracing, MCP server, build assistant. Dockerfile +
│ │ Alembic migrations live here. [Python]
│ └── web/ Next.js console - canvas, config panels, playground, traces. Dockerfile
lives here. [TS/React]
│ ├── api/ FastAPI 后端 —— 引擎(编译器、注册中心、中间件)、工具、
│ │ 认证、知识、追踪、MCP 服务器、构建助手。Dockerfile
│ │ Alembic 迁移在此。 [Python]
│ └── web/ Next.js 控制台 —— 画布、配置面板、playgroundtraceDockerfile
在此。 [TS/React]
├── packages/
│ └── schemas/ Shared JSON Schemas - the single source of truth, imported by the
backend validator/compiler AND the frontend <SchemaForm>.
├── docs/ User manual, roadmap, and media.
├── infra/ Production database swaps (Postgres row-level-security policies).
└── docker-compose.yml Production-shaped stack (Postgres · Redis · api · worker · web).
│ └── schemas/ 共享 JSON Schema —— 唯一事实来源,后端校验器/编译器
与前端 <SchemaForm> 均引用它。
├── docs/ 用户手册、路线图与媒体。
├── infra/ 生产数据库切换(Postgres 行级安全策略)。
└── docker-compose.yml 生产形态栈(Postgres · Redis · api · worker · web)。
```
The **shared schemas** are the contract behind three consumers: the backend **validator** (rejects bad configs on save), the **compiler** (`compile_workflow`, `build_middleware`), and the frontend **`<SchemaForm>`** (forms generated from the same files).
**共享模式**是三个消费方的契约:后端**校验器**(保存时拒绝错误配置)、**编译器**(`compile_workflow``build_middleware`)与前端 **`<SchemaForm>`**(由同一文件生成表单)。
## Quick start (local, zero-infra)
## 快速开始(本地、零基础设施)
### Prerequisites
### 前置条件
- **Python** 3.113.13 - the backend engine
- **Node** 22 LTS and **pnpm** 9+ - the web console
- Nothing else - the local stack runs on SQLite + embedded Chroma + an in-process scheduler, so **no Docker, Postgres, or Redis** is required to start.
- **Python** 3.113.13 —— 后端引擎
- **Node** 22 LTS **pnpm** 9+ —— Web 控制台
- 无需其他 —— 本地栈运行于 SQLite + 内嵌 Chroma + 进程内调度器,**无需 DockerPostgres Redis** 即可启动。
### 1. Configure environment
### 1. 配置环境
```bash
cp .env.example .env # macOS/Linux
copy .env.example .env # Windows
```
Open `.env` and fill in what you need (e.g. an LLM provider key). Everything is optional to boot; agents that call a model need a provider key. **Never commit your `.env`** - it is already git-ignored.
打开 `.env` 填入所需内容(如 LLM provider 密钥)。启动时一切均可选;调用模型的 Agent 需要 provider 密钥。**切勿提交你的 `.env`** —— 它已在 git-ignore 中。
### 2. Backend (FastAPI engine)
### 2. 后端(FastAPI 引擎)
```bash
cd apps/api
python -m venv .venv && source .venv/bin/activate # .venv\Scripts\activate on Windows
pip install -e ".[dev,all]" # engine + tests + vectors/providers/knowledge/MCP
pytest # optional: validate the engine (offline)
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. Frontend (Next.js console)
### 3. 前端(Next.js 控制台)
In a second terminal, from the repo root:
在另一个终端中,从仓库根目录:
```bash
pnpm install
pnpm --filter web dev # http://localhost:3000
```
Open **http://localhost:3000** for the console and **http://localhost:8000/docs** for the API. On first run, sign in with `you@forge.local` / `forge-admin`, or create a fresh workspace.
打开 **http://localhost:3000** 使用控制台,**http://localhost:8000/docs** 查看 API。首次运行请使用 `you@forge.local` / `forge-admin` 登录,或创建一个新工作区。
## Run with Docker (production-shaped)
## 使用 Docker 运行(生产形态)
The included [`docker-compose.yml`](docker-compose.yml) brings up a production-shaped stack - **Postgres** (app DB + durable checkpointer), **Redis** (shared rate-limit/idempotency + worker queue), the **API**, a **worker**, and the **web** console:
仓库内置的 [`docker-compose.yml`](docker-compose.yml) 可拉起生产形态栈 —— **Postgres**(应用数据库 + 持久化 checkpointer)、**Redis**(共享限流/幂等 + 工作队列)、**API**、**worker** 与 **web** 控制台:
```bash
# Set real secrets first (FORGE_JWT_SECRET, FORGE_BOOTSTRAP_ADMIN_PASSWORD, provider keys)
# 先设置真实密钥(FORGE_JWT_SECRETFORGE_BOOTSTRAP_ADMIN_PASSWORDprovider 密钥)
docker compose up --build
```
With `FORGE_ENVIRONMENT=production`, Forge enables a hardening guard and **refuses to boot** with default secrets, SQLite, or a non-durable checkpointer. See [`apps/api/README.md`](apps/api/README.md) and **[Manual §13 - Going to production](docs/MANUAL.md)** for the full, annotated configuration.
设置 `FORGE_ENVIRONMENT=production` 后,Forge 会启用加固守卫,并在检测到默认密钥、SQLite 或非持久化 checkpointer 时**拒绝启动**。完整配置见 [`apps/api/README.md`](apps/api/README.md) **[手册 §13 - 上线生产](docs/MANUAL.md)**
## Documentation
## 文档
| Doc | What's inside |
| 文档 | 内容 |
|---|---|
| **[User Manual](docs/MANUAL.md)** | Full feature tour, the node catalog, and end-to-end use cases (no developer knowledge needed). |
| **[Backend README](apps/api/README.md)** | API layout, local-vs-production swaps, and dependency notes. |
| **[Tech stack & architecture](TECH_STACK.md)** | Every dependency and why it's there, plus request/run sequence diagrams. |
| **[Roadmap & status](docs/ROADMAP.md)** | What's shipped, what's in progress, and what's planned next (connectors, more channels, and more). |
| **[Changelog](CHANGELOG.md)** | Notable changes, following Keep a Changelog + SemVer. |
| **[Contributing](CONTRIBUTING.md)** | Local setup, the checks CI runs, and commit/PR conventions. |
| **[用户手册](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 规范。 |
## Tech stack
## 技术栈
| Layer | Technology |
| 层 | 技术 |
|---|---|
| **Engine** | LangChain v1 · LangGraph v1 · Deep Agents - MIT framework only |
| **Backend** | Python · FastAPI · SQLAlchemy 2 (async) · Pydantic v2 |
| **Frontend** | Next.js 14 (App Router) · React 18 · TypeScript · React Flow |
| **Data (local)** | SQLite · embedded Chroma · in-process cache/scheduler |
| **Data (prod)** | Postgres 16 + pgvector · Redis 7 · Fernet/Vault secrets |
| **Observability** | Built-in tracer + cost accounting · OpenTelemetry / Langfuse export |
| **引擎** | 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 导出 |
## Local modifications
## 本地修改(与原仓库对比)
This repository is a **fork with local customizations** of the upstream [Forge](https://github.com/nihalashetty/Forge) project. It is hosted by the **Gitinbox** organization for internal AI-agent platform use.
本仓库是上游 [Forge](https://github.com/nihalashetty/Forge) 的**带本地定制化的分支**,由 **Gitinbox** 组织托管,用于内部 AI Agent 平台使用。
### Changes vs upstream ([`nihalashetty/Forge`](https://github.com/nihalashetty/Forge/tree/main))
### 与原仓库的差异([`nihalashetty/Forge`](https://github.com/nihalashetty/Forge/tree/main)
| Area | Upstream | This fork |
| 领域 | 原仓库 | 本分支 |
|---|---|---|
| **Model catalog** (`apps/api/forge/model_catalog.py`) | OpenAI / Anthropic / Google / local fake models only | **Added DeepSeek** `deepseek-chat` (128k, $0.28/$0.42) and `deepseek-reasoner` (128k, $0.55/$2.19), registered as OpenAI-compatible endpoints |
| **DeepSeek runtime** | N/A | Base URL is injected at runtime via `OPENAI_BASE_URL` env (no engine change, `resolve_model` works end-to-end) |
| **模型目录**`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` 端到端可用) |
All other engine, frontend, and packaging code is identical to upstream. To stay in sync with upstream:
其余引擎、前端与打包代码均与上游一致。与上游保持同步:
```bash
git remote add upstream https://github.com/nihalashetty/Forge.git # once
git remote add upstream https://github.com/nihalashetty/Forge.git # 仅首次
git fetch upstream && git merge upstream/main
```
**Upstream repository:** <https://github.com/nihalashetty/Forge>
**上游仓库:** <https://github.com/nihalashetty/Forge>
## Contributing
> 英文版:请查看 [README.en.md](README.en.md)
Contributions are welcome. Forge is MIT-licensed and built to be extended.
## 参与贡献
1. Fork the repo and create a feature branch.
2. Backend changes: run `pytest` and `ruff check forge migrations` from `apps/api`.
3. Keep the **shared schemas** (`packages/schemas`) authoritative - the validator, compiler, and frontend forms all read from them.
4. Open a pull request describing the change and the reasoning.
欢迎贡献。Forge 基于 MIT 许可,专为扩展而设计。
Found a bug or have an idea? Please [open an issue](https://github.com/nihalashetty/Forge/issues).
1. Fork 本仓库并创建功能分支。
2. 后端改动:在 `apps/api` 下运行 `pytest``ruff check forge migrations`
3. 保持**共享模式**`packages/schemas`)的权威性 —— 校验器、编译器与前端表单都从它读取。
4. 发起描述改动内容与理由的 Pull Request。
## License
发现 Bug 或有想法?请[提交 issue](https://github.com/nihalashetty/Forge/issues)。
Forge is released under the **[MIT License](LICENSE)** - free to use, modify, and distribute, including commercially. It builds only on the MIT-licensed LangChain/LangGraph ecosystem, with no Elastic-2.0 or commercial-license dependencies.
## 许可证
Forge 以 **[MIT 许可证](LICENSE)** 发布 —— 可免费使用、修改与分发(含商业用途)。它仅构建于 MIT 许可的 LangChain/LangGraph 生态之上,无 Elastic-2.0 或商业许可证依赖。
<div align="center">
<sub>Built on the open-source LangChain and LangGraph ecosystem.</sub>
<sub>构建于开源的 LangChain LangGraph 生态。</sub>
</div>