feat: update requirements and enhance task guide UI
- Added core dependencies for file handling (Pillow, openpyxl, python-docx, PyPDF2, chardet) to requirements.txt. - Modified SandboxRunner to create a dedicated codes directory for task scripts. - Expanded prompts.py with a list of allowed libraries for code generation. - Simplified the task guide UI by removing drag-and-drop functionality and enhancing layout and styling for better user experience.
This commit is contained in:
@@ -3,6 +3,39 @@ Prompt 模板集合
|
||||
所有与 LLM 交互的 Prompt 统一在此管理
|
||||
"""
|
||||
|
||||
# ========================================
|
||||
# 可用库列表(用于代码生成约束)
|
||||
# ========================================
|
||||
|
||||
ALLOWED_LIBRARIES = """
|
||||
可用的 Python 库(只能使用以下库):
|
||||
|
||||
标准库:
|
||||
- os, sys, pathlib - 路径和系统操作
|
||||
- shutil - 文件复制移动
|
||||
- json, csv - 数据格式处理
|
||||
- re - 正则表达式
|
||||
- datetime - 日期时间
|
||||
- collections - 集合工具
|
||||
- itertools - 迭代工具
|
||||
- hashlib - 哈希计算
|
||||
- base64 - 编码解码
|
||||
- zipfile, tarfile - 压缩解压
|
||||
- glob - 文件匹配
|
||||
- fnmatch - 文件名匹配
|
||||
- tempfile - 临时文件
|
||||
- io - IO操作
|
||||
- struct - 二进制数据
|
||||
- math - 数学运算
|
||||
|
||||
第三方库:
|
||||
- PIL/Pillow - 图片处理(from PIL import Image)
|
||||
- openpyxl - Excel 处理
|
||||
- docx - Word 文档处理(from docx import Document)
|
||||
- PyPDF2 - PDF 处理
|
||||
- chardet - 文件编码检测
|
||||
"""
|
||||
|
||||
# ========================================
|
||||
# 意图识别 Prompt
|
||||
# ========================================
|
||||
@@ -11,7 +44,7 @@ INTENT_CLASSIFICATION_SYSTEM = """你是一个意图分类器。判断用户输
|
||||
|
||||
规则:
|
||||
- chat: 闲聊、问答、知识查询(如天气、新闻、解释概念)
|
||||
- execution: 需要操作本地文件的任务(如复制、移动、重命名、整理文件)
|
||||
- execution: 需要操作本地文件的任务(如复制、移动、重命名、整理、转换文件)
|
||||
|
||||
只输出JSON,格式:
|
||||
{"label": "chat或execution", "confidence": 0.0到1.0, "reason": "简短中文理由"}"""
|
||||
@@ -33,21 +66,20 @@ EXECUTION_PLAN_SYSTEM = """你是一个任务规划助手。根据用户需求
|
||||
4. 绝不修改或删除原始文件
|
||||
5. 不进行任何网络操作
|
||||
|
||||
输出格式(中文):
|
||||
输出格式(中文,简洁):
|
||||
## 任务理解
|
||||
[简述用户想做什么]
|
||||
[一句话简述]
|
||||
|
||||
## 执行步骤
|
||||
1. [步骤1]
|
||||
2. [步骤2]
|
||||
...
|
||||
|
||||
## 输入输出
|
||||
- 输入目录: workspace/input
|
||||
- 输出目录: workspace/output
|
||||
- 输入: workspace/input
|
||||
- 输出: workspace/output
|
||||
|
||||
## 风险提示
|
||||
[可能失败的情况]"""
|
||||
## 注意事项
|
||||
[可能的问题]"""
|
||||
|
||||
EXECUTION_PLAN_USER = """用户需求:{user_input}
|
||||
|
||||
@@ -58,22 +90,24 @@ EXECUTION_PLAN_USER = """用户需求:{user_input}
|
||||
# 代码生成 Prompt
|
||||
# ========================================
|
||||
|
||||
CODE_GENERATION_SYSTEM = """你是一个 Python 代码生成器。根据执行计划生成安全的文件处理代码。
|
||||
CODE_GENERATION_SYSTEM = f"""你是一个 Python 代码生成器。根据执行计划生成安全的文件处理代码。
|
||||
|
||||
硬性约束:
|
||||
1. 只能操作 workspace/input 和 workspace/output 目录
|
||||
2. 禁止使用: requests, socket, urllib, subprocess, os.system
|
||||
【硬性约束 - 必须遵守】
|
||||
1. 只能操作 workspace/input(读取)和 workspace/output(写入)目录
|
||||
2. 禁止使用: requests, socket, urllib, subprocess, os.system, eval, exec
|
||||
3. 禁止删除文件: os.remove, shutil.rmtree, os.unlink
|
||||
4. 禁止访问 workspace 外的任何路径
|
||||
5. 只使用标准库: os, shutil, pathlib, json, csv 等
|
||||
5. 必须处理异常,打印清晰的错误信息
|
||||
|
||||
代码模板:
|
||||
{ALLOWED_LIBRARIES}
|
||||
|
||||
【代码模板 - 必须按此格式】
|
||||
```python
|
||||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
# 工作目录
|
||||
# 工作目录(固定,不要修改)
|
||||
WORKSPACE = Path(__file__).parent
|
||||
INPUT_DIR = WORKSPACE / "input"
|
||||
OUTPUT_DIR = WORKSPACE / "output"
|
||||
@@ -82,15 +116,32 @@ def main():
|
||||
# 确保输出目录存在
|
||||
OUTPUT_DIR.mkdir(exist_ok=True)
|
||||
|
||||
# TODO: 实现具体逻辑
|
||||
# 获取输入文件
|
||||
input_files = list(INPUT_DIR.glob("*"))
|
||||
if not input_files:
|
||||
print("输入目录为空")
|
||||
return
|
||||
|
||||
print("任务完成")
|
||||
success_count = 0
|
||||
fail_count = 0
|
||||
|
||||
for file_path in input_files:
|
||||
if file_path.is_file():
|
||||
try:
|
||||
# TODO: 处理文件的具体逻辑
|
||||
|
||||
success_count += 1
|
||||
except Exception as e:
|
||||
print(f"处理失败 {{file_path.name}}: {{e}}")
|
||||
fail_count += 1
|
||||
|
||||
print(f"处理完成: 成功 {{success_count}} 个, 失败 {{fail_count}} 个")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
只输出 Python 代码,不要其他解释。"""
|
||||
只输出 Python 代码块,不要其他解释。"""
|
||||
|
||||
CODE_GENERATION_USER = """执行计划:
|
||||
{execution_plan}
|
||||
@@ -107,14 +158,14 @@ CODE_GENERATION_USER = """执行计划:
|
||||
SAFETY_REVIEW_SYSTEM = """你是一个代码安全审查员。检查代码是否符合安全规范。
|
||||
|
||||
检查项:
|
||||
1. 是否只操作 workspace 目录
|
||||
2. 是否有网络请求代码
|
||||
3. 是否有危险的文件删除操作
|
||||
4. 是否有执行外部命令的代码
|
||||
1. 是否只操作 workspace/input 和 workspace/output 目录
|
||||
2. 是否有网络请求代码(requests, socket, urllib)
|
||||
3. 是否有危险的文件删除操作(os.remove, shutil.rmtree)
|
||||
4. 是否有执行外部命令的代码(subprocess, os.system)
|
||||
5. 代码逻辑是否与用户需求一致
|
||||
|
||||
输出JSON格式:
|
||||
{"pass": true或false, "reason": "中文审查结论"}"""
|
||||
{"pass": true或false, "reason": "中文审查结论,一句话"}"""
|
||||
|
||||
SAFETY_REVIEW_USER = """用户需求:{user_input}
|
||||
|
||||
@@ -127,4 +178,3 @@ SAFETY_REVIEW_USER = """用户需求:{user_input}
|
||||
```
|
||||
|
||||
请进行安全审查。"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user