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

agent tool 代码修复

1. 原始代码

https://github.com/datawhalechina/hello-agents/blob/main/docs/chapter4/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E6%99%BA%E8%83%BD%E4%BD%93%E7%BB%8F%E5%85%B8%E8%8C%83%E5%BC%8F%E6%9E%84%E5%BB%BA.md

2. 代码修改

查看接口函数:

import serpapi print(dir(serpapi))

['APIKeyNotProvided', 'Client', 'HTTPClient', 'HTTPConnectionError', 'HTTPError', 'SearchIDNotProvided', 'SerpApiError', 'SerpResults', 'TimeoutError', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'account', 'core', 'exceptions', 'http', 'locations', 'models', 'requests', 'search', 'search_archive', 'textui']

修改1:

from serpapi import SerpApiClient

改为:

from serpapi import search

整个代码修改后:

from dotenv import load_dotenv # 加载 .env 文件中的环境变量 load_dotenv() import os from serpapi import search from typing import Dict, Any def web_search(query: str) -> str: """ 一个基于SerpApi的实战网页搜索引擎工具。 它会智能地解析搜索结果,优先返回直接答案或知识图谱信息。 """ print(f"🔍 正在执行 [SerpApi] 网页搜索: {query}") try: api_key = os.getenv("SERPAPI_API_KEY") if not api_key: return "错误:SERPAPI_API_KEY 未在 .env 文件中配置。" params = { "engine": "google", "q": query, "api_key": api_key, "gl": "cn", # 国家代码 "hl": "zh-cn", # 语言代码 } results = search(params) # results = client.get_dict() # print("result:",results[:500]) # 只打印前 500 字符 # 智能解析:优先寻找最直接的答案 if "answer_box_list" in results: return "\n".join(results["answer_box_list"]) if "answer_box" in results and "answer" in results["answer_box"]: return results["answer_box"]["answer"] if "knowledge_graph" in results and "description" in results["knowledge_graph"]: return results["knowledge_graph"]["description"] if "organic_results" in results and results["organic_results"]: # 如果没有直接答案,则返回前三个有机结果的摘要 snippets = [ f"[{i+1}] {res.get('title', '')}\n{res.get('snippet', '')}" for i, res in enumerate(results["organic_results"][:3]) ] return "\n\n".join(snippets) return f"对不起,没有找到关于 '{query}' 的信息。" except Exception as e: return f"搜索时发生错误: {e}" from typing import Dict, Any class ToolExecutor: """ 一个工具执行器,负责管理和执行工具。 """ def __init__(self): self.tools: Dict[str, Dict[str, Any]] = {} def registerTool(self, name: str, description: str, func: callable): """ 向工具箱中注册一个新工具。 """ if name in self.tools: print(f"警告:工具 '{name}' 已存在,将被覆盖。") self.tools[name] = {"description": description, "func": func} print(f"工具 '{name}' 已注册。") def getTool(self, name: str) -> callable: """ 根据名称获取一个工具的执行函数。 """ return self.tools.get(name, {}).get("func") def getAvailableTools(self) -> str: """ 获取所有可用工具的格式化描述字符串。 """ return "\n".join([ f"- {name}: {info['description']}" for name, info in self.tools.items() ]) # --- 工具初始化与使用示例 --- if __name__ == '__main__': # 1. 初始化工具执行器 toolExecutor = ToolExecutor() # 2. 注册我们的实战搜索工具 search_description = "一个网页搜索引擎。当你需要回答关于时事、事实以及在你的知识库中找不到的信息时,应使用此工具。" toolExecutor.registerTool("Search", search_description, web_search) # 3. 打印可用的工具 print("\n--- 可用的工具 ---") print(toolExecutor.getAvailableTools()) # 4. 智能体的Action调用,这次我们问一个实时性的问题 print("\n--- 执行 Action: Search['英伟达最新的GPU型号是什么'] ---") tool_name = "Search" tool_input = "英伟达最新的GPU型号是什么" tool_function = toolExecutor.getTool(tool_name) if tool_function: observation = tool_function(tool_input) print("--- 观察 (Observation) ---") print(observation) else: print(f"错误:未找到名为 '{tool_name}' 的工具。")

测试日志:

工具 'Search' 已注册。 --- 可用的工具 --- - Search: 一个网页搜索引擎。当你需要回答关于时事、事实以及在你的知识库中找不到的信息时,应使用此工具。 --- 执行 Action: Search['英伟达最新的GPU型号是什么'] --- 🔍 正在执行 [SerpApi] 网页搜索: 英伟达最新的GPU型号是什么 --- 观察 (Observation) --- [1] 比较GeForce 系列最新一代显卡和前代显卡| NVIDIA 比较最新一代RTX 30 系列显卡和前代的RTX 20 系列、GTX 10 和900 系列显卡。查看规格、功能、技术支持等内容。 [2] GeForce RTX 50 系列显卡 GeForce RTX™ 50 系列GPU 搭载NVIDIA Blackwell 架构,为游戏玩家和创作者带来全新玩法。RTX 50 系列具备强大的AI 算力,带来升级体验和更逼真的画面。 [3] NVIDIA H200 GPU NVIDIA H200 採用NVIDIA Hopper 架構,是第一款能以每秒4.8 TB 的速度提供141 GB HBM3e 記憶體的GPU,容量幾乎是NVIDIA H100 GPU 的兩倍,記憶體頻寬則提升1.4 倍。H200 更大 ...

3. 测试代码

from serpapi import search import os from dotenv import load_dotenv load_dotenv() def perform_search(query: str) -> dict: result = search({ "engine": "google", "q": query, "api_key": os.getenv("SERPAPI_API_KEY") }) return result # 使用示例 results = perform_search("Python type hints") # 只打印前几个搜索结果,避免输出过大 for idx, item in enumerate(results.get("organic_results", [])): if idx >= 5: break print(f"标题: {item.get('title')}") print(f"链接: {item.get('link')}") print("-" * 60)

日志:

标题: typing — Support for type hints 链接: https://docs.python.org/3/library/typing.html ------------------------------------------------------------ 标题: Why Type Hinting Sucks! : r/Python 链接: https://www.reddit.com/r/Python/comments/10zdidm/why_type_hinting_sucks/ ------------------------------------------------------------ 标题: Type Hints in Python 链接: https://www.geeksforgeeks.org/python/type-hints-in-python/ ------------------------------------------------------------ 标题: Python Types Intro 链接: https://fastapi.tiangolo.com/python-types/ ------------------------------------------------------------ 标题: Python Tutorial: Type Hints - From Basic Annotations to ... 链接: https://www.youtube.com/watch?v=RwH2UzC2rIo
http://www.zskr.cn/news/1403337.html

相关文章:

  • 淄博各区黄金回收门店全覆盖实测:张店淄川博山周村临淄桓台,六家正规店一文讲透 - 润富黄金珠宝行
  • 全网小说下载终极指南:novel-downloader 让你轻松保存心爱小说
  • 2026年顶尖8款AI简历工具深度评测:告别盲投,直击HR心坎的秘籍
  • 终极Windows OCR文字识别方案:Text Grab四大模式让屏幕文字无处可逃
  • 邯郸市2026年5月黄金回收避坑指南:高位金价下如何守住自己的钱袋子? - 润富黄金珠宝行
  • 一份 Agent 工程岗 JD,暴露了市场真正想要什么样的人
  • 突破传统农业监控瓶颈:ESP32边缘计算实战指南
  • 2026年5月济南黄金回收市场解析 附正规变现渠道汇总 - 润富黄金珠宝行
  • 如何轻松探索本地大语言模型的无限可能:llama-cpp-python实践指南
  • 从不确定性到确定性:切比雪夫、大数定律与中心极限定理的工程实践指南
  • 【具身智能】校招求职群
  • Python路径操作实战:巧用glob.glob()与os.path.join()实现高效文件定位与组装
  • ChatGPT生日派对创意终极验证:在14个国家实测后,这5种结构化提示词转化率超行业均值3.8倍
  • 2026年国内主流的智能语音机器人评测:五款高实用性方案深度解析 - 品牌2025
  • 3大核心功能彻底清理macOS:Pearcleaner免费开源磁盘优化指南
  • 全国DHR数字化系统供应商排行:5家头部品牌实测对比
  • [特殊字符] 你的论文重复率有多高?用这个免费工具3分钟就能知道
  • 冰雪传奇点卡版官网:特色单职业多流派玩法解锁多样冰雪冒险体验
  • 初创公司如何利用Taotoken管理多个AI项目的API成本
  • 2026年手机Word转PDF怎么操作?手把手教你3种方法,新手也能秒上手
  • Unity新手村速成:5分钟搞定你的第一个森林湖泊场景(含Terrain工具详解)
  • 工业物联网通信架构选型:基于模型的MQTT、OPC UA与HTTP量化评估方法
  • AD9268 SPI配置实战:从寄存器映射到时序解析
  • Unity Recorder避坑指南:从安装到输出MP4,解决‘无法录制’和‘平台切换’的常见问题
  • 告别“密码在哪”的灵魂拷问:给开发团队一个安全的协作后花园
  • LightGlue:如何用深度学习实现实时图像特征匹配的终极指南
  • 3种Obsidian个性化主页设计方案:打造专属知识工作台
  • C语言实战:手把手教你用regex.h实现文本模式匹配与捕获
  • 基于实时演算的TSN网络确定性延迟与缓存需求分析框架
  • RevokeMsgPatcher深度解析:企业级消息保留技术与内存补丁解决方案完全手册