E:\ShichenPro\ReCode\
│
├── recode_plus/ # 🎯 ReCode+ 核心框架
│ ├── __init__.py # 模块导出
│ ├── models.py # 数据模型(Node, ToolCall, Plan)
│ ├── node_tree.py # 节点树管理器
│ ├── mediator.py # 中间人 Agent(协调器)
│ ├── planner.py # 规划 Agent(代码生成)
│ ├── executor.py # 执行 Agent(工具调用)
│ ├── visualizer.py # 可视化器(控制台和 JSON)
│ │
│ └── api/ # 🌐 Web API 服务
│ ├── main.py # FastAPI 入口(WebSocket + REST)
│ └── index.html # Web 演示界面
│
├── examples/ # 📚 示例代码
│ └── advideo_demo.py # 广告片生成示例
│
├── tests/ # 🧪 测试文件
│ └── test_recode_plus.py # 单元测试
│
├── RECODE_PLUS_ARCHITECTURE.md # 📖 架构设计文档
├── RECODE_PLUS_README.md # 📄 项目说明
├── RECODE_PLUS_QUICKSTART.md # 🚀 快速启动指南
└── RECODE_PLUS_FILES.md # 📁 本文件
定义了所有核心数据结构:
| 类名 | 说明 |
|---|---|
NodeStatus |
节点状态枚举(PENDING, STUB, EXECUTING, COMPLETED...) |
Node |
节点类(代码、状态、子节点、工具调用...) |
ToolCall |
工具调用信息(名称、参数、是否需要审批) |
ToolResult |
工具执行结果(成功、输出、错误) |
Plan |
规划结果(代码、摘要、预估步数) |
EventMessage |
事件消息(类型、内容、时间戳) |
管理代码节点树的生命周期:
| 方法 | 说明 |
|---|---|
create_root() |
创建根节点 |
add_node() |
添加子节点 |
update_status() |
更新节点状态 |
find_next_pending() |
找到下一个待执行节点(DFS) |
export_snapshot() |
导出树状态快照 |
on() / off() |
注册/移除事件监听器 |
事件系统:
node_created- 节点创建时触发node_status_changed- 节点状态变更时触发
协调用户和系统的交互,是整个框架的核心:
| 方法 | 说明 |
|---|---|
chat_stream() |
流式对话接口,生成事件流 |
approve_tool() |
批准工具调用 |
reject_tool() |
拒绝工具调用 |
get_tree_snapshot() |
获取当前树状态 |
内部流程:
- 理解用户意图
- 创建初始规划(如果树为空)
- 执行循环:遍历节点树
- STUB 节点 → 展开
- PENDING 节点 → 执行
- 管理审批流程
- 流式输出事件
基于 ReCode 的代码生成能力:
| 方法 | 说明 |
|---|---|
create_plan() |
根据用户意图创建初始规划 |
expand() |
展开 STUB 节点为具体实现 |
提示词策略:
- 使用清晰的函数调用表示子任务
- 添加注释说明意图
- 保持代码简洁
集成 Pydantic AI 工具,负责类型安全的工具调用:
| 方法 | 说明 |
|---|---|
extract_tool_calls() |
从代码中提取工具调用 |
execute_tool() |
执行工具(带 Pydantic 校验) |
集成的工具:
propose_image- 图片生成(你的 Pydantic AI 工具)propose_video- 视频生成(你的 Pydantic AI 工具)generate_image- 图片生成(模拟)generate_video- 视频生成(模拟)ask- 对话(模拟)
实时渲染节点树:
| 类 | 说明 |
|---|---|
Visualizer |
Web 可视化(JSON 输出) |
ConsoleVisualizer |
控制台可视化(树形图) |
功能:
- 订阅节点树事件
- 实时推送更新到 WebSocket
- 生成前端可用的 JSON 数据
- 生成 Mermaid 流程图语法
FastAPI 服务,提供 REST API 和 WebSocket:
REST 接口:
POST /sessions- 创建会话GET /sessions/{id}/tree- 获取树状态POST /sessions/{id}/approve- 批准工具DELETE /sessions/{id}- 删除会话
WebSocket 接口:
/ws/{session_id}- 实时通信
MediatorAgent
├── NodeTree (管理节点)
├── PlannerAgent (规划代码)
│ └── AsyncLLM (ReCode)
└── ExecutorAgent (执行工具)
└── Pydantic AI Tools (你的工具)
Visualizer
└── NodeTree (订阅事件)
FastAPI
├── MediatorAgent (会话管理)
└── Visualizer (实时推送)
用户输入: "生成广告片"
↓
Mediator.chat_stream()
↓
Planner.create_plan()
→ 返回 Plan(code="def solve()...", summary="...")
↓
NodeTree.create_root()
→ 创建根节点
→ 触发 "node_created" 事件
↓
Visualizer 接收事件
→ 推送到 WebSocket
↓
前端更新 UI
↓
Mediator 执行循环
↓
Executor.extract_tool_calls()
→ 检测到 generate_image()
↓
Executor.execute_tool()
→ 调用 Pydantic AI 工具
→ 返回 ToolResult(task_id="xxx")
↓
NodeTree.update_status(COMPLETED)
→ 触发 "node_status_changed" 事件
↓
Visualizer 推送更新
↓
前端显示完成状态
在 executor.py 中注册:
def _init_tools(self):
self.tools["your_tool"] = your_tool_func在 models.py 中扩展 Node 类:
@dataclass
class CustomNode(Node):
custom_field: str = ""在 models.py 中定义新的事件类型,然后在相应模块中触发。
在 node_tree.py 中添加数据库操作:
def save_to_db(self):
snapshot = self.export_snapshot()
db.save(snapshot)-
开发阶段:
python tests/test_recode_plus.py
-
命令行演示:
python examples/advideo_demo.py
-
Web 服务:
cd recode_plus/api python main.py -
访问界面:
http://localhost:8000/index.html
- 节点树大小:建议限制最大深度(如 10 层)
- WebSocket 连接数:使用连接池管理
- LLM 调用频率:添加缓存和限流
- 事件推送频率:批量发送更新(如每 100ms)
- API Key 保护:不要硬编码,使用环境变量
- 工具执行权限:限制可执行的工具
- 输入验证:使用 Pydantic 校验所有输入
- 会话隔离:每个会话独立的命名空间
文档更新日期: 2024-12