当前位置: 首页 > news >正文

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 SQLDatabase

from langchain_openai import ChatOpenAI

from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit

from langchain.agents import create_agent

from dotenv import load_dotenv

from langchain_core.prompts import SystemMessagePromptTemplate

from prompt import PROMPT_TEMPLATE

load_dotenv("../.env")

db = SQLDatabase.from_uri("sqlite:///test.db")

llm = ChatOpenAI(model='qwen-plus', temperature=0)

toolkit = SQLDatabaseToolkit(db=db, llm=llm)

system_message =

SystemMessagePromptTemplate.from_template(PROMPT_TEMPLATE).format(dialect="SQLite", top_k=5) # PROMPT_TEMPLATE见代码仓库

agent = create_agent(llm, toolkit.get_tools(), system_prompt=system_message)

example_query = "Alice购买了哪些商品"

events = agent.stream(

{"messages": [("user", example_query)]},

stream_mode="values",

)

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')

@tool

def calculate(expression):

'''

calculate an expression

'''

return eval(expression)

llm = ChatOpenAI(model='qwen-plus', temperature=0)

agent = create_agent(

model = llm,

tools = [calculate]

)

example_query = "帮我计算(1234 * 56) % 11"

events = agent.stream(

{"messages": [("user", example_query)]},

stream_mode="values",

)

for event in events:

event["messages"][-1].pretty_print()

http://www.jsqmd.com/news/1249210/

相关文章:

  • 2026 杭州奢侈品回收探店实测,避坑干货 + 正规门店全汇总 - 奢侈品回收机构参考
  • B+Tree深度剖析: 高度为3的B+Tree能存多少条MySQL数据?(含计算过程)
  • CNN-Mamba-UNet融合架构在医学图像分割中的创新应用
  • 2026潍坊不锈钢风机厂家哪家好,大尺寸风机厂家推荐怎么选?源头厂家推荐与实用选购指南 - mobible
  • 文件归档统一管理软件的选型困境:功能越全,落地越难
  • DailyTech-20260722
  • MCP与Skill技术:AI任务执行的革命性突破
  • 数据库设计:从单机到分布式
  • 2026在线考试平台搭建服务商前十到底有谁在啊?
  • 【2027最新】基于SpringBoot+Vue的协同过滤电影推荐系统管理系统源码+MyBatis+MySQL
  • 大厂HR面被问拿到国内其他 Offer?用竞品梯队比较话术得体回应「蒸汽求职分享」
  • 同城O2O系统开发实践:本地生活服务如何提升匹配、调度与履约效率
  • 麒麟信安“一云多芯”信创云桌面解决方案入围2020年信息技术应用创新解决方案典型案例名单
  • 迪奥包包回收2026年保定须知 毓典寄卖行本地奢侈品回收门店 - 毓典寄卖行
  • 山东平价风机厂家推荐,镀铝锌风机厂家哪家好?2026避坑指南:4个坑+5条硬标准,帮你选对不花冤枉钱 - mobible
  • docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...
  • Spring Boot启动过程: 从new SpringApplication到run(),这中间到底发生了什么?
  • 【单片机毕业设计推荐】 基于 STM32 或 51 单片机的智能感应自动门控制系统设计与实现,基于 STM32 或 51 单片机的带人数统计功能智能门禁装置设计(012403)
  • 零基础自学攻防 11 大步骤,网络安全新手入门至精通全方位干货分析,学习网安留存这一篇即可
  • IPv6相关知识(smb/ssh/scp/浏览器访问)及碰到的坑
  • 国产军事仿真平台如何突破AFSIM二次开发与分布式仿真瓶颈 - 品研笔录
  • 塑料挤出制杯一体化设备怎么选?别只看参数,先搞清工艺匹配、成本结构和交付边界 - 中国品牌价值观察网
  • openwrt软路由(x86-64 koolshare mod)下利用Docker部署guacamole
  • 集团数据质量管控体系建设(数据治理)
  • 下载软件 (三) openocd 的编译
  • 从技术层级角度看多链路聚合通信技术
  • TM4C129LNCZAD UART识别寄存器与QSSI模块深度解析与实战
  • Agentic AI、AI Agent、AI 工作流有什么区别?
  • 为什么提示没有changid?
  • 基于ThreeJs的一些开源地图项目