Callable

📅 2026/8/22 15:44:05
Callable
举例ToolRunner Callable[[dict[str, Any]], ToolResult]1. 整体作用这是Python 类型注解Type Hint给一类工具执行函数起别名ToolRunner统一约束所有工具的入参、返回值格式。意思ToolRunner 代表一个函数类型。2. 分段拆解①Callable来自标准库from typing import Callable用来描述「可调用对象」函数、lambda、带call的类实例。语法格式Callable[[参数1类型,参数2类型...],返回值类型]②[dict[str, Any]]代表函数的入参只有一个参数参数类型字典dictkey 是字符串value 任意类型③ToolResult代表函数的返回值类型是项目里自定义的数据类/TypedDict统一规定工具返回结构ToolResultdict[str,Any]④ToolRunner ...是类型别名以后代码里写ToolRunner等价于完整的Callable[[dict[str, Any]], ToolResult]简化书写。3.代码举例对照get_agent_tool(step.tool_name).run(tool_args)这里每个工具的.run方法类型就是ToolRunner调用时传参run(tool_args)→ 传入字典执行完返回result→ 是ToolResult结构示例工具类classRetrieveTool:# run 方法符合 ToolRunner 类型约束defrun(self,args:dict[str,Any])-ToolResult:# args 就是检索参数 {query:xxx, top_k:xxx}# 执行检索逻辑returnToolResult(statussuccess,data{chunks:[...]})4. 日常使用场景变量标注runner:ToolRunnerRetrieveTool().run函数参数标注defregister_tool(name:str,runner:ToolRunner):...一句话总结ToolRunner Callable[[dict[str, Any]], ToolResult]定义了一类标准工具执行函数接收单个字典参数统一返回 ToolResult 结构的函数用来约束项目里所有工具调用的统一入出参规范方便静态检查、统一工具调度逻辑。CallableCallable ≠ 单纯等于“函数”它代表「一切可以像函数一样加 () 调用执行的对象」函数只是其中最常见的一种。model.forward 这个方法本身是 Callablenn.Module 实例模型对象本身也是 Callable靠内部实现call自动调用 forward平时写 model(x) 不是直接调用 forward是走call再进 forward。在 Python 里只要你写对象(参数)解释器会**自动去执行这个对象的call魔法方法**。这是 Python 语言内置的语法约定不是 PyTorch 单独搞的设计。1. Callable 包含哪些东西只要能obj()调用都属于 Callable普通 def 定义的函数lambda 匿名函数类调用Class()会实例化类本身可调用实现了__call__方法的类实例内置函数、内置方法示例fromtypingimportCallabledeff(x):returnx1# 普通函数是 Callablea:Callable[[int],int]f# 带 __call__ 的对象也是classAdd:def__call__(self,x):returnx2b:Callable[[int],int]Add()# 类本身也可调用c:CallableAdd2. Callable 的两种写法① 不限定参数、返回值粗略标注fn:Callable只说明“这东西能调用”不限制入参、返回类型。② 精确约束参数和返回你代码里用的Callable[[dict[str,Any]],ToolResult]中括号里列表代表参数类型列表这里只有 1 个 dict 参数逗号后面函数返回值类型翻译一个可调用对象接收一个字典参数执行后返回ToolResult。3. 和普通函数注解的区别如果是一个固定函数你可以直接写defrun(args:dict)-ToolResult:...但当你要统一描述一类工具、回调、处理器不知道具体是哪个函数/哪个可调用对象就必须用Callable。就像你项目里的ToolRunner所有工具的.run()方法统一遵守一套入出参标准不管是检索工具、摘要工具、生成回答工具全都能用ToolRunner统一标注。4. 一句话区分函数只是 Callable 的子集Callable是 Python 里所有“可被 () 调用”对象的通用类型抽象。