Files
hunjing/backend/app/skills/arg_guard.py
T
2026-08-21 16:00:13 +08:00

40 lines
1.2 KiB
Python

"""工具参数守卫:拒绝参数过大的工具调用,防止模型生成超大输入。"""
import json
from app.application.agent.extensions import (
AgentRunContext,
BeforeToolCallDecision,
ExtensionRegistry,
ToolCallContext,
)
from app.application.agent.python_skills import PythonSkillDefinition
# 单次工具调用参数序列化后的字符上限;超出则拒绝并要求模型精简。
_MAX_ARG_CHARS = 8000
async def _reject_oversized_args(
call: ToolCallContext, _run: AgentRunContext
) -> BeforeToolCallDecision | None:
size = len(json.dumps(call.input, ensure_ascii=False))
if size <= _MAX_ARG_CHARS:
return None
return BeforeToolCallDecision(
allowed=False,
reason=f"工具 {call.name} 的参数过大({size} 字符超过 {_MAX_ARG_CHARS}),请精简后重试。",
)
def _setup(registry: ExtensionRegistry) -> None:
registry.add_before_tool_hook(_reject_oversized_args)
SKILL = PythonSkillDefinition(
name="arg_guard",
description="拒绝参数过大的工具调用,避免超大输入挤占上下文或触发限制。",
triggers=("大参数", "arg guard"),
instructions="发起工具调用时保持参数精简;超大参数会被拒绝。",
setup=_setup,
)