pydantic_ai.tools
AgentDepsT 模块属性
AgentDepsT = TypeVar(
"AgentDepsT", default=None, contravariant=True
)
代理依赖项的类型变量。
RunContext 数据类
基类:Generic[AgentDepsT]
关于当前调用的信息。
源代码位于 pydantic_ai_slim/pydantic_ai/_run_context.py
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
SystemPromptFunc 模块属性
SystemPromptFunc: TypeAlias = (
Callable[[RunContext[AgentDepsT]], str]
| Callable[[RunContext[AgentDepsT]], Awaitable[str]]
| Callable[[], str]
| Callable[[], Awaitable[str]]
)
一个函数,它可能接受也可能不接受 RunContext
作为参数,并且可能是也可能不是异步的。
用法 SystemPromptFunc[AgentDepsT]
。
ToolFuncContext 模块属性
ToolFuncContext: TypeAlias = Callable[
Concatenate[RunContext[AgentDepsT], ToolParams], Any
]
一个将 RunContext
作为第一个参数的工具函数。
用法 ToolContextFunc[AgentDepsT, ToolParams]
。
ToolFuncPlain 模块属性
ToolFuncPlain: TypeAlias = Callable[ToolParams, Any]
一个不将 RunContext
作为第一个参数的工具函数。
用法 ToolPlainFunc[ToolParams]
。
ToolFuncEither 模块属性
ToolFuncEither: TypeAlias = (
ToolFuncContext[AgentDepsT, ToolParams]
| ToolFuncPlain[ToolParams]
)
ToolPrepareFunc 模块属性
ToolPrepareFunc: TypeAlias = Callable[
[RunContext[AgentDepsT], "ToolDefinition"],
Awaitable["ToolDefinition | None"],
]
可以在调用时准备工具定义的函数的定义。
更多信息请参见工具文档。
示例 — 此处 only_if_42
作为 ToolPrepareFunc
是有效的
from pydantic_ai import RunContext, Tool
from pydantic_ai.tools import ToolDefinition
async def only_if_42(
ctx: RunContext[int], tool_def: ToolDefinition
) -> ToolDefinition | None:
if ctx.deps == 42:
return tool_def
def hitchhiker(ctx: RunContext[int], answer: str) -> str:
return f'{ctx.deps} {answer}'
hitchhiker = Tool(hitchhiker, prepare=only_if_42)
用法 ToolPrepareFunc[AgentDepsT]
。
ToolsPrepareFunc 模块属性
ToolsPrepareFunc: TypeAlias = Callable[
[RunContext[AgentDepsT], list["ToolDefinition"]],
Awaitable["list[ToolDefinition] | None"],
]
一个函数的定义,该函数可以为每个步骤准备所有工具的定义。如果您想自定义多个工具的定义,或者想为给定步骤注册一部分工具,这将非常有用。
示例 — 此处 turn_on_strict_if_openai
作为 ToolsPrepareFunc
是有效的
from dataclasses import replace
from pydantic_ai import Agent, RunContext
from pydantic_ai.tools import ToolDefinition
async def turn_on_strict_if_openai(
ctx: RunContext[None], tool_defs: list[ToolDefinition]
) -> list[ToolDefinition] | None:
if ctx.model.system == 'openai':
return [replace(tool_def, strict=True) for tool_def in tool_defs]
return tool_defs
agent = Agent('openai:gpt-4o', prepare_tools=turn_on_strict_if_openai)
用法 ToolsPrepareFunc[AgentDepsT]
。
DocstringFormat 模块属性
DeferredToolRequests 数据类
需要批准或外部执行的工具调用。
这可以用作代理的 output_type
,如果模型调用了任何延迟工具,它将用作代理运行的输出。
结果可以通过带有相同工具调用 ID 的 DeferredToolResults
对象传递给下一个代理运行。
更多信息请参见延迟工具文档。
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
|
ToolApproved 数据类
表示一个工具调用已被批准,并且应该执行该工具函数。
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
152 153 154 155 156 157 158 159 |
|
ToolDenied 数据类
表示一个工具调用已被拒绝,并且应向模型返回一条拒绝消息。
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
162 163 164 165 166 167 168 169 170 171 |
|
DeferredToolResults 数据类
上一次运行中需要批准或外部执行的延迟工具调用的结果。
工具调用 ID 需要与上一次运行的 DeferredToolRequests
输出对象中的 ID 相匹配。
更多信息请参见延迟工具文档。
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
201 202 203 204 205 206 207 208 209 210 211 212 213 |
|
Tool 数据类
基类:Generic[AgentDepsT]
代理的工具函数。
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 |
|
__init__
__init__(
function: ToolFuncEither[AgentDepsT],
*,
takes_ctx: bool | None = None,
max_retries: int | None = None,
name: str | None = None,
description: str | None = None,
prepare: ToolPrepareFunc[AgentDepsT] | None = None,
docstring_format: DocstringFormat = "auto",
require_parameter_descriptions: bool = False,
schema_generator: type[
GenerateJsonSchema
] = GenerateToolJsonSchema,
strict: bool | None = None,
requires_approval: bool = False,
function_schema: FunctionSchema | None = None
)
创建一个新的工具实例。
用法示例
from pydantic_ai import Agent, RunContext, Tool
async def my_tool(ctx: RunContext[int], x: int, y: int) -> str:
return f'{ctx.deps} {x} {y}'
agent = Agent('test', tools=[Tool(my_tool)])
或使用自定义的 prepare 方法
from pydantic_ai import Agent, RunContext, Tool
from pydantic_ai.tools import ToolDefinition
async def my_tool(ctx: RunContext[int], x: int, y: int) -> str:
return f'{ctx.deps} {x} {y}'
async def prep_my_tool(
ctx: RunContext[int], tool_def: ToolDefinition
) -> ToolDefinition | None:
# only register the tool if `deps == 42`
if ctx.deps == 42:
return tool_def
agent = Agent('test', tools=[Tool(my_tool, prepare=prep_my_tool)])
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
function
|
ToolFuncEither[AgentDepsT]
|
作为工具调用的 Python 函数。 |
必需 |
takes_ctx
|
bool | None
|
函数是否接受 |
None
|
max_retries
|
int | None
|
此工具允许的最大重试次数,如果为 |
None
|
name
|
str | None
|
工具的名称,如果为 |
None
|
description
|
str | None
|
工具的描述,如果为 |
None
|
prepare
|
ToolPrepareFunc[AgentDepsT] | None
|
用于为每个步骤准备工具定义的自定义方法,返回 |
None
|
docstring_format
|
DocstringFormat
|
文档字符串的格式,请参见 |
'auto'
|
require_parameter_descriptions
|
bool
|
如果为 True,则在缺少参数描述时引发错误。默认为 False。 |
False
|
schema_generator
|
type[GenerateJsonSchema]
|
要使用的 JSON schema 生成器类。默认为 |
GenerateToolJsonSchema
|
strict
|
bool | None
|
是否强制执行 JSON schema 合规性(仅影响 OpenAI)。更多信息请参见 |
None
|
requires_approval
|
bool
|
此工具是否需要人在回路中批准。默认为 False。更多信息请参见工具文档。 |
False
|
function_schema
|
FunctionSchema | None
|
用于工具的函数 schema。如果未提供,则会自动生成。 |
None
|
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 |
|
function_schema 实例属性
function_schema: FunctionSchema = (
function_schema
or function_schema(
function,
schema_generator,
takes_ctx=takes_ctx,
docstring_format=docstring_format,
require_parameter_descriptions=require_parameter_descriptions,
)
)
工具参数的基础 JSON schema。
此 schema 可能会被 prepare
函数或 Model 类在将其包含在 API 请求之前进行修改。
from_schema 类方法
from_schema(
function: Callable[..., Any],
name: str,
description: str | None,
json_schema: JsonSchemaValue,
takes_ctx: bool = False,
) -> Self
从一个函数和一个 JSON schema 创建一个 Pydantic 工具。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
function
|
Callable[..., Any]
|
要调用的函数。将仅使用关键字参数调用此函数,并且不会对参数进行验证。 |
必需 |
name
|
str
|
工具的唯一名称,清楚地传达其目的 |
必需 |
description
|
str | None
|
用于告诉模型如何/何时/为什么使用该工具。您可以提供少量示例作为描述的一部分。 |
必需 |
json_schema
|
JsonSchemaValue
|
函数参数的 schema |
必需 |
takes_ctx
|
bool
|
一个可选的布尔参数,指示函数是否接受上下文对象作为参数。 |
False
|
返回
类型 | 描述 |
---|---|
Self
|
一个调用该函数的 Pydantic 工具 |
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 |
|
prepare_tool_def 异步
prepare_tool_def(
ctx: RunContext[AgentDepsT],
) -> ToolDefinition | None
获取工具定义。
默认情况下,此方法创建一个工具定义,然后返回它,或者如果设置了 self.prepare
,则调用它。
返回
类型 | 描述 |
---|---|
ToolDefinition | None
|
如果工具不应为此运行注册,则返回一个 |
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 |
|
ObjectJsonSchema 模块属性
表示对象 JSON schema 的类型,例如其中 "type": "object"
。
此类型用于在 ToolDefinition 中定义工具参数(即参数)。
根据 PEP-728,这应该是一个带有 type: Literal['object']
和 extra_parts=Any
的 TypedDict。
ToolDefinition 数据类
传递给模型的工具的定义。
这用于函数工具和输出工具。
源代码位于 pydantic_ai_slim/pydantic_ai/tools.py
435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 |
|
parameters_json_schema 类属性
实例属性
parameters_json_schema: ObjectJsonSchema = field(
default_factory=lambda: {
"type": "object",
"properties": {},
}
)
工具参数的 JSON schema。
outer_typed_dict_key 类属性
实例属性
outer_typed_dict_key: str | None = None
包装输出工具的外部 [TypedDict] 中的键。
这仅对没有 object
JSON schema 的输出工具设置。
strict 类属性
实例属性
strict: bool | None = None
是否对工具调用强制执行(供应商特定的)严格 JSON schema 验证。
在使用支持的模型时将此设置为 True
通常会对工具的 JSON schema 施加一些限制,以换取保证 API 响应严格匹配该 schema。
当为 False
时,模型可以自由生成其他属性或类型(取决于供应商)。当为 None
(默认值)时,将根据 parameters_json_schema 的兼容性推断该值。
注意:这目前仅由 OpenAI 模型支持。
kind 类属性
实例属性
kind: ToolKind = field(default='function')