8a538bb950c7a5083eeb7756e994c79287e06954
- Renamed `check_environment` to `check_api_key_configured` for clarity, simplifying the API key validation logic. - Removed the blocking behavior of the API key check during application startup, allowing the app to run while providing a prompt for configuration. - Updated `LocalAgentApp` to accept an `api_configured` parameter, enabling conditional messaging for API key setup. - Enhanced the `SandboxRunner` to support backup management and improved execution result handling with detailed metrics. - Integrated data governance strategies into the `HistoryManager`, ensuring compliance and improved data management. - Added privacy settings and metrics tracking across various components to enhance user experience and application safety.
LocalAgent - 本地 AI 执行助手
LocalAgent 是一个基于大语言模型的本地 AI 助手,能够理解自然语言指令,自动生成并执行 Python 代码来完成文件处理任务。所有代码在本地沙箱环境中安全执行。
✨ 功能特性
🤖 智能对话
- 意图识别:自动区分闲聊对话、操作指导和执行任务
- 上下文记忆:支持多轮对话,记住之前的对话内容
- Markdown 渲染:支持标题、列表、代码块、链接等格式
- 环境感知:根据用户操作系统给出针对性建议
📝 需求澄清
- 智能检测:自动识别模糊或不完整的需求
- 交互式问答:通过单选、多选、输入框收集缺失信息
- 效果预览:颜色选择器、位置预览等可视化辅助
💻 代码生成与执行
- 自动生成:根据结构化需求生成 Python 代码
- 多层安全检查:静态规则检查 + LLM 语义审查
- 沙箱执行:隔离环境运行,保护系统安全
- 执行日志:完整记录每次执行的输入输出
📚 任务管理
- 历史记录:保存所有执行过的任务
- 代码复用:自动匹配相似任务,复用成功代码
- 失败重试:AI 自动分析错误并修复代码
🏗️ 项目结构
LocalAgent/
├── app/ # 主应用
│ └── agent.py # 核心应用类,管理 UI 和工作流
├── llm/ # LLM 集成
│ ├── client.py # API 客户端(支持流式传输和重试)
│ └── prompts.py # Prompt 模板
├── intent/ # 意图分类
│ ├── classifier.py # 意图分类器
│ └── labels.py # 意图标签定义
├── safety/ # 安全检查
│ ├── rule_checker.py # 静态规则检查器
│ └── llm_reviewer.py # LLM 代码审查
├── executor/ # 代码执行
│ └── sandbox_runner.py # 沙箱执行器
├── history/ # 历史管理
│ └── manager.py # 历史记录管理器
├── ui/ # 用户界面
│ ├── chat_view.py # 聊天界面(支持 Markdown)
│ ├── clarify_view.py # 需求澄清界面
│ ├── task_guide_view.py # 任务确认界面
│ ├── history_view.py # 历史记录界面
│ └── settings_view.py # 设置界面
├── tests/ # 单元测试
├── workspace/ # 工作目录(自动创建)
│ ├── input/ # 输入文件
│ ├── output/ # 输出文件
│ ├── codes/ # 生成的代码
│ └── logs/ # 执行日志
├── main.py # 程序入口
├── requirements.txt # 依赖列表
└── .env # 配置文件
🚀 快速开始
环境要求
- Python: 3.10 或更高版本
- 操作系统: Windows 10/11
- API Key: SiliconFlow API Key(点击获取)
安装步骤
-
克隆项目
git clone <repository-url> cd LocalAgent -
创建虚拟环境(推荐使用 Anaconda)
conda create -n localagent python=3.10 conda activate localagent -
安装依赖
pip install -r requirements.txt -
配置 API Key
# 复制配置模板 copy .env.example .env # 编辑 .env 文件,填入你的 API Key # LLM_API_KEY=sk-xxxxx -
运行程序
python main.py
⚙️ 配置说明
在 .env 文件中配置(也可以在应用内的设置界面修改):
# API 配置
LLM_API_URL=https://api.siliconflow.cn/v1/chat/completions
LLM_API_KEY=你的API密钥
# 模型配置
# 意图识别模型(推荐小模型,速度快)
INTENT_MODEL_NAME=Qwen/Qwen2.5-7B-Instruct
# 对话模型(推荐中等模型,平衡速度和质量)
CHAT_MODEL_NAME=Qwen/Qwen2.5-32B-Instruct
# 代码生成模型(推荐大模型,质量高)
GENERATION_MODEL_NAME=Qwen/Qwen2.5-72B-Instruct
推荐模型配置
| 用途 | 推荐模型 | 说明 |
|---|---|---|
| 意图识别 | Qwen2.5-7B | 快速响应,节省 token |
| 对话/指导 | Qwen2.5-32B | 平衡速度和质量 |
| 代码生成 | Qwen2.5-72B | 高质量代码生成 |
📖 使用指南
三种工作模式
1. 对话模式 💬
直接提问或闲聊:
- "Python 是什么?"
- "解释一下机器学习"
- "今天天气怎么样"
2. 操作指导模式 📋
询问无法通过代码完成的操作:
- "怎么修改浏览器主题?"
- "如何设置 Windows 开机启动项?"
- "怎么下载 QQ?"
3. 执行模式 ⚡
描述文件处理任务:
- "把 input 里的图片都转成 PNG 格式"
- "给所有图片添加水印"
- "把文件按日期重命名"
执行任务流程
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 输入需求 │ ──▶ │ 意图识别 │ ──▶ │ 需求完整? │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
┌──────────────────────────┼──────────────────────────┐
│ 否 │ 是 │
▼ │ ▼
┌─────────────┐ │ ┌─────────────┐
│ 需求澄清 │ ────────────────────┘ │ 生成代码 │
└─────────────┘ └──────┬──────┘
│
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 查看结果 │ ◀── │ 沙箱执行 │ ◀── │ 确认执行 │ ◀── │ 安全检查 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
需求澄清示例
当输入模糊需求如 "给图片加水印" 时,系统会:
- 检测缺失信息 - 水印类型、位置、内容等
- 交互式询问 - 提供可视化选项:
- 水印类型:文字 / 图片(单选)
- 位置:左上 / 右上 / 左下 / 右下 / 居中(多选 + 预览)
- 文字内容:[输入框]
- 透明度:[输入框,默认 50%]
- 结构化需求 - 整合所有信息
- 生成代码 - 根据完整需求生成代码
🔒 安全机制
LocalAgent 实现了多层安全保护:
硬规则(直接拦截)
- ❌ 网络模块:
socket,subprocess - ❌ 代码执行:
eval(),exec() - ❌ 系统命令:
os.system(),os.popen()
软规则(警告提示)
- ⚠️ 文件删除:
os.remove(),shutil.rmtree() - ⚠️ 网络请求:
requests,urllib
LLM 审查
- 语义分析生成的代码
- 检查是否与用户意图一致
- 识别潜在的危险操作
沙箱执行
- 隔离的子进程环境
- 限制文件访问范围
- 完整的执行日志
📦 支持的文件操作
生成的代码可以使用以下库:
标准库
| 库 | 用途 |
|---|---|
os, pathlib |
路径操作 |
shutil |
文件复制/移动 |
json, csv |
数据格式处理 |
zipfile, tarfile |
压缩解压 |
datetime |
日期时间处理 |
re |
正则表达式 |
第三方库
| 库 | 用途 |
|---|---|
Pillow |
图片处理(缩放、裁剪、水印等) |
openpyxl |
Excel 文件读写 |
python-docx |
Word 文档处理 |
PyPDF2 |
PDF 文件处理 |
chardet |
文件编码检测 |
🧪 测试
运行单元测试:
python -m pytest tests/ -v
当前测试覆盖:
- ✅ 意图分类器测试
- ✅ 安全规则检查测试
- ✅ 历史记录管理测试
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT License
🙏 致谢
- SiliconFlow - 提供 LLM API 服务
- Qwen - 优秀的开源大语言模型
Description
Languages
Python
99.2%
Batchfile
0.8%