用DeepSeek和pydantic-ai库,5分钟搞定一个能自动管理文件的AI小助手(Python 3.10保姆级教程)

张开发
2026/5/30 15:28:01 15 分钟阅读
用DeepSeek和pydantic-ai库,5分钟搞定一个能自动管理文件的AI小助手(Python 3.10保姆级教程)
5分钟打造智能文件管家基于DeepSeek与pydantic-ai的Python自动化方案当你的开发目录里堆满未整理的实验数据、临时截图和版本混乱的文档时是否幻想过有个懂编程的助手能自动处理这些琐事现在借助DeepSeek大模型和pydantic-ai库我们完全可以用Python 3.10在五分钟内构建一个能理解自然语言指令的智能文件管家。这个AI助手不仅能听懂把上周的销售报告改名为Q3_summary.pdf这样的复杂指令还能自动执行文件内容提取、批量重命名等操作彻底告别重复劳动。1. 环境配置与工具选型在开始编码前我们需要准备以下环境要素Python 3.10环境确保已安装最新版Python建议使用pyenv或conda管理多版本必备依赖库pip install pydantic-ai python-dotenvDeepSeek API密钥访问DeepSeek官网获取API Key建议存储在.env文件DEEPSEEK_API_KEYyour_api_key_here为什么选择这个技术组合pydantic-ai库封装了复杂的Agent构建流程而DeepSeek模型因其出色的工具调用能力成为首选。二者的配合就像给Python脚本装上了大脑和双手from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider import os from dotenv import load_dotenv load_dotenv() # 加载环境变量 model OpenAIModel( model_namedeepseek-chat, providerOpenAIProvider( api_keyos.getenv(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com ) )提示将API密钥直接写在代码中是危险做法务必使用环境变量管理敏感信息2. 构建文件操作工具集真正的智能体现在Agent能自主调用工具完成任务。我们先创建file_tools.py实现三个核心功能from pathlib import Path import os BASE_DIR Path(__file__).parent / workspace # 限定工作目录 def safe_path_check(target_path: Path) - bool: 防止目录穿越攻击的安全检查 try: return Path(os.path.realpath(target_path)).is_relative_to(BASE_DIR) except ValueError: return False def read_file(filename: str, max_lines: int None) - str: 安全读取文件内容 target BASE_DIR / filename if not safe_path_check(target): return 错误文件路径超出允许范围 try: with open(target, r, encodingutf-8) as f: content f.readlines() if max_lines else f.read() return .join(content[:max_lines]) if max_lines else content except Exception as e: return f读取失败{str(e)} def rename_file(old_name: str, new_name: str) - str: 带安全检查的重命名操作 old_path BASE_DIR / old_name new_path BASE_DIR / new_name if not (safe_path_check(old_path) and safe_path_check(new_path)): return 错误路径安全检查未通过 try: os.renames(old_path, new_path) return f成功将 {old_name} 重命名为 {new_name} except Exception as e: return f重命名失败{str(e)} def list_files(extension: str None) - list: 按扩展名过滤文件列表 try: all_files [f.name for f in BASE_DIR.iterdir() if f.is_file()] return [f for f in all_files if not extension or f.endswith(extension)] except Exception as e: return [f列表获取失败{str(e)}]注意所有文件操作都应包含路径安全检查防止恶意路径穿越3. 创建智能Agent实例有了工具集后我们需要配置Agent的行为特征和交互方式agent Agent( model, system_prompt 你是一个高效的文件管理助手具有以下行为特征 1. 当用户请求涉及文件操作时必须调用工具函数 2. 对危险操作如删除文件需二次确认 3. 输出结果时附带操作摘要 , tools[read_file, rename_file, list_files] ) def interactive_session(): 交互式会话循环 history [] print(文件助手已启动输入quit退出) while True: try: query input(\n您的指令 ) if query.lower() in (quit, exit): break response agent.run_sync(query, message_historyhistory) history.extend(response.all_messages()) print(f\n助手{response.output}) except KeyboardInterrupt: print(\n会话中断) break except Exception as e: print(f处理出错{str(e)}) if __name__ __main__: interactive_session()这个配置实现了几个关键特性记忆上下文保留最近10轮对话历史工具自动选择Agent会根据问题自动判断是否需要调用工具安全防护系统提示中内置了安全规范4. 实战效果演示让我们看几个典型使用场景场景1多步骤文件处理您的指令 请列出所有的PDF文件然后把report.pdf改名为2024_report.pdf 助手当前工作区找到2个PDF文件 - report.pdf - template.pdf 已执行重命名操作report.pdf → 2024_report.pdf场景2条件读取您的指令 读取config.yaml的前10行内容 助手config.yaml前10行内容 --- database: host: 127.0.0.1 port: 5432 username: admin password: ${DB_PASSWORD} logging: level: info file: /var/log/app.log错误处理演示您的指令 把/etc/passwd复制到工作区 助手错误文件路径超出允许范围通过这几个例子可以看出这个不到200行的脚本已经实现了自然语言理解多工具协调调用操作结果可视化基础安全防护5. 进阶优化方向对于想继续增强功能的开发者可以考虑增加文件监控功能from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler class FileChangeHandler(FileSystemEventHandler): def on_modified(self, event): agent.run(f文件{event.src_path}已被修改是否需要执行备份) observer Observer() observer.schedule(FileChangeHandler(), pathworkspace, recursiveTrue) observer.start()支持批量操作def batch_rename(pattern: str, new_prefix: str): files [f for f in BASE_DIR.iterdir() if pattern in f.name] return [rename_file(f.name, f{new_prefix}_{i}{f.suffix}) for i, f in enumerate(files)]添加权限控制系统USER_PERMISSIONS { guest: [read_file, list_files], admin: [read_file, rename_file, list_files] } def check_permission(user_role: str, tool_name: str) - bool: return tool_name in USER_PERMISSIONS.get(user_role, [])这些扩展不需要修改核心Agent逻辑只需注册新工具即可立即生效这正是AI Agent架构的魅力所在。

更多文章