7.3 工具类型与能力框架《AI智能体应用开发》
AI智能体应用开发 鲍亮崔江涛李倩范涛 清华大学出版社【行情 报价 价格 评测】-京东《AI智能体应用开发》1~6章试读-CSDN博客在7.1节和7.2节中我们系统地阐述了智能体工具能力的概念、核心机制与重要性为其勾勒了一幅宏观的理论蓝图。然而要真正驾驭这项能力我们需要从抽象走向具体从理论走向实践。本章将带领读者深入智能体的“工具箱”通过具体的、可运行的实例拆解不同类型的工具如何被集成与调用从而构建起一个直观的能力框架。本节假设读者拥有大模型调用的基础知识。为了方便且专业地演示这些实例我们将选用LangChain[2]这一广泛使用的开源框架。LangChain并非唯一选择但它为智能体与工具的集成提供了层次清晰、模块化的优秀抽象极大地简化了将大语言模型与外部能力组合在一起的过程。在本章中我们使用LangChain的目的在于快速、规范地构建一个具备工具调用能力的智能体原型并以其为标准范例阐释工具集成的通用模式和内在原理。我们将重点分析两类基础但至关重要的工具信息获取类以数据库为例和推理与计算类数值计算与代码执行。7.3.1 数据库在许多实际应用场景中智能体需要与组织的核心数据资产—数据库进行交互。例如一个客户服务智能体可能需要查询订单状态一个数据分析智能体可能需要汇总销售报表一个内部管理智能体可能需要检索员工信息。让智能体直接、安全地查询数据库可以使其回答基于真实、最新的业务数据价值巨大。为了演示我们假设一个简化的电商业务数据库test.db使用SQLite3作为数据库包含如图7-1所示的表结构。图7-1 数据库ER图代码清单7.1展示了如何使用LangChain构建一个能够理解自然语言问题并生成正确SQL查询的数据库查询智能体。为了缩小代码占用的篇章7.3.2节及之后的代码依赖引入部分略去详细的代码可以参考本书之后提供的代码仓库。代码清单7.1数据库工具调用实例from langchain_community.utilities.sql_database import SQLDatabasefrom langchain_openai import ChatOpenAIfrom langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkitfrom langchain.agents import create_agentfrom dotenv import load_dotenvfrom langchain_core.prompts import SystemMessagePromptTemplatefrom prompt import PROMPT_TEMPLATEload_dotenv(../.env)db SQLDatabase.from_uri(sqlite:///test.db)llm ChatOpenAI(modelqwen-plus, temperature0)toolkit SQLDatabaseToolkit(dbdb, llmllm)system_message SystemMessagePromptTemplate.from_template(PROMPT_TEMPLATE).format(dialectSQLite, top_k5) # PROMPT_TEMPLATE见代码仓库agent create_agent(llm, toolkit.get_tools(), system_promptsystem_message)example_query Alice购买了哪些商品events agent.stream({messages: [(user, example_query)]},stream_modevalues,)for event in events:event[messages][-1].pretty_print()代码首先进行了工具封装SQLDatabaseToolkit是关键组件它将数据库操作封装成智能体可理解和调用的工具。根据LangChain的SQLDatabaseToolkit文档[3]说明它提供了InfoSQLDatabaseTool、ListSQLDatabaseTool、QuerySQLCheckerTool、QuerySQLDatabaseTool分别用于获取数据库元信息、列出数据库包含的表格、检查SQL的正确性、查询数据库。执行流程如表7-1所示。上述流程稍微有些复杂从上述智能体执行流程可以看出智能体在面对用户查询时展现了一套完整、结构化的问题解决路径。整个过程体现了其自主决策、分步验证与高效执行的特点。1. 问题理解与目标拆解智能体首先明确用户查询意图—“Alice购买了哪些商品”并将其转化为从数据库中检索的具体任务而非直接尝试猜测或简单回应。2. 环境探查与信息获取智能体没有立即编写查询而是先通过工具理清数据库结构。3. 方案生成与安全验证在理解表结构后智能体主动构建SQL查询语句并进行语法和逻辑检查。这一步体现了其在执行前的谨慎态度避免无效或危险查询提升系统安全性与可靠性。4. 执行查询与结果整合确认查询无误后智能体执行查询获取原始结果[(Laptop,), (Phone,)]并将其转化为用户友好的表述形式清晰列出商品名称。5. 闭环输出与任务完成最终智能体以清晰条目形式总结答案响应用户初始问题完成交互闭环。最后请注意数据库是核心业务系统其访问必须受到最严格的限制对于可能更改数据库内容的权限强烈建议不要配置到工具中否则可能会导致数据库内容发生不预期的变更仅授予查询的权限即可。7.3.2 数值计算大语言模型处理数学问题依赖于其在训练数据中见过的数字模式和计算“印象”本质上是一种基于统计的“估算”而非精确计算。对于简单算术可能有效但对于复杂表达式、金融计算或科学计算其出错概率极高。因此一个可靠的数值计算工具是必不可少的。代码清单7.2展示了如何创建一个最简单的自定义计算工具并将其赋予智能体。和7.3.1节不同这里使用tool装饰器自定义了一个calculate工具并且简单地使用了eval作为求值的逻辑。需要说明的是本例中直接使用eval()是极其危险的因为它会执行输入字符串中的任何有效Python代码。恶意用户可能输入“__import__(os).system(rm-rf/)”这样的指令。这只是一个为演示工具集成原理的最小化示例。一个安全的数值计算工具应该使用安全的数学表达式解析库如ast.literal_eval或专门的库如numexpr、sympy严格限制可用的运算符和函数白名单并且在沙箱环境中执行计算。一个较为详细的数值计算工具定义可以参考strands-agents的工具集[4]。由于逻辑较为简单本例不进行智能体的流程演示读者可以运行代码并观察智能体的行为。7.3.3 代码执行代码执行工具为智能体赋予了前所未有的强大能力。它允许智能体通过编写代码来解决其内部模型无法直接处理的复杂问题例如数据处理、文件操作、调用特定库函数、实现复杂算法等。这极大地扩展了智能体的行动边界使其从顾问升级为执行者。我们可以使用LangChain提供的PythonREPL工具简单地进行测试可以参考本书的代码仓库tool-example/numeric_example/repl.py。注意代码执行工具风险等级更高这允许智能体执行未经审查的代码必须配备极其严密的防护措施。我们必须在完全隔离的沙箱如Docker容器、轻量级虚拟机、或基于操作系统级别的沙箱技术中运行PythonREPL。这个环境应该无网络访问权限且与主机文件系统隔离并且也应该进行文件系统访问控制、资源限制等风险控制。代码清单7.2数值计算工具调用实例load_dotenv(../.env)tooldef calculate(expression):calculate an expressionreturn eval(expression)llm ChatOpenAI(modelqwen-plus, temperature0)agent create_agent(model llm,tools [calculate])example_query 帮我计算(1234 * 56) % 11events agent.stream({messages: [(user, example_query)]},stream_modevalues,)for event in events:event[messages][-1].pretty_print()

相关新闻

esxi不识别硬盘_ESXI安装OpenWRT amp; LEDE软路由部署指南(附镜像下载)

esxi不识别硬盘_ESXI安装OpenWRT amp; LEDE软路由部署指南(附镜像下载)

OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。一、ESX…

2026/10/4 22:51:13 阅读更多 →
TM4C129 CAN寄存器深度解析:从位时序到消息对象配置实战

TM4C129 CAN寄存器深度解析:从位时序到消息对象配置实战

1. 项目概述与CAN总线核心价值 在汽车电子、工业自动化这些对通信可靠性要求极高的领域,控制器局域网(CAN)总线几乎是工程师们的“默认选择”。它不像我们日常用的USB或者以太网那样,需要复杂的握手协议和主从结构。CAN总线更像一…

2026/10/11 1:20:01 阅读更多 →
避开行业乱象!麦通MSX告诉你选择海外服务平tai的核心标准

避开行业乱象!麦通MSX告诉你选择海外服务平tai的核心标准

随着全球化数字化服务的普及,越来越多普通人开始主动了解、接触正规海外市场服务。但伴随行业快速发展,各类服务平tai层出不穷,服务质量参差不齐、模式优劣难以分辨,很多人在选择时容易陷入迷茫,要么跟风盲从&#xff…

2026/9/27 15:17:40 阅读更多 →

最新新闻

2026年10月北京市联通宽带实测办理避坑全攻略

2026年10月北京市联通宽带实测办理避坑全攻略

上个月我翻了一下家里的宽带账单,一年算下来花了快两千块。很多人有个反常识的误区,觉得宽带资费越贵,网速就绝对越快。其实我拿着四家运营商的账单横向对比后发现,花双倍钱办的千兆宽带,实际体验甚至不如邻居办的五百…

2026/10/15 7:40:00 阅读更多 →
AVP-Loc地下车库定位方案:PCA、ICP与ESKF融合实战

AVP-Loc地下车库定位方案:PCA、ICP与ESKF融合实战

1. 从泊车场景说起:AVP-Loc到底在解决什么问题自动代客泊车(Automated Valet Parking,AVP)这个场景,说白了就是让车自己去找车位、自己停进去,全程不需要人坐在驾驶位上。听起来很美好,但真正做…

2026/10/15 7:40:00 阅读更多 →
Poppy协议:面向AI代理的身份声明与交互范式革新

Poppy协议:面向AI代理的身份声明与交互范式革新

我无法根据当前输入内容生成符合要求的博文。原因如下:输入中仅提供了项目标题“Sierra发布Poppy协议:AI代理终于不用再假装人类了”,但未提供任何实际可用的项目正文、关键词列表或摘要描述。所有后续字段(相关热搜词、最新网络热…

2026/10/15 7:40:00 阅读更多 →
FreeRTOS到Zephyr:BLE工程师迁移实战与认知重构

FreeRTOS到Zephyr:BLE工程师迁移实战与认知重构

我前前后后带团队迁移过几个 BLE 项目,从单模 Beacon 到复杂的多连接网关都有。很多工程师第一次接触 Zephyr 时,最大的感受不是“难”,而是“别扭”——明明都是写嵌入式,怎么连个 GPIO 都要过一遍设备树?这种别扭的根…

2026/10/15 7:40:00 阅读更多 →
PowerShell运行OpenClaw中文乱码?从UTF-8编码到终端配置的完整修复方案

PowerShell运行OpenClaw中文乱码?从UTF-8编码到终端配置的完整修复方案

用 PowerShell 跑 OpenClaw 中文乱码?我踩完坑之后的完整解法你大概率是刚刚把 OpenClaw 部署好,兴冲冲地在 PowerShell 里启动它,结果满屏的中文变成了一堆“锟斤拷”或者“????”——先别急着怀疑是项目的问题,更别急着重装…

2026/10/15 7:40:00 阅读更多 →
基于集群划分的分布式光伏配电网电压协调控制与Matlab实现

基于集群划分的分布式光伏配电网电压协调控制与Matlab实现

分布式光伏一多起来,配电网最先暴露问题的往往是电压。光照一强、负荷又轻的时候,馈线末端电压能一路冲到1.06甚至1.07标幺值,逆变器要么降出力、要么直接脱网保护,好好的发电量白白丢了。传统的变电站有载调压和固定电容器组又反…

2026/10/15 7:39:00 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →