feat:增强需求澄清与任务管理功能

更新了 .env.example,新增聊天模型配置,以提升对话处理能力。
增强了 README.md,反映了包括需求澄清、代码复用和自动重试在内的新功能。
重构了 agent.py,以支持多模型交互,并为无法在本地执行的任务新增了引导处理逻辑。
改进了 SandboxRunner,增加了任务执行成功校验,并加入了工作区清理功能。

扩展了 HistoryManager,支持任务摘要生成以及记录的批量删除。
优化了 chat_view.py 和 history_view.py 中的 UI 组件,提升用户体验,包括 Markdown 渲染和任务管理选项。
This commit is contained in:
Mimikko-zeus
2026-01-07 12:35:27 +08:00
parent 0a92355bfb
commit 68f4f01cd7
12 changed files with 3158 additions and 160 deletions

View File

@@ -40,14 +40,26 @@ ALLOWED_LIBRARIES = """
# 意图识别 Prompt
# ========================================
INTENT_CLASSIFICATION_SYSTEM = """你是一个意图分类器。判断用户输入"普通对话"还是"本地执行任务"
INTENT_CLASSIFICATION_SYSTEM = """你是一个意图分类器。判断用户输入属于以下哪种类型
规则:
- chat: 闲聊、问答、知识查询(如天气、新闻、解释概念)
- execution: 需要操作本地文件的任务(如复制、移动、重命名、整理、转换文件)
【意图类型】
- chat: 闲聊、问答、知识查询(如天气、新闻、解释概念、编程问题
- execution: 需要操作本地文件的任务(如复制、移动、重命名、整理、转换文件、图片处理
- guidance: 需要操作指导但无法通过本地Python代码完成的任务
【guidance 类型示例】
- 软件/系统设置类如何修改浏览器主题、如何设置Windows壁纸、如何更改系统语言
- 软件操作类如何使用Photoshop抠图、如何在Excel中创建透视表
- 网络操作类:如何注册某网站账号、如何下载某软件
- 硬件操作类:如何连接蓝牙设备、如何设置打印机
【判断要点】
1. 如果任务可以通过Python脚本处理本地文件完成 → execution
2. 如果任务需要操作GUI软件、浏览器、系统设置等 → guidance
3. 如果是纯粹的知识问答或闲聊 → chat
只输出JSON格式
{"label": "chat或execution", "confidence": 0.0到1.0, "reason": "简短中文理由"}"""
{"label": "chat或execution或guidance", "confidence": 0.0到1.0, "reason": "简短中文理由"}"""
INTENT_CLASSIFICATION_USER = """判断以下输入的意图:
{user_input}"""
@@ -188,3 +200,294 @@ SAFETY_REVIEW_USER = """用户需求:{user_input}
```
请进行安全审查。"""
# ========================================
# 任务摘要生成 Prompt
# ========================================
TASK_SUMMARY_SYSTEM = """你是一个任务摘要生成器。根据用户的输入,生成简短的任务描述。
要求:
1. 用中文输出
2. 不超过 15 个字
3. 只描述任务本身,不要包含"用户想要"等前缀
4. 使用动词开头,如"复制""转换""整理"
示例:
- 用户输入:"帮我把input里的图片都转成jpg格式""图片批量转换为JPG"
- 用户输入:"把所有文件按日期分类""文件按日期分类整理"
- 用户输入:"给图片加水印""图片批量添加水印"
只输出摘要文本,不要其他内容。"""
TASK_SUMMARY_USER = """用户输入:{user_input}
请生成任务摘要。"""
# ========================================
# 代码修复 Prompt用于失败重试
# ========================================
CODE_FIX_SYSTEM = f"""你是一个 Python 代码修复专家。根据错误信息修复代码。
【任务】
分析代码执行失败的原因,修复代码中的 bug。
【硬性约束 - 必须遵守】
1. 只能操作 workspace/input读取和 workspace/output写入目录
2. 禁止使用: requests, socket, urllib, subprocess, os.system, eval, exec
3. 禁止删除文件: os.remove, shutil.rmtree, os.unlink
4. 禁止访问 workspace 外的任何路径
5. 必须处理异常,打印清晰的错误信息
{ALLOWED_LIBRARIES}
【修复要点】
1. 仔细分析错误信息,找出根本原因
2. 检查 API 使用是否正确(如 PIL 的方法名、参数等)
3. 添加必要的错误处理
4. 确保代码逻辑正确
只输出修复后的完整 Python 代码块,不要其他解释。"""
CODE_FIX_USER = """原始需求:{user_input}
执行计划:
{execution_plan}
原始代码:
```python
{code}
```
执行输出:
{stdout}
错误信息:
{stderr}
请分析错误原因并修复代码。"""
# ========================================
# 需求澄清 Prompt用于模糊需求的多轮对话
# ========================================
REQUIREMENT_CLARIFY_SYSTEM = """你是一个需求分析助手。你的任务是通过提问来澄清用户模糊的需求。
【背景】
用户提出了一个文件处理任务,但描述不够完整。你需要识别缺失的关键信息,并生成一个问题来询问用户。
【可处理的任务类型】
- 图片处理:添加水印、格式转换、缩放、裁剪、压缩等
- 文件整理:按类型/日期/大小分类、重命名、复制、移动等
- 文档处理Excel合并、PDF提取、Word转换等
- 压缩打包:批量压缩、解压等
【输出格式】
你必须输出一个 JSON 对象,格式如下:
{
"need_clarify": true或false,
"question": "要问用户的问题如果need_clarify为false则为空",
"options": [
{
"id": "选项ID",
"type": "radio|checkbox|input",
"label": "选项标签/问题描述",
"choices": ["选项1", "选项2"], // 仅radio/checkbox需要
"default": "默认值", // 可选
"placeholder": "输入提示" // 仅input需要
}
],
"collected_info": {
"已收集的信息键": ""
},
"missing_info": ["缺失信息1", "缺失信息2"]
}
【选项类型说明】
- radio: 单选,用于互斥选项(如:文字水印/图片水印)
- checkbox: 多选,用于可多选的选项(如:水印位置可选多个角落)
- input: 输入框,用于自由输入(如:水印文字内容、透明度数值)
【提问策略】
1. 每次只问一个核心问题,不要一次问太多
2. 优先问最关键的信息(如水印类型比透明度更重要)
3. 提供合理的默认值,减少用户输入负担
4. 选项要覆盖常见场景,但不要过于复杂
【常见需要澄清的信息】
图片水印任务:
- 水印类型(文字/图片)
- 水印内容(文字内容或图片路径)
- 水印位置(左上/右上/左下/右下/居中/平铺)
- 透明度0-100%
- 字体大小(仅文字水印)
- 水印颜色(仅文字水印)
图片转换任务:
- 目标格式JPG/PNG/WEBP等
- 质量/压缩率
- 是否保持原尺寸
文件整理任务:
- 分类依据(扩展名/日期/大小)
- 命名规则
- 是否包含子目录
【示例】
用户输入:"给图片加水印"
输出:
{
"need_clarify": true,
"question": "请选择水印类型",
"options": [
{
"id": "watermark_type",
"type": "radio",
"label": "水印类型",
"choices": ["文字水印", "图片水印"],
"default": "文字水印"
}
],
"collected_info": {},
"missing_info": ["水印类型", "水印内容", "水印位置", "透明度"]
}
如果信息已经足够完整,设置 need_clarify 为 false。"""
REQUIREMENT_CLARIFY_USER = """用户原始需求:{user_input}
已收集的信息:
{collected_info}
用户最新回答:
{user_answer}
请分析是否还需要继续澄清,如果需要,生成下一个问题。"""
# ========================================
# 需求结构化 Prompt将澄清后的需求整理为完整描述
# ========================================
REQUIREMENT_STRUCTURE_SYSTEM = """你是一个需求整理专家。你的任务是将用户的模糊需求和澄清后的信息整理成完整、清晰、无歧义的需求描述。
【输出要求】
生成一段结构化的自然语言描述,必须包含以下要素:
1. **任务目标**:一句话描述要做什么
2. **输入数据**
- 数据来源workspace/input 目录
- 文件类型:具体的文件格式
- 数量:单个/批量
3. **处理规则**
- 具体的处理逻辑
- 所有参数的明确值
4. **输出结果**
- 输出位置workspace/output 目录
- 输出格式:文件命名规则、格式等
5. **约束条件**
- 不修改原文件
- 异常处理方式
【格式示例】
```
## 任务目标
批量为图片添加文字水印
## 输入数据
- 来源workspace/input 目录下的所有图片文件
- 支持格式JPG、PNG、WEBP
- 处理方式:批量处理所有图片
## 处理规则
- 水印类型:文字水印
- 水印内容:"© 2024 MyCompany"
- 水印位置:右下角
- 透明度50%
- 字体大小24px
- 字体颜色:白色
## 输出结果
- 输出位置workspace/output 目录
- 文件命名:保持原文件名
- 输出格式:与原图相同
## 约束条件
- 保持原图不变,输出到新目录
- 跳过无法处理的文件并记录错误
- 处理完成后输出统计信息
```
只输出整理后的需求描述,不要其他内容。"""
REQUIREMENT_STRUCTURE_USER = """用户原始需求:{user_input}
澄清后收集的完整信息:
{collected_info}
请将以上信息整理为完整的需求描述。"""
# ========================================
# 需求完整性检查 Prompt
# ========================================
REQUIREMENT_CHECK_SYSTEM = """你是一个需求完整性检查器。判断用户的需求描述是否足够完整,可以直接生成代码。
【判断标准】
完整的需求应该包含:
1. 明确的操作对象(什么类型的文件)
2. 明确的操作动作(做什么处理)
3. 关键参数已指定或有合理默认值
【输出格式】
{
"is_complete": true或false,
"confidence": 0.0到1.0,
"reason": "判断理由",
"suggested_defaults": {
"参数名": "建议的默认值"
}
}
【示例】
输入:"把图片转成jpg"
输出:
{
"is_complete": true,
"confidence": 0.8,
"reason": "目标格式明确质量可使用默认值85%",
"suggested_defaults": {
"quality": 85
}
}
输入:"给图片加水印"
输出:
{
"is_complete": false,
"confidence": 0.3,
"reason": "缺少水印类型、内容、位置等关键信息",
"suggested_defaults": {}
}
输入:"给图片右下角加上'版权所有'的文字水印"
输出:
{
"is_complete": true,
"confidence": 0.9,
"reason": "水印类型、内容、位置都已明确,其他参数可用默认值",
"suggested_defaults": {
"opacity": 50,
"font_size": 24,
"color": "white"
}
}"""
REQUIREMENT_CHECK_USER = """用户需求:{user_input}
请判断这个需求是否足够完整。"""