微信扫码
添加专属顾问
我要投稿
之前展示过我自己搞的智能助手【奥特曼】,他可以打开本机的软件工具,可以联网查询天气,可以控制我的小米电视,还可以调用外部接口完成写论文存储到固定位置等任务,那这部分具体是怎么做的,哈哈其实核心就是 大模型+agent tool,本次就给大家分享一下这个部分,还没有看过我的智能助手的可以看一下如下视频
背景介绍
起初只是想搞一个语音助手,就是根据用户的语音输入,给出反馈,后来逐步完善成可以调用各种工具的智能体了,后续还在不断完善,过段时间会开源,^_^
工具使用
很多大模型都有调用工具函数的能力,但是确实效果差距有点大,我测试了多个大模型,最后发现,llama3.1,gemma2效果是最好的,本次实验,大模型就是使用的llama3.1,工具封装使用的langchain_experimental这个包,这个包可以基于大模型封装各种tool,以供大模型去识别调用,执行你设定的任务,还可以传递参数。
具体流程
首先构造工具函数和确定参数,这里以打开 浏览器的function为例:
首先需要找到浏览器exe的路径如下:
在浏览器的图标上右击,点击【打开文件所在位置】,然后,如下
在打开的位置中,右击浏览器图标,点击【复制文件地址】,这样你就得到了exe的地址
"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe"
这个在构造函数时使用。
定义从ollama的接口获取大模型,这里使用的langchain_experimental包中的OllamaFunctions函数,这个是使用大模型调用工具的函数
model_tool = OllamaFunctions(model='llama3.1:8b', base_url='http://localhost:11434', format='json')
构造调用函数:这里要构造一个可以调用exe文件的函数,我们使用os的调用系统命令的方式去运行exe
os.startfile(r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe")
这个地方很简答,当然你也可以 使用其他python内置方式去调用exe,这里为了更具通用性,也就是当你调用工具时都走这个函数,我们需要给函数传递一个参数,用来识别我们是对什么工具进行操作,具体函数如下:
def open_tool(name):if name == "音乐播放器":os.startfile(r"C:\Program Files\NetEase\CloudMusic\cloudmusic.exe")elif name == "录屏程序":# 需要启动的 Python 脚本路径script_path = r'F:/alloy-voice-assistant-main/luping_tool_2.py >> lp.log 2>&1 &'python_p = "D:/anaconda3/python.exe"# 使用 os.system 在后台启动进程os.system(f'start /B {python_p} {script_path}')return name+"已打开,并缩小到任务栏中了"elif name == "微软浏览器":os.startfile(r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")else:os.startfile(r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe")return name+"已打开"
我这里只集成了四个工具,你也可以集成更多进来。
业务处理函数映射,方便后续调用
fn_map = {'open_tool':open_tool}这里是为了后边调用时更方便使用string类型确定fun。
通过业务处理函数描述,把业务函数绑定到大模型上
llm_with_tool = model_tool.bind_tools( tools=[{'name': 'open_tool','description': '根据用户的命令打开音乐播放器、录屏程序、微软浏览器或谷歌浏览器','parameters': {'type': 'object','properties': {'name': {'type': 'string','description': '支持 录屏程序,音乐播放器目前仅支持 网易音乐播放器,浏览器的名字,目前仅支持 微软浏览器、谷歌浏览器',}},'required': ['name'],},}])讲解一下这个绑定方式,这个主要是OllamaFunctions的绑定工具到大模型的方式,首先tools中可以定义多个工具,每个工具以自定格式进行书写;具体到工具参数
name:这里填写工具的名称,和映射中的一直,不可以和其他重复
description:这里是一段自然语言描述,描述本工具的作用
parameters:这个是参数定义,就是你调用工具函数时传递的参数,这里可以是多个参数,每个参数是一个字典形式,放在properties中,其中 required 是参数名字,多个参数时,就罗列多个在一个list中。
好了这样一个agent tool的定义就完成了,下面进行调用
调用代码如下
def chat_handler(chat_str):print("====================")print(f"user: {chat_str}")print("--------------------")ai_msg = llm_with_tool.invoke(chat_str)print(ai_msg.tool_calls)if ai_msg.tool_calls:fn_name = ai_msg.tool_calls[0]['name']fn_param = ai_msg.tool_calls[0]['args']print("ai:......")print(f"调用函数:{fn_name},参数:{fn_param}")res = fn_map[fn_name](**fn_param)return reselse:return ai_msg.content大模型处理输入并确定需要调用的业务函数,并实际调用业务函数
这里讲解一下调用原理,大模型结合工具的描述和用户的输入进行匹配,如果有参数,会解析参数出来,然后去调用对应tool,如果没有匹配上任何tool,就会按照用户直接和llm对话的方式去返回结果,这样不至于硬性匹配所谓最相似的工具。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-29
KnowFlow 无缝衔接 Dify,分块支持添加父标题、Title 切块支持自定义标题层级切割、图片理解新增支持上下文
2025-10-28
邪修榨干元宝AI录音笔:白天工作,晚上陪聊
2025-10-27
免费又好用的AI录音笔都出来了,这下哪还有理由不学习?
2025-10-24
Aiops探索:我用Dify结合k8s的api做了一个非常简单的Aiops智能体
2025-10-24
阿里夸克AI眼镜开售:叠加补贴后3699元,它能打破AI眼镜的魔咒吗?
2025-10-23
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
2025-10-13
Dify + 飞书组合拳:企业级 AI 安全大脑落地全指南,助力安管效率提升 300%
2025-09-23
专访Plaud中国区CEO:我们只做“必须做”和“不做要死”的事
2025-09-19
2025-09-02
2025-10-13
2025-09-02
2025-10-24
2025-08-25
2025-09-05
2025-09-02
2025-08-22
2025-08-28