项目分阶段路线图已整理到 docs/roadmap.md。
可观测性配置(日志、指标、追踪)见 docs/observability.md。
目标不是:
- ChatBot
- Dify Clone
- Workflow Builder
- Prompt Playground
而是:
即:
Runtime + Protocol + Artifact + UI Runtime + HITL + Sandbox + Tool Runtime
平台核心是:
- Browser Workspace
- Agent Runtime
- Runtime Event System
- Artifact System
- HITL Runtime
- Protocol Layer
- Sandbox Compute Layer
而不是:
- 单纯聊天
- Workflow 编排页面
- Prompt 工具
平台不能绑定:
- OpenAI Agents SDK
- Cursor SDK
- Claude SDK
- Google ADK
- LangGraph
- CrewAI
- AutoGen
必须 Adapter 化,例如:
OpenAIAgentsAdapter
ClaudeAdapter
CursorAdapter
LangGraphAdapter
GoogleADKAdapter
Agent Framework 可替换。
真正长期值钱的是:
- Runtime
- Protocol
- Artifact
- HITL
- UI Runtime
- Sandbox
而不是:
- 某个 Agent SDK
- 某个 Workflow Builder
必须区分:
负责:
- memory
- workflow
- orchestration
- tool scheduling
- checkpoint
- audit
- auth
- tenant isolation
- secrets
- external api
- event emitting
负责:
- shell
- code execution
- browser automation
- filesystem
- sandbox
- script runtime
Compute 必须视为不可信执行环境。
不是:
request -> response
而是:
Runtime Event Protocol
所有执行过程事件化。
Agent 不应该只输出 markdown。
应该输出 Artifact,例如:
- markdown
- table
- diff
- workflow_trace
- approval
- risk_list
- html
- document_linked
- ui_spec
未来不是:
LLM -> Markdown
而是:
LLM -> UI Spec -> Renderer -> Interactive Workspace
所有基础设施必须 Provider 化:
- Database
- Vector Store
- Object Storage
- LLM
- Sandbox
- Queue
- Auth
业务代码不能依赖具体实现。
Turborepo + pnpm workspace
原因:未来 runtime、protocol、artifact、sandbox、ui-runtime、renderer、mcp 一定会拆 package。
Next.js 15+
React 19
TypeScript
原因:
- RSC
- Streaming
- AI SDK 生态
- assistant-ui 最适配
- Server Actions
- Edge Runtime
Tailwind CSS
shadcn/ui
Radix UI
Motion
assistant-ui
负责:
- conversation
- thread
- streaming
- tool ui
- approval ui
- runtime ui
不是聊天框。
json-render
负责:
- UI Spec
- Artifact Renderer
- Structured Result Renderer
- HITL Renderer
Vercel AI SDK
原因:Provider abstraction 极其重要。
未来一定会混用:
GPT
Claude
Gemini
DeepSeek
Qwen
OpenAI Agents SDK
原因:Harness / Compute 分离做得最好。
但必须 Adapter 化。
Hono
原因:TypeScript Fullstack 最优。
Temporal
不是:
BullMQ
原因:未来一定会需要:
- durable execution
- resume
- retry
- checkpoint
- long-running agent
- orchestration
- HITL pause/resume
第一阶段:
E2B
第二阶段:
Docker Sandbox
长期:
Firecracker
PostgreSQL
Drizzle ORM
Redis
Better Auth
支持:
- RBAC
- workspace
- tenant
- enterprise auth
负责:
Tool Protocol
所有 Tool MCP 化。
负责:
Agent ↔ Agent
例如:
PlannerAgent
↓
ReviewAgent
↓
DiffAgent
负责:
Agent ↔ UI
平台核心协议,例如:
run_started
message_delta
tool_call_started
tool_call_finished
artifact_created
hitl_required
run_finished
run_failed
┌──────────────────────────────────┐
│ Web Workspace │
│ │
│ assistant-ui │
│ json-render │
│ Result Renderer │
│ HITL Runtime │
│ Workflow Timeline │
└──────────────▲───────────────────┘
│
AG-UI-like Events
│
┌──────────────┴───────────────────┐
│ Agent Runtime Layer │
│ │
│ Run Engine │
│ Event Bus │
│ Artifact Manager │
│ HITL Session Manager │
│ Memory Abstraction │
│ Tool Registry │
│ Sandbox Adapter │
└──────────────▲───────────────────┘
│
┌──────────────┴───────────────────┐
│ Agent Framework Layer │
│ │
│ OpenAI Agents SDK │
│ Cursor SDK │
│ Claude SDK │
│ Google ADK │
│ LangGraph │
└──────────────▲───────────────────┘
│
┌──────────────┴───────────────────┐
│ Protocol Layer │
│ │
│ MCP │
│ A2A │
│ AG-UI │
│ Runtime Event Protocol │
└──────────────▲───────────────────┘
│
┌──────────────┴───────────────────┐
│ Compute Layer │
│ │
│ Docker Sandbox │
│ E2B │
│ Kubernetes Jobs │
└──────────────────────────────────┘
平台执行模型:
Sync Trigger + Async Runtime
不是同步阻塞执行。
Browser
↓
POST /api/runs
↓
Create Run
↓
Return run_id
↓
Temporal Workflow
↓
Agent Runtime Execute
↓
Emit Runtime Events
↓
Event Store + Redis Stream
↓
SSE / WebSocket
↓
Browser Workspace
POST /api/runs返回:
{
"run_id": "run_xxx",
"status": "queued",
"stream_url": "/api/runs/run_xxx/events"
}GET /api/runs/{run_id}/events{
"event": "run_started"
}{
"event": "tool_call_started",
"tool": "compare_review_diff"
}{
"event": "artifact_created",
"artifact_type": "diff"
}{
"event": "hitl_required"
}{
"event": "run_finished"
}Artifact 类型:
markdown
table
diff
workflow_trace
risk_list
approval
document_linked
html
ui_spec
{
"artifact_type": "contract_review",
"renderer": "json_render",
"spec": {}
}不能只 markdown。
必须使用 Renderer Registry,例如:
MarkdownRenderer
RiskListRenderer
DiffRenderer
ApprovalRenderer
ArtifactRenderer
JsonRenderRenderer
WorkflowTimelineRenderer
不能:
每个 Agent 写一个页面
必须 Schema-driven HITL。
{
"type": "approval",
"title": "是否应用修订"
}前端通过 ApprovalRenderer 自动渲染。
未来:
Agent
↓
UI Spec
↓
Renderer
↓
Workspace
MarkdownBlock
RiskList
RiskCard
DiffViewer
WorkflowTimeline
ApprovalDialog
ArtifactFrame
ClauseLocator
Agent 不能生成任意 HTML,只能组合 Catalog 中的组件。
Agent 不应该是代码,应该是 agent.yaml。
code: contract-review
runtime: openai-agents
model: gpt-4.1
tools:
- compare_review_diff
hitl:
schema: hitl.schema.json
result:
renderer: json-renderMemory 必须可插拔,不要绑定具体向量库。
ConversationMemory
SemanticMemory
ArtifactMemory
WorkflowMemory
LLM 不能绑定单一厂商,必须 Provider 化。
OpenAI
Azure OpenAI
Claude
Gemini
DeepSeek
Qwen
OpenAI Compatible API
私有化模型
interface ModelProvider {
provider: string;
chat(input: ChatInput): Promise<ChatResult>;
stream(input: ChatInput): AsyncIterable<ModelStreamEvent>;
embeddings(input: EmbeddingInput): Promise<EmbeddingResult>;
capabilities(): ModelCapabilities;
}type ModelCapabilities = {
streaming: boolean;
toolCalling: boolean;
structuredOutput: boolean;
vision: boolean;
jsonMode: boolean;
embeddings: boolean;
reasoning: boolean;
};目标支持:
- PostgreSQL
- MySQL
- Oracle
- OceanBase
interface DatabaseProvider {
dialect: string;
transaction<T>(fn: (tx: Transaction) => Promise<T>): Promise<T>;
}业务代码禁止:
- 直接依赖 jsonb
- 直接依赖 array
- 直接依赖 enum
- 直接依赖 PostgreSQL 特性
目标支持:
- pgvector
- Qdrant
- Milvus
- OpenSearch Vector
interface VectorStoreProvider {
ensureCollection(): Promise<void>;
upsert(): Promise<void>;
search(): Promise<VectorSearchResult[]>;
}目标支持:
- S3
- OSS
- COS
- OBS
- MinIO
interface ObjectStorageProvider {
putObject(): Promise<StoredObject>;
getObject(): Promise<ReadableStream>;
deleteObject(): Promise<void>;
createPresignedUrl(): Promise<string>;
}type ProviderCapabilities = {
transactions?: boolean;
vectorFilter?: boolean;
hybridSearch?: boolean;
multipartUpload?: boolean;
};apps/
web/
packages/
runtime/
protocol/
artifact/
renderer/
ui-runtime/
hitl-runtime/
memory/
tools/
sandbox/
auth/
db/
mcp/
agents/
contract-review/
compare-review/
真正长期值钱的:
Runtime
Protocol
Artifact
UI Runtime
HITL
Sandbox
Provider Abstraction
不是:
Workflow Builder
Prompt Editor
Chat UI
平台核心不是绑定某个:
- Agent Framework
- Model SDK
- Database
- Vector Store
- Sandbox
而是建立:
其中:
- Agent Framework 可替换
- LLM Provider 可替换
- Database 可替换
- Vector Store 可替换
- Object Storage 可替换
- Sandbox 可替换
- UI Renderer 可扩展
平台执行模型:
即:
Browser 创建 Run
↓
Runtime 异步执行
↓
Runtime Event Protocol 推送
↓
Artifact 持久化
↓
UI Runtime 动态渲染
最终目标不是:
AI Chat
而是:
本仓库现在把关键基础设施配置抽象为可切换 Provider,业务层只依赖统一接口,不直接绑定具体实现。
数据库通过 DATABASE_PROVIDER 与 DATABASE_URL 切换,当前类型层支持:
postgresmysqlsqlite
默认使用 PostgreSQL:
DATABASE_PROVIDER=postgres
DATABASE_URL=postgres://agent:agent@localhost:5432/agent_platform
DATABASE_MIGRATIONS_DIR=migrations/sql/postgres切换到 MySQL:
DATABASE_PROVIDER=mysql
DATABASE_URL=mysql://agent:agent@localhost:3306/agent_platform
DATABASE_MIGRATIONS_DIR=migrations/sql/mysql
docker compose --profile mysql up数据库运行时配置与迁移配置由 @agent-platform/db 暴露,API 的 /infra/providers 会返回当前激活配置。
迁移文件按数据库方言隔离:
migrations/sql/postgres/*.sql
migrations/sql/mysql/*.sql
可用以下命令检查迁移文件与 SHA-256 校验值:
pnpm migrations:check
DATABASE_PROVIDER=mysql pnpm migrations:checkDATABASE_MIGRATIONS_RUN_ON_STARTUP 默认关闭,避免服务启动时自动改库;生产环境建议由 CI/CD 或专门的 migration job 执行。
Web 与 API 都支持部署到二级子路径:
PUBLIC_BASE_PATH=/agent-platform
# 或分别配置
NEXT_PUBLIC_WEB_BASE_PATH=/agent-platform
API_BASE_PATH=/agent-platformNext.js 会设置 basePath / assetPrefix,API 会同时挂载根路径与配置后的子路径,便于灰度迁移。
向量库通过 VECTOR_STORE_PROVIDER 切换,当前类型层支持:
pgvectorqdrantmilvuschromapineconeweaviate
本地 Qdrant 可通过 profile 启动:
docker compose --profile vector up qdrant对象存储通过 OBJECT_STORAGE_PROVIDER 切换,当前类型层支持:
minios3gcsazure-blobfilesystem
本地 MinIO 可通过 profile 启动:
docker compose --profile object-storage up minio