feat:增强需求澄清与任务管理功能
更新了 .env.example,新增聊天模型配置,以提升对话处理能力。 增强了 README.md,反映了包括需求澄清、代码复用和自动重试在内的新功能。 重构了 agent.py,以支持多模型交互,并为无法在本地执行的任务新增了引导处理逻辑。 改进了 SandboxRunner,增加了任务执行成功校验,并加入了工作区清理功能。 扩展了 HistoryManager,支持任务摘要生成以及记录的批量删除。 优化了 chat_view.py 和 history_view.py 中的 UI 组件,提升用户体验,包括 Markdown 渲染和任务管理选项。
This commit is contained in:
313
llm/prompts.py
313
llm/prompts.py
@@ -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}
|
||||
|
||||
请判断这个需求是否足够完整。"""
|
||||
|
||||
Reference in New Issue
Block a user