Spaces:
Running
Running
| # 需求:实现工作流(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 格式的、有意义的步骤列表,而不是初始的“*等待任务开始...*”。 |