资讯动态

Day 15 · 多工具 Agent:让 AI 自主选择和组合工具

发布时间:2026/8/19 9:53:30 来源:尧图企业网站定制
「AI Python 系列」第 01 栏 · AI 时代的 Python 办公自动化全栏 18 篇 · 零成本跟完 品牌梅雅达编程笔记摘要三个工具太少六个刚好。本篇Agent拥有计算器、时间、天气、知识搜索、数据库查询、字数统计六个工具自主决定调用顺序和组合方式。三个实战查天气、数据库查询加计算、知识搜索加统计加时间。传统做法人写调用链AI做法自主规划路径。开篇 · 从单工具到多工具Day 14 的 Agent 有 3 个工具能解决简单问题。但真实场景更复杂场景需要的工具调用顺序“北京天气如何”get_weather1步“数据库里产品平均价格是多少”query_database→calculate2步“搜一下Python知识统计字数告诉我几点了”search_knowledge→count_words → get_time3步工具越多AI 需要做的规划越复杂。今天给 Agent 6 个工具看它怎么自主组合。一、传统做法 vs AI 时代做法传统做法人写调用链# 人决定先查数据库再算平均dataquery_database(SELECT price FROM products)avgcalculate(fsum({data}) / count({data}))print(avg)问题每个问题的调用链都要人提前想好写死在代码里。AI 时代做法Agent 自主规划# AI 自己决定调用什么、什么顺序agent.run(数据库里所有产品的平均价格是多少)# AI 自主决策query_database → calculate二、核心代码 multi_tool_agent_min.py - 多工具 Agent极简核心版 只保留 ReAct 循环 最精简的 6 个工具 importos,sys,json,sqlite3fromdatetimeimportdatetime _project_rootos.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))sys.path.insert(0,_project_root)fromllm_clientimportLLMClient# 工具6 个全部用 lambda/单表达式DB_INIT CREATE TABLE products(id INT,name TEXT,price REAL,stock INT); INSERT INTO products VALUES(1,编程教程,99,500),(2,智能客服,9999,50),(3,爬虫工具包,299,200),(4,API网关,25000,10); CREATE TABLE sales(id INT,product_id INT,quantity INT,amount REAL); INSERT INTO sales VALUES(1,1,50,4950),(2,2,2,19998),(3,3,20,5980),(4,4,1,25000),(5,1,80,7920); def_tcalc(e):returnf{eval(e,{{__builtins__:{{}}}},{{}})}ifall(cin0123456789-*/.() forcine)else参数错误def_ttime():wd一二三四五六日ndatetime.now()returnf{n:%Y-%m-%d%H:%M:%S}星期{wd[n.weekday()]}def_tweather(c):return{北京:晴25C,上海:多云28C,广州:雷雨30C,深圳:阵雨29C,杭州:晴26C}.get(c,f{c}暂无支持北京/上海/广州/深圳/杭州)def_tknowledge(q):kb{python:Python是高级编程语言,ai:AI让计算机模拟人类智能,sql:SQL是结构化查询语言,agent:Agent能自主感知决策执行}fork,vinkb.items():ifkinq.lower():returnvreturnf未找到支持python/ai/sql/agentdef_tdb(sql):ifany(kwinsql.upper()forkwinINSERT UPDATE DELETE DROP ALTER CREATE.split()):return禁止写操作connsqlite3.connect(:memory:)forsinDB_INIT.strip().split(;):ifs.strip():conn.execute(s)try:rowsconn.execute(sql).fetchall()conn.close()returnjson.dumps(rows,ensure_asciiFalse)ifrowselse无数据exceptExceptionase:conn.close()returnf错误:{e}def_tcount(text):cnsum(\u4e00c\u9fffforcintext)returnf中文{cn}英文{len(text.split())}总{len(text)}TOOLS{calc:(_tcalc,计算器。参数:表达式),time:(_ttime,当前时间。无参数),weather:(_tweather,天气。参数:城市名),knowledge:(_tknowledge,知识搜索。参数:关键词),db:(_tdb,数据库查询。参数:SQL),count:(_tcount,字数统计。参数:文本),}PROMPTlambdatools_desc:f你是工具助手。可用工具:{tools_desc}按格式回复二选一: Thought: 思考 Action: 工具名 Action Input: 参数 Thought: 思考 Final Answer: 最终回复 规则:一次一工具,可连用defrun(q,steps6):clientLLMClient(providerglm)desc\n.join(f-{n}:{d}forn,(_,d)inTOOLS.items())convof问题:{q}\nlog[]print(f\n ❓{q})foriinrange(steps):rclient.chat(convo,system_promptPROMPT(desc),temperature0.3,max_tokens500)ifFinal Answer:inr:ar.split(Final Answer:)[1].strip()print(f\n ✅{a})print(f 调用{len(log)}次:{-.join(log)})returna actinpNoneforlineinr.split(\n):lline.strip()ifl.startswith(Action:):actl[7:].strip()ifl.startswith(Action Input:):inpl[13:].strip()ifnotactoractnotinTOOLS:print( ⚠️ 无效调用);returnr log.append(act)print(f\n Step{i1}:{act})obsTOOLS[act][0](inp)ifinpelseTOOLS[act][0]()print(f {str(obs)[:100]})convof\nThought:执行了{act}\nObservation:{obs}\nreturn超限if__name____main__:fort,qin[(单工具,北京天气),(组合,产品平均价?),(多步,搜python知识,统计字数,报时)]:print(f\n{*40}\n{t}\n{*40})run(q)print(\n完成)上面的代码是核心代码完整代码请评论区留言领取运行方式cdday15_code pipinstall-rrequirements.txt python multi_tool_agent.py预期输出截选 多工具 AgentAI 自主选择工具 可用工具6个 - calculate - get_time - get_weather - search_knowledge - query_database - count_words 实战2数据库查询 计算 ❓ 问题数据库里所有产品的平均价格是多少帮我算一下 Step 1调用 query_database 结果[[1, 编程教程, 99.0, 500], [2, 智能客服, 9999.0, 50], ...] Step 2调用 calculate 结果计算结果(99999929925000)/4 8849.25 ✅ 最终回答数据库中4个产品的平均价格为8849.25元。 共调用了 2 次工具query_database → calculate 实战3知识搜索 字数统计 时间 ❓ 问题帮我搜索一下 Python 的知识然后统计这段知识的字数... Step 1调用 search_knowledge 结果Python 是一种高级编程语言由 Guido van Rossum... Step 2调用 count_words 结果中文字数32英文单词8总字符78 Step 3调用 get_time 结果2024年07月15日 01:00:00 星期一 ✅ 最终回答Python知识已搜索32个中文字现在是7月15日星期一。 共调用了 3 次工具search_knowledge → count_words → get_time四、代码拆解工具调用链实战3 展示了 Agent 的核心价值——自主规划工具调用链搜Python知识 → 统计字数 → 告诉我时间 AI 自主规划 Step 1: search_knowledge(python) → 拿到知识文本 Step 2: count_words(知识文本) → 统计字数 Step 3: get_time() → 获取时间 Final: 综合三个结果回答人不需要写调用顺序AI 自己想出来的。关键设计工具日志追踪tool_log.append(action)print(f 共调用了{len(tool_log)}次工具{ → .join(tool_log)})每次调用工具都记入日志最终输出调用链。这让你能看到 AI 的思考路径方便调试。关键设计内存数据库connsqlite3.connect(:memory:)query_database工具用:memory:创建内存数据库每次调用都重新建表填数据。好处是无需外部文件坏处是每次都是全新数据。真实场景改为连接持久化数据库即可。 本篇成本透明栏项目数值API 调用次数9-12 次3个问题每个2-4步消耗 Token约 15,000 tokens成本¥0GLM-4.7-Flash 永久免费免费额度是否够✅ 够用商用估算¥0GLM/ 约¥0.03DeepSeek/ 约¥0.05Qwen练手改造题改造 1基础加一个翻译工具和汇率查询工具让 Agent 能回答100美元等于多少人民币。提示exchange_rate工具返回模拟汇率如1美元7.2人民币Agent 自动计算。改造 2进阶加并行调用支持——当问题需要两个不相关的工具时如北京天气和上海天气Agent 能一次调用两个。提示在system_prompt中允许Action: [tool1, tool2]格式代码解析列表并行执行。改造 3挑战加工具调用预算——限制每个问题最多调用 N 次工具超过预算时 AI 必须用已有信息回答。提示max_steps参数已有改为在 system_prompt 中告知预算让 AI 在预算内规划。往期回顾Day 01 · 为什么 2026 年办公自动化得“AI 化“了Day 02 · 环境搭建一套装备打天下Day 03 · Prompt 工程 5 大心法Day 04 · LLM API 横评 已被AI编程社区收录Day 05 · 让 AI 输出结构化数据告别“偶尔给你一段散文“Day 06 · Excel AI让电子表格变“聪明“Day 07 · Word AI自动生成文档Day 08 · PDF 智能提取让 AI 读懂合同、发票、简历Day 09 · PPT 自动生成文字大纲变演示文稿Day 10 · 邮件 AI智能分类与自动回复Day 11 · 自然语言查数据库NL2SQLDay 12 · 可视化 AI让 AI 帮你选图表Day 13 · AI 爬虫浅版LLM 提取结构化数据Day 14 · 从 Function Calling 到 ReAct Agent下期预告Day 16 · 长任务与记忆让 Agent 记住上下文Agent 会用工具了但每次对话都是失忆状态。明天给 Agent 加上记忆——短时记忆对话历史和长时记忆文件持久化让它记住你说过的信息。 资源与工具文末合规集中ReAct 论文https://arxiv.org/abs/2210.03629SQLite Python 文档https://docs.python.org/3/library/sqlite3.html智谱 GLM 模型文档https://docs.bigmodel.cn/智谱开放平台免费 API Keyhttps://open.bigmodel.cn/本专栏配套代码CSDN 下载区每篇更新 作者的话梅雅达编程笔记专注 Python AI 办公自动化实战教程。6 个工具的 Agent 已经能做不少事了。关键不是工具数量而是 AI 能自主规划调用路径。你给它一个复杂问题它自己拆解、分步、组合——这就是 Agent 和普通脚本的区别。专栏「AI Python 系列」第 01 栏 · AI办公自动化「AI Python 系列」第 02 栏 · AI数据可视化「AI Python 系列」第 03 栏 · AIPython 爬虫实战「AI Python 系列」第 05 栏 · AI Agent实战资源领取关注作者获取本栏完整代码和数据集原创声明本文为梅雅达编程笔记原创作品未经允许不得转载。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价