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

让我们创建一个自定义的数学计算工具。

首先,在你的项目目录中创建my_calculator_tool.py
代码实现

# my_calculator_tool.py
import ast
import operator
import math
from hello_agents import ToolRegistrydef my_calculate(expression: str) -> str:"""简单的数学计算函数"""if not expression.strip():return "计算表达式不能为空"# 支持的基本运算operators = {ast.Add: operator.add,      # +ast.Sub: operator.sub,      # -ast.Mult: operator.mul,     # *ast.Div: operator.truediv,  # /}# 支持的基本函数functions = {'sqrt': math.sqrt,'pi': math.pi,}try:node = ast.parse(expression, mode='eval')result = _eval_node(node.body, operators, functions)return str(result)except:return "计算失败,请检查表达式格式"def _eval_node(node, operators, functions):"""简化的表达式求值"""if isinstance(node, ast.Constant):return node.valueelif isinstance(node, ast.BinOp):left = _eval_node(node.left, operators, functions)right = _eval_node(node.right, operators, functions)op = operators.get(type(node.op))return op(left, right)elif isinstance(node, ast.Call):func_name = node.func.idif func_name in functions:args = [_eval_node(arg, operators, functions) for arg in node.args]return functions[func_name](*args)elif isinstance(node, ast.Name):if node.id in functions:return functions[node.id]def create_calculator_registry():"""创建包含计算器的工具注册表"""registry = ToolRegistry()# 注册计算器函数registry.register_function(name="my_calculator",description="简单的数学计算工具,支持基本运算(+,-,*,/)和sqrt函数",func=my_calculate)return registry

代码实现

# test_my_calculator.py
from dotenv import load_dotenv
from my_calculator_tool import create_calculator_registry# 加载环境变量
load_dotenv()def test_calculator_tool():"""测试自定义计算器工具"""# 创建包含计算器的注册表registry = create_calculator_registry()print("🧪 测试自定义计算器工具\n")# 简单测试用例test_cases = ["2 + 3",           # 基本加法"10 - 4",          # 基本减法"5 * 6",           # 基本乘法"15 / 3",          # 基本除法"sqrt(16)",        # 平方根]for i, expression in enumerate(test_cases, 1):print(f"测试 {i}: {expression}")result = registry.execute_tool("my_calculator", expression)print(f"结果: {result}\n")def test_with_simple_agent():"""测试与SimpleAgent的集成"""from hello_agents import HelloAgentsLLM# 创建LLM客户端llm = HelloAgentsLLM()# 创建包含计算器的注册表registry = create_calculator_registry()print("🤖 与SimpleAgent集成测试:")# 模拟SimpleAgent使用工具的场景user_question = "请帮我计算 sqrt(16) + 2 * 3"print(f"用户问题: {user_question}")# 使用工具计算calc_result = registry.execute_tool("my_calculator", "sqrt(16) + 2 * 3")print(f"计算结果: {calc_result}")# 构建最终回答final_messages = [{"role": "user", "content": f"计算结果是 {calc_result},请用自然语言回答用户的问题:{user_question}"}]print("\n🎯 SimpleAgent的回答:")response = llm.think(final_messages)for chunk in response:passprint("\n")if __name__ == "__main__":test_calculator_tool()test_with_simple_agent()
http://www.jsqmd.com/news/791853/

相关文章:

  • 109.YOLOv8底层逻辑拆解:TaskAlignedAssigner正负样本分配+推理流程数学化
  • 26年湛江一中高一期中考试第19题
  • Taotoken多模型聚合平台为开发者提供稳定高效的模型调用服务
  • GRT 深度解剖:单芯片雷达基础模型的全栈技术图谱
  • JoyCon-Driver:在Windows上使用Switch手柄的终极完整指南
  • 告别网盘限速:LinkSwift网盘直链下载助手使用指南
  • 如何查询昂首资本ASIC监管证明真假(5分钟自查版) - CFDMKting
  • 终极解决方案:如何彻底解锁网易云音乐灰色歌曲
  • Java学习第四周博客
  • 别再手动拷贝文件了!HBuilder云打包APK的两种高效工作流对比(本地嵌入 vs. 远程URL)
  • QMC音频转换工具终极指南:快速免费解锁加密音乐文件
  • Blue Archive自动脚本:Mumu模拟器检测问题终极解决指南
  • 深入剖析`ReentrantReadWriteLock`源码——虚拟线程时代机遇、挑战与演进
  • AcFun视频离线保存:3个关键场景下的智能下载解决方案
  • 111.YOLOv1手动复现完整代码,从网络定义到NMS后处理
  • Python: Condition Variable Pattern
  • LinkSwift:八大网盘直链下载终极解决方案,告别客户端束缚
  • 2025届毕业生推荐的六大降AI率神器解析与推荐
  • LinkSwift:免费网盘直链下载的完整解决方案
  • WPS-Zotero插件终极指南:5步实现科研写作效率翻倍的完整教程
  • 从LTE到5G NR:同步信号设计演进全解析,SSB为何是性能提升的关键
  • 2026淮北干洗店大测评,权威排名帮你省心选优店! - GrowthUME
  • DLSS Swapper深度解析:游戏性能优化利器实战指南
  • 5步优化DXVK配置:告别游戏卡顿与兼容性问题
  • 5.6 springboot项目配置
  • 抖音评论数据采集神器:3分钟零代码获取完整评论数据
  • NPYViewer终极指南:如何5分钟快速可视化NumPy数组数据
  • 长期使用Taotoken平台对于模型选型决策效率的实际影响
  • LinkSwift:九大网盘直链下载,告别限速烦恼
  • 从Eclipse转战IDEA?这份无缝迁移指南和习惯养成清单请收好