工具系统设计:从抽象基类到 JSON Schema 的完整实现
引言工具调用Function Calling是现代 AI Agent 的核心能力。CountBot 实现了一套完整的工具系统包含 12 内置工具支持参数验证、审计日志和动态注册。本文将深入分析其设计与实现。工具抽象基类class Tool(ABC): _TYPE_MAP { string: str, integer: int, number: (int, float), boolean: bool, array: list, object: dict, } property abstractmethod def name(self) - str: ... property abstractmethod def description(self) - str: ... property abstractmethod def parameters(self) - dict[str, Any]: ... abstractmethod async def execute(self, **kwargs: Any) - str: ...设计要点使用propertyabstractmethod确保子类必须提供元数据parameters返回标准 JSON Schema与 OpenAI Function Calling 格式完全兼容execute统一返回str简化结果处理参数验证系统Tool 基类内置了递归的 JSON Schema 验证器def validate_params(self, params: dict[str, Any]) - list[str]: schema self.parameters or {} return self._validate(params, {**schema, type: object}, ) def _validate(self, val, schema, path) - list[str]: t schema.get(type) errors [] # 类型检查 if t in self._TYPE_MAP and not isinstance(val, self._TYPE_MAP[t]): return [f{label} should be {t}] # 枚举检查 if enum in schema and val not in schema[enum]: errors.append(f{label} must be one of {schema[enum]}) # 数值范围 if t in (integer, number): if minimum in schema and val schema[minimum]: errors.append(f{label} must be {schema[minimum]}) # 递归验证嵌套对象和数组 if t object: for k in schema.get(required, []): if k not in val: errors.append(fmissing required {k}) return errors这个验证器在工具执行前自动运行防止无效参数导致的运行时错误。工具注册表class ToolRegistry: def __init__(self): self._tools: dict[str, Tool] {} self._audit_enabled: bool True self._session_id: str | None None def register(self, tool: Tool) - None: if tool.name in self._tools: raise ValueError(fTool {tool.name} is already registered) self._tools[tool.name] tool def get_definitions(self) - list[dict]: 获取所有工具的 OpenAI 格式定义 return [tool.get_definition() for tool in self._tools.values()]注册表负责工具的注册/注销/查询生成 OpenAI 格式的工具定义列表管理审计日志和会话上下文统一注册入口setup.py提供了统一的工具注册函数def register_all_tools(workspace, command_timeout30, ...) - ToolRegistry: tools ToolRegistry() # 1. 文件系统工具 tools.register(ReadFileTool(workspace)) tools.register(WriteFileTool(workspace)) tools.register(EditFileTool(workspace)) tools.register(ListDirTool(workspace)) # 2. Shell 工具 tools.register(ExecTool(workspace, timeoutcommand_timeout)) # 3. Web 工具条件注册 if brave_api_key: tools.register(WebSearchTool(api_keybrave_api_key)) tools.register(WebFetchTool()) # 4. 子代理工具条件注册 if subagent_manager: tools.register(SpawnTool(subagent_manager)) # 5. 记忆工具、截图工具、文件搜索工具... return tools条件注册模式确保只有配置了必要依赖的工具才会被注册。内置工具一览工具名类功能read_fileReadFileTool读取文件内容write_fileWriteFileTool写入文件edit_fileEditFileTool编辑文件按文本或行号list_dirListDirTool列出目录内容execExecTool执行 Shell 命令web_fetchWebFetchTool抓取网页内容spawnSpawnTool生成子代理screenshotScreenshotTool屏幕截图file_searchFileSearchTool文件内容搜索memory_write/search/readMemory*Tool记忆读写搜索send_mediaSendMediaTool发送媒体到渠道工作空间沙箱文件系统工具通过WorkspaceValidator实现路径沙箱class WorkspaceValidator: def __init__(self, workspace: Path, restrict_to_workspace: bool True): self._workspace workspace.resolve() self._restrict restrict_to_workspace def validate_path(self, path: str) - Path: resolved (self._workspace / path).resolve() if self._restrict and not str(resolved).startswith(str(self._workspace)): raise ValueError(f路径 {path} 超出工作空间范围) return resolved这确保 AI Agent 无法访问工作空间之外的文件是安全设计的关键一环。工具定义生成每个工具通过get_definition()生成 OpenAI 兼容的函数定义def get_definition(self) - dict[str, Any]: return { type: function, function: { name: self.name, description: self.description, parameters: self.parameters, }, }这些定义会被传递给 LLM让 LLM 了解可用的工具及其参数格式。总结CountBot 的工具系统展示了如何构建一个类型安全、可扩展、安全可控的 AI 工具框架。通过 ABC 定义接口、JSON Schema 描述参数、注册表管理生命周期、沙箱保障安全形成了一套完整的工具管理方案。学习资源推荐如果你想更深入地学习大模型以下是一些非常有价值的学习资源这些资源将帮助你从不同角度学习大模型提升你的实践能力。一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取四、AI大模型商业化落地方案作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。

