Files
Agent-n8n/doc/订单班演示策划方案/统一多订单班演示系统实施计划.md
Yep_Q 195c3af1b5 refactor: 重组项目文件结构和清理无用文件
详细说明:
- 将文旅相关图片从food-order-demo移动到doc/notion文档资料/文旅
- 删除food-order-demo的node_modules和临时文件
- 整理项目目录结构,符合多订单班架构设计
- 清理重复和无用的资源文件

影响模块:
- 文件重组织:web_frontend/food-order-demo → doc/notion文档资料
- 清理node_modules依赖文件
- 优化项目目录结构

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 15:48:22 +08:00

13 KiB
Raw Blame History

统一多订单班AI演示系统 - 实施计划 V2.0

一、项目概述

1.1 核心理念变更

原方案为每个订单班创建独立的演示项目12个独立项目 新方案在单一exhibition-demo项目中实现所有订单班的动态切换

1.2 优势分析

  • 代码复用最大化一套代码服务12个订单班
  • 维护成本降低:只需维护一个项目
  • 用户体验统一:所有订单班使用相同的交互流程
  • 数据管理集中:通过统一的数据存储管理所有配置
  • 扩展性强:新增订单班只需添加数据配置

二、系统架构设计

2.1 整体架构

exhibition-demo/
├── src/
│   ├── components/
│   │   ├── RequirementModal.tsx      # 需求选择模态框(新增订单班选择)
│   │   ├── AgentGrid.tsx             # Agent网格展示动态加载
│   │   ├── TerminalOutput.tsx        # 终端输出组件
│   │   └── ResultModal.tsx           # 结果展示模态框
│   ├── data/
│   │   ├── orderClasses.json         # 所有订单班配置数据
│   │   └── agentTemplates.json       # Agent模板定义
│   ├── services/
│   │   ├── dataLoader.ts             # 数据加载服务
│   │   ├── agentService.ts           # Agent执行逻辑
│   │   └── resultGenerator.ts        # 结果生成服务
│   └── store/
│       └── demoStore.ts               # 状态管理(支持多订单班)
├── public/
│   └── agents/                       # Agent头像资源
│       ├── 文旅/
│       ├── 食品/
│       ├── 财经商贸/
│       └── ...(其他订单班)
└── web_result/                        # 结果展示页面
    └── templates/                    # 各订单班结果模板

2.2 数据存储方案

方案对比

方案 优点 缺点 推荐度
JSON文件 简单直观、无需数据库、易于版本控制 文件可能较大、不支持复杂查询
SQLite 支持查询、关系型存储 需要数据库依赖、部署复杂
YAML 可读性好、支持注释 解析性能较低、前端支持有限
CSV 表格化管理 不支持嵌套结构、功能受限

推荐方案JSON文件存储

数据结构设计

// orderClasses.json
{
  "orderClasses": [
    {
      "id": "exhibition",
      "name": "文旅",
      "displayName": "文旅订单班",
      "icon": "🎪",
      "description": "展会策划与执行专业",
      "scenario": "新能源汽车产业博览会策划",
      "mockRequirement": "策划一场2025年新能源汽车产业博览会预算1000万预计参展商500家",
      "agents": [
        {
          "id": "info_retrieval",
          "name": "信息检索专家",
          "model": "DeepSeek Chat Model5",
          "avatar": "/agents/文旅/info_retrieval.png",
          "role": "负责市场调研、数据收集、竞品分析",
          "skills": ["市场分析", "数据挖掘", "趋势预测"],
          "outputSamples": [
            "发现市场规模1200亿年增长18%",
            "识别目标客群:汽车厂商、零部件供应商、科技公司"
          ]
        },
        {
          "id": "planning",
          "name": "会展策划专家",
          "model": "Chat Models + Memories",
          "avatar": "/agents/文旅/planning.png",
          "role": "统筹协调、方案整合、决策支持",
          "skills": ["项目管理", "资源协调", "风险控制"]
        }
        // ... 其他5个Agent
      ],
      "workflow": {
        "phases": [
          {
            "name": "需求分析",
            "duration": "2分钟",
            "parallelAgents": ["info_retrieval"]
          },
          {
            "name": "方案设计",
            "duration": "5分钟",
            "parallelAgents": ["planning", "design", "marketing"]
          },
          {
            "name": "预算规划",
            "duration": "3分钟",
            "parallelAgents": ["finance", "execution"]
          }
        ]
      },
      "resultTemplate": "exhibition_result.html"
    },
    {
      "id": "food",
      "name": "食品",
      "displayName": "食品订单班",
      "icon": "🍽️",
      "description": "餐饮创业与轻食经营",
      "scenario": "中高端轻食店铺经营方案",
      "mockRequirement": "开设一家青莳轻食品牌店初始投资85万目标客群25-40岁",
      "agents": [
        {
          "id": "market_research",
          "name": "餐饮市场调研专家",
          "model": "DeepSeek Chat Model1",
          "avatar": "/agents/食品/market_research.png",
          "role": "轻食市场分析、客群定位、竞品研究"
        },
        {
          "id": "nutrition",
          "name": "营养配方师",
          "model": "Google Gemini Chat Model1",
          "avatar": "/agents/食品/nutrition.png",
          "role": "营养配比、菜品设计、健康认证"
        }
        // ... 其他Agent
      ]
    }
    // ... 其他10个订单班
  ]
}

2.3 核心功能设计

2.3.1 需求选择界面

// RequirementModal.tsx 改造
interface RequirementModalProps {
  onSelectOrderClass: (classId: string, requirement: string) => void;
}

const RequirementModal = () => {
  const [selectedClass, setSelectedClass] = useState<string>('');
  const [customRequirement, setCustomRequirement] = useState<string>('');

  return (
    <div className="modal">
      {/* 订单班选择网格 */}
      <div className="grid grid-cols-3 gap-4">
        {orderClasses.map(oc => (
          <button
            key={oc.id}
            onClick={() => setSelectedClass(oc.id)}
            className={`p-4 border-2 ${
              selectedClass === oc.id ? 'border-blue-500' : 'border-gray-300'
            }`}
          >
            <span className="text-2xl">{oc.icon}</span>
            <h3>{oc.displayName}</h3>
            <p className="text-sm">{oc.scenario}</p>
          </button>
        ))}
      </div>

      {/* 需求输入区 */}
      {selectedClass && (
        <div className="mt-4">
          <button onClick={() => setCustomRequirement(getMockRequirement(selectedClass))}>
            使用预设需求
          </button>
          <textarea
            value={customRequirement}
            onChange={(e) => setCustomRequirement(e.target.value)}
            placeholder="或输入自定义需求..."
          />
        </div>
      )}
    </div>
  );
};

2.3.2 Agent动态加载

// AgentGrid.tsx
const AgentGrid = ({ orderClassId }: { orderClassId: string }) => {
  const agents = useAgentStore(state => state.getAgentsByClass(orderClassId));

  // 未选择订单班时不显示
  if (!orderClassId) return null;

  return (
    <div className="grid grid-cols-7 gap-2">
      {agents.map(agent => (
        <div key={agent.id} className="agent-card">
          <img src={agent.avatar} alt={agent.name} />
          <span>{agent.name}</span>
          <div className={`status-indicator ${agent.status}`} />
        </div>
      ))}
    </div>
  );
};

2.3.3 执行流程管理

// agentService.ts
class AgentService {
  async executeWorkflow(orderClassId: string, requirement: string) {
    const orderClass = await this.loadOrderClass(orderClassId);
    const workflow = orderClass.workflow;

    for (const phase of workflow.phases) {
      await this.executePhase(phase, orderClass.agents);
    }

    return this.generateResult(orderClass, requirement);
  }

  private async executePhase(phase: WorkflowPhase, agents: Agent[]) {
    const parallelTasks = phase.parallelAgents.map(agentId => {
      const agent = agents.find(a => a.id === agentId);
      return this.runAgent(agent);
    });

    await Promise.all(parallelTasks);
  }
}

三、实施任务清单

数据准备任务

  • 从n8n工程文档提取已有的3个订单班Agent配置文旅、食品、智能开发
  • 基于notion文档为其余9个订单班设计Agent角色
  • 创建统一的orderClasses.json配置文件
  • 设计每个订单班的执行workflow
  • 使用AI生成所有Agent专家头像约100个头像
  • 组织头像文件目录结构

核心开发任务

  • 改造RequirementModal组件添加12个订单班选择界面
  • 实现dataLoader.ts数据加载服务
  • 更新demoStore.ts支持多订单班状态管理
  • 实现Agent动态加载和条件显示逻辑
  • 开发多订单班workflow执行引擎
  • 实现动态终端输出内容生成器
  • 集成web_result结果展示页面
  • 为每个订单班创建结果展示模板

界面优化任务

  • 设计订单班选择卡片样式
  • 实现订单班切换动画效果
  • 优化Agent网格响应式布局
  • 统一各订单班的视觉风格
  • 添加loading和过渡动画

测试与部署任务

  • 测试12个订单班的完整执行流程
  • 实现性能优化(懒加载、缓存)
  • 创建统一启动脚本
  • 编写技术文档和使用说明

四、技术实现细节

4.1 Agent头像生成策略

# 使用Google Gemini生成头像的prompt模板
prompt_template = """
生成一个{role}的专业头像:
- 风格:现代商务插画风格
- 色调:{color_scheme}
- 特征:{characteristics}
- 背景:简洁渐变背景
- 表情:自信专业
- 服装:{attire}
"""

# 各订单班的色调方案
color_schemes = {
    "文旅": "蓝色系",
    "食品": "绿色系",
    "财经商贸": "金色系",
    "智能开发": "紫色系",
    "智能制造": "橙色系"
    # ...
}

4.2 动态内容生成

// 基于订单班生成不同的输出内容
const generateOutput = (orderClass: string, agent: Agent) => {
  const templates = {
    "文旅": {
      "信息检索专家": [
        "正在分析会展市场数据...",
        "> 发现市场规模{value}亿,年增长{growth}%",
        "> 识别目标展商:{exhibitors}"
      ]
    },
    "食品": {
      "营养配方师": [
        "正在设计营养菜单...",
        "> 设计{count}款核心产品",
        "> 热量控制:{calories}大卡"
      ]
    }
    // ...
  };

  return templates[orderClass][agent.name];
};

4.3 结果页面模板

<!-- web_result/templates/food_result.html -->
<div class="result-container">
  <header>
    <h1>青莳轻食 - 中高端轻食店铺经营方案</h1>
    <div class="stats">
      <span>📊 投资回报期14个月</span>
      <span>💰 初始投资85万</span>
      <span>🎯 月营收30-35万</span>
    </div>
  </header>

  <section class="content">
    <!-- 动态生成的内容 -->
  </section>
</div>

五、技术难点与解决方案

5.1 关键技术挑战

挑战 解决方案
数据文件过大影响加载 实现懒加载,按需加载订单班数据
Agent头像资源管理 使用CDN或图片压缩提供fallback头像
不同订单班逻辑差异 策略模式+配置驱动,减少硬编码
结果页面模板复杂 组件化设计,复用通用模块

六、验收标准

6.1 功能验收

  • 支持12个订单班动态切换
  • Agent根据选择动态加载
  • 每个订单班有独特的执行流程
  • 生成对应的结果展示页面
  • 一键启动所有服务

6.2 性能指标

  • 页面加载时间 < 3秒
  • 订单班切换响应 < 500ms
  • Agent执行动画流畅60fps
  • 内存占用 < 200MB

6.3 用户体验

  • 清晰的订单班选择界面
  • 流畅的执行过程展示
  • 专业的结果输出
  • 统一的视觉风格

七、核心实现要点

7.1 必须完成的功能

  1. 订单班选择用户必须先选择订单班才能看到Agent
  2. 动态Agent显示:根据选择的订单班显示对应的专家
  3. 个性化执行:每个订单班有独特的执行内容和输出
  4. 结果展示集成web_result展示专业的输出成果

7.2 数据结构核心

  • 使用JSON存储所有订单班配置
  • 每个订单班包含基本信息、Agent列表、执行流程、结果模板
  • Agent信息包含名称、角色、头像、输出样例

7.3 关键代码改造点

  1. RequirementModal.tsx - 添加订单班选择网格
  2. AgentGrid.tsx - 实现条件渲染,未选择时隐藏
  3. demoStore.ts - 支持多订单班状态管理
  4. WorkflowPage.tsx - 根据订单班加载不同数据

八、总结

本方案的核心创新:

  • 一个项目,多个场景不再需要12个独立项目
  • 数据驱动:通过配置文件管理所有订单班
  • 动态加载:根据用户选择加载对应内容
  • 统一体验:所有订单班使用相同交互流程

这样的架构更优雅、更易维护、更易扩展。


文档版本2.0 创建日期2025-09-28 状态:待审核