目录
前言
Hello!上一篇文章我们聊了如何用Python打造一个支持多Agent的桌面聊天程序,今天我们深入探讨如何为这个程序添加本地tools机制,让我们的聊天程序更强大、更实用!
一、工具集成的目标与意义
在第一版程序中,我们实现了基本的多Agent聊天功能。但仅仅发送和接收文本消息显然不够。我们希望通过集成本地工具,让Agent能执行更复杂的任务,例如文件操作、数据查询等。
二、核心:工具加载与发现机制
1. 工具文件夹结构
我们创建了一个toolbox\localtools
文件夹,所有工具模块都放在这里。每个工具模块是一个.py
文件,包含具体的工具函数。
2. 动态加载工具的魔法
local_package_path = '.\\toolbox\\localtools'
modules = import_all_py_files_in_folder(local_package_path)
TOOLBOXTOOLS = {}
for module in modules:
TOOLBOXTOOLS[module.__name__] = []
functions = get_functions(module)
for function in functions:
TOOLBOXTOOLS[module.__name__].append(function.__name__)
这段代码会扫描localtools
文件夹,动态加载所有.py
文件,并提取其中的函数名称。最终TOOLBOXTOOLS
会是一个字典,结构类似:
{
'findtools': ['find_files_with_powershell_regex', 'find_paths_with_powershell_regex'],
'filetools': ['open_file_by_path']
}
这样,我们就能清楚知道每个工具模块提供了哪些功能。
三、工具选择与配置界面
在聊天程序中,我们添加了一个工具选择对话框:
dialog = ToolSelectionDialog(TOOLBOXTOOLS, self)
if dialog.exec() == QDialog.Accepted:
selected_tools = dialog.selected_tools
stools = []
for tool in selected_tools:
stools.append(tool[1])
tools_str = str(stools)
这个对话框会以树状结构展示所有可用工具,用户可以选择需要的工具。选择结果会以字符串形式保存在Agent配置中。
四、工具调用的实际案例
1. 文件查找工具
我们实现了find_files_with_powershell_regex
函数,它能根据正则表达式查找文件:
def find_files_with_powershell_regex(root_dir: str, regex_pattern: str) -> dict:
# ...[函数实现部分]...
通过PowerShell命令,这个工具可以在指定目录及其子目录中查找匹配文件名模式的文件。
2. 文件打开工具
另一个实用工具是open_file_by_path
,它能打开指定路径的文件:
def open_file_by_path(file_path: str) -> dict:
try:
subprocess.run(['start', '', file_path], shell=True)
return {"status": "success", "response": f"文件已经打开"}
except FileNotFoundError:
return {"status": "error", "response": f"文件未找到: {file_path}"}
这个工具利用系统默认程序打开文件,方便用户快速访问文件内容。
五、工具与Agent的结合
当我们创建新Agent时,可以选择为其配置工具:
def create_new_agent(self):
# ...[前面代码]...
dialog = ToolSelectionDialog(TOOLBOXTOOLS, self)
if dialog.exec() == QDialog.Accepted:
selected_tools = dialog.selected_tools
stools = []
for tool in selected_tools:
stools.append(tool[1])
tools_str = str(stools)
Agent在回复消息时,可以调用这些工具来执行任务。例如,当用户询问某个文件时,Agent可以调用文件查找工具并返回结果。
六、工具调用的实际效果
通过集成这些本地工具,我们的聊天程序变得更加实用。Agent不仅能进行简单的对话,还能帮助用户完成文件操作等实际任务。
这里可以添加有用的工具,包括MCP的工具!
七、总结与展望
通过这篇文章,我们完成了聊天程序的工具集成部分。现在,我们的程序不仅能进行文本聊天,还能调用各种本地工具执行任务。未来,我们还可以:
- 添加更多实用工具,如网络查询、数据处理等
- 实现工具的参数配置界面,让用户更方便地使用工具
- 添加工具执行的日志记录功能,方便问题排查
希望这个项目能启发大家在自己的Python项目中集成实用工具,创造出更强大的应用程序!让我们继续探索Python编程的无限可能吧!
-----------------本篇完------------------
PS.扩展阅读
————————————————————————————————————————
对于python机器人编程感兴趣的小伙伴,可以进入如下链接阅读相关咨询
ps1.六自由度机器人相关文章资源
(1) 对六自由度机械臂的运动控制及python实现(附源码)
ps2.四轴机器相关文章资源
(1) 文章:python机器人编程——用python实现一个写字机器人
(2)python机器人实战——0到1创建一个自动是色块机器人项目-CSDN直播
(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(4)实现了语音输入+大模型指令解析+机器视觉+机械臂流程打通
ps3.移动小车相关文章资源
(1)python做了一个极简的栅格地图行走机器人,到底能干啥?[第五弹]——解锁蒙特卡洛定位功能-CSDN博客
(2) 对应python资源:源码地址
(3)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(上篇)_agv编程-CSDN博客
(4)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(下篇)_agv路线规划原则python-CSDN博客
对应python及仿真环境资源:源码链接
ps3.wifi小车控制相关文章资源
web端配套资源源代码已经上传(竖屏版),下载地址
仿真配套资源已经上传:下载地址
web端配套资源源代码已经上传(横屏版),下载地址