相关新闻

写作压力小了!AI论文软件 千笔 VS 笔捷Ai,专为本科生打造!

写作压力小了!AI论文软件 千笔 VS 笔捷Ai,专为本科生打造!

随着人工智能技术的迅猛迭代与普及,AI辅助写作工具已逐步渗透到高校学术写作场景中,成为本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生,开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时&#xf…

2026/7/8 2:55:46 阅读更多 →
真的太省时间!千笔·降AIGC助手,专科生专属降AI率神器

真的太省时间!千笔·降AIGC助手,专科生专属降AI率神器

在AI技术迅速渗透学术写作领域的今天,越来越多的专科生开始借助AI工具提升论文写作效率。然而,随着知网、维普、万方等查重系统不断升级算法,以及Turnitin对AIGC内容的识别愈发严格,如何有效降低AI率和重复率成为摆在学生面前的一…

2026/7/6 20:54:25 阅读更多 →
用Accelerate库三行代码搞定PyTorch分布式训练:从工程噩梦到生产级范式重构

用Accelerate库三行代码搞定PyTorch分布式训练:从工程噩梦到生产级范式重构

用Accelerate库三行代码搞定PyTorch分布式训练:从工程噩梦到生产级范式重构 文章目录用Accelerate库三行代码搞定PyTorch分布式训练:从工程噩梦到生产级范式重构一、分布式训练:从“硬件堆叠”到“抽象重构”二、什么是Accelerate&#xff1f…

2026/7/7 4:37:38 阅读更多 →

最新新闻

C#上位机项目实战——启动、停止按钮界面设计

C#上位机项目实战——启动、停止按钮界面设计

前言 上位机软件开发中启动和停止按钮几乎是每个上位机软件必须具备的功能,使用传统winform开发时如果仅仅给Button按钮添加文本作为启动和停止按钮,这样会让上位机软件界面开起来很丑,本文就来讲解一种美化启动、停止按钮界面的方法&#x…

2026/7/8 2:55:41 阅读更多 →
PyTorch 2.3 张量 vs NumPy 数组:5个关键差异与性能实测

PyTorch 2.3 张量 vs NumPy 数组:5个关键差异与性能实测

PyTorch 2.3 张量 vs NumPy 数组:5个关键差异与性能实测在深度学习与科学计算领域,PyTorch张量和NumPy数组作为两种核心数据结构,经常被开发者交替使用。然而,它们的设计哲学和应用场景存在本质区别。本文将深入剖析两者的5个关键…

2026/7/8 2:53:37 阅读更多 →
2026年最新命理排盘软件推荐:命理软件怎么选?八字、AI提示词和多盘复盘要分清

2026年最新命理排盘软件推荐:命理软件怎么选?八字、AI提示词和多盘复盘要分清

很多人搜索“命理排盘软件推荐”或者“命理软件推荐”,其实需求并不完全一样。有的人只是想排一个八字盘,有的人想看紫微斗数,有的人想查六爻、合盘、择日、罗盘,也有人刚入门,看不懂十神、五行、大运流年,…

2026/7/8 2:51:33 阅读更多 →
Zvec:阿里巴巴开源的轻量级进程内向量数据库

Zvec:阿里巴巴开源的轻量级进程内向量数据库

Zvec:阿里巴巴开源的轻量级进程内向量数据库 核心观点 Zvec 是阿里巴巴开源的进程内(in-process)向量数据库,定位轻量、极速、零配置,可直接嵌入应用程序运行。经阿里集团内部生产环境验证,支持低延迟、可…

2026/7/8 2:47:33 阅读更多 →
ResNet-18/34/50/101/152 五款架构 CIFAR-10 训练实测:从 56 层到 1202 层的性能拐点分析

ResNet-18/34/50/101/152 五款架构 CIFAR-10 训练实测:从 56 层到 1202 层的性能拐点分析

ResNet-18/34/50/101/152 五款架构 CIFAR-10 训练实测:从 56 层到 1202 层的性能拐点分析深度残差网络(ResNet)自2015年问世以来,已成为计算机视觉领域的里程碑式工作。何恺明团队提出的残差学习框架,通过引入跨层连接…

2026/7/8 2:45:32 阅读更多 →
SQL 语句从基础到高级

SQL 语句从基础到高级

SQL(Structured Query Language,结构化查询语言)是关系型数据库的标准操作语言,适用于 MySQL、Oracle、SQL Server、PostgreSQL 等主流数据库。本文将由浅入深,从基础语法、核心操作、进阶查询到高级特性、实战优化&am…

2026/7/8 2:45:32 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