ai-robot-core/ai-service/scripts/test_dynamic_tool_schema.py

61 lines
2.0 KiB
Python

"""
测试动态生成的工具 Schema
"""
import asyncio
import sys
import json
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
from app.core.config import get_settings
from app.services.mid.kb_search_dynamic_tool import KbSearchDynamicTool
async def test_dynamic_tool_schema():
"""测试动态生成的工具 Schema"""
settings = get_settings()
engine = create_async_engine(settings.database_url)
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
tenant_id = "szmp@ash@2026"
print(f"\n{'='*80}")
print(f"测试动态生成的工具 Schema")
print(f"{'='*80}")
print(f"租户 ID: {tenant_id}")
async with async_session() as session:
tool = KbSearchDynamicTool(session)
# 获取静态 Schema
static_schema = tool.get_tool_schema()
print(f"\n--- 静态 Schema ---")
print(json.dumps(static_schema, indent=2, ensure_ascii=False))
# 获取动态 Schema
dynamic_schema = await tool.get_dynamic_tool_schema(tenant_id)
print(f"\n--- 动态 Schema ---")
print(json.dumps(dynamic_schema, indent=2, ensure_ascii=False))
# 再次获取,测试缓存
print(f"\n--- 测试缓存 ---")
dynamic_schema2 = await tool.get_dynamic_tool_schema(tenant_id)
print(f"缓存命中: {dynamic_schema == dynamic_schema2}")
# 打印 context 字段的详细结构
print(f"\n--- context 字段详情 ---")
context_props = dynamic_schema["parameters"]["properties"].get("context", {}).get("properties", {})
print(f"过滤字段数量: {len(context_props)}")
for key, value in context_props.items():
print(f" {key}: {value}")
if __name__ == "__main__":
asyncio.run(test_dynamic_tool_schema())