我用Python 实现了一个可以添加多Agent的类似“微信”的聊天桌面程序2-添加了本地tools机制

前言

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的工具!

七、总结与展望

通过这篇文章,我们完成了聊天程序的工具集成部分。现在,我们的程序不仅能进行文本聊天,还能调用各种本地工具执行任务。未来,我们还可以:

  1. 添加更多实用工具,如网络查询、数据处理等
  2. 实现工具的参数配置界面,让用户更方便地使用工具
  3. 添加工具执行的日志记录功能,方便问题排查

希望这个项目能启发大家在自己的Python项目中集成实用工具,创造出更强大的应用程序!让我们继续探索Python编程的无限可能吧!

-----------------本篇完------------------

PS.扩展阅读

————————————————————————————————————————

对于python机器人编程感兴趣的小伙伴,可以进入如下链接阅读相关咨询

ps1.六自由度机器人相关文章资源

(1) 对六自由度机械臂的运动控制及python实现(附源码)
在这里插入图片描述

(2) N轴机械臂的MDH正向建模,及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端配套资源源代码已经上传(横屏版),下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机智新语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值