ling-playground / docs /requirements /2025-10-12-08-30-implement-workflow-tab.md
cafe3310's picture
little demo
cb6eafc
# 需求:实现工作流(Workflow)标签页
**重要性:** 中 (Medium)
## 1. 目标
创建一个名为“工作流”的新标签页,允许用户通过与 AI 对话来定义和可视化一个任务的执行流程。
## 2. 功能描述
1. **双 Agent 协作模式**:
* **主 Agent (Ling-1t)**: 在 UI 左侧通过聊天界面与用户直接交互,理解用户意图并帮助其完成任务。
* **副 Agent (Ling-mini)**: 在后台静默观察主 Agent 与用户的对话,其实时、增量地分析和提取对话中体现出的工作流程。
2. **实时工作流可视化**:
* 在 UI 右侧,实时显示由副 Agent 提取出的“当前主题”和“当前工作流描述”。
* 工作流的文本描述格式需要定义,初期可使用简单的占位符格式(例如,使用 Markdown 列表)。
3. **冷启动与示例**:
* 为了方便用户上手,需要在聊天输入框下方提供一些预设的示例主题(`gr.Examples`)。
## 3. UI 布局
* **左侧面板**:
* `gr.Chatbot`: 用于展示与主 Agent 的对话历史。
* `gr.Textbox`: 用户输入框。
* `gr.Button`: 发送按钮。
* `gr.Examples`: 预设主题示例。
* **右侧面板**:
* `gr.Textbox` (或 `gr.Markdown`): 用于显示“当前主题”。
* `gr.Textbox` (或 `gr.Markdown`): 用于显示“当前工作流描述”。
## 4. 开发说明
* **必须对接真实 LLM**: 功能逻辑必须调用真实的 LLM API 来生成聊天回复和工作流,不允许使用写死的静态字符串作为占位符。
* **System Prompts**: 主副 Agent 的 System Prompt 可使用初步的、简单的版本,后续由用户精细化。
* **用户接手**: 最终的、精细化的 System Prompts 和工作流描述格式将由用户手动开发和指定。
## 5. 验证方式
1. 启动应用,切换到“工作流”标签页。
2. 左侧聊天功能可正常使用。
3. 右侧能看到“主题”和“工作流”的显示区域。
4. 点击预设示例,聊天框会自动填充。
5. (手动验证) 在左侧进行对话,右侧的工作流描述会由 **LLM 真实生成**并发生有意义的变化。
## 6. 自动化测试方案
本方案旨在通过模拟一次完整的用户交互,来端到端地验证“工作流”标签页的核心功能。
**测试用例: `test_workflow_tab_dual_agent_interaction`**
1. **环境重置 (Setup)**
* 调用“异常处理与重置流程”,确保浏览器和后台服务处于干净状态。
* `kill` 掉所有 `app.py` 进程。
* 后台启动 `app.py`。
* 等待 5 秒。
2. **导航与定位 (Navigation)**
* 使用 `navigate_page` 打开 `http://127.0.0.1:7860`。
* 使用 `take_snapshot` 获取页面快照。
* 从快照中找到 "工作流 (Workflow)" 标签页的 `uid`。
* 使用 `click` 点击该标签页。
* 等待 2 秒以确保页面切换完成。
3. **执行交互 (Action)**
* 使用 `take_snapshot` 获取工作流页面的快照。
* 从快照中定位到聊天输入框的 `uid` (`elem_id="workflow_chat_input"`)。
* 使用 `fill` 向输入框填入一个清晰的任务,例如: `"我需要一个 Python 函数,它可以接收一个 URL 列表,并返回每个 URL 的 HTTP 状态码。"`。
* 从快照中定位到“发送”按钮的 `uid` (`elem_id="workflow_send_button"`)。
* 使用 `click` 点击“发送”按钮。
4. **等待与断言 (Assertion)**
* 等待一个较长的时间(例如 20 秒),以确保双 LLM 调用均已完成。
* 使用 `take_snapshot` 获取最终的页面快照。
* **验证主 Agent 回复**:
* 检查快照中聊天记录(`elem_id="workflow_chatbot"`)部分,确认其中包含了用户的输入以及由 LLM 生成的、非空的的助手回复。
* **验证副 Agent 分析**:
* 检查快照中“当前主题”文本框(`elem_id="workflow_topic_output"`),确认其内容已被更新,不再是空的。
* 检查快照中“当前工作流描述”区域(`elem_id="workflow_output"`),确认其内容已被更新,包含一个 Markdown 格式的、有意义的步骤列表,而不是初始的“*等待任务开始...*”。