agent tool 代码修复

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.md2. 代码修改查看接口函数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]修改1from 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[{i1}] {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?vRwH2UzC2rIo