Agent 工厂模块2:动态生成 Pydantic 模型|LangChain 工具适配实战
·
作者:WangQiaomei
标签:Python、Pydantic、元编程、LangChain、AI Agent、运维开发
🔥 前言自研 Agent 工具想无缝接入 LangChain?StructuredTool 强制要 Pydantic args_schema?手写 N 个模型太蠢?这篇 动态生成 Pydantic 模型 实战,让你一行代码自动造类,生产级优雅!
一、场景:自研 Tool → LangChain 无痛迁移(适配器模式)
痛点
- 自研
BaseTool使用PARAM_SCHEMA = []列表定义参数 - LangChain
StructuredTool必须要 Pydantic Model - 不可能为每个工具手写模型类
解决方案(DeepAgentFactory 核心巧思)
python
运行
# 旧工具(自研)
class AlertHealthTool(BaseTool):
PARAM_SCHEMA = [ToolParam(name="limit", type="integer", ...)]
def execute(self, limit=3): ...
# 自动转 LangChain StructuredTool
def _base_tool_to_langchain(base_tool_instance):
# ✅ 动态生成 Pydantic 模型(核心魔法)
ArgsModel = type("ArgsSchema", (BaseModel,), fields)
return StructuredTool(
name=...,
args_schema=ArgsModel,
func=_execute
)
二、🔥 核心魔法:动态生成 Pydantic 模型
python
运行
ArgsModel = type("ArgsSchema", (BaseModel,), fields)
代码拆解(元编程本质)
表格
| 参数 | 含义 |
|---|---|
"ArgsSchema" |
新类名 |
(BaseModel,) |
继承 Pydantic BaseModel |
fields |
属性字典:{name: (type, default)} |
等价手写类
python
运行
class ArgsSchema(BaseModel):
limit: int = 3
project: str # 必填 ...
三、✅ 完整可复制流程(生产级)
1. 原工具定义
python
运行
class AlertHealthTool(BaseTool):
PARAM_SCHEMA = [
ToolParam(name="limit", type="integer", default=3),
]
2. 构造 fields
python
运行
fields = {}
for p in param_schema:
tp = int if p.type == "integer" else str
default = p.default if p.default is not None else ...
fields[p.name] = (tp, default)
# 结果:{"limit": (int, 3)}
3. 动态创建 Pydantic 模型
python
运行
from pydantic import BaseModel
ArgsModel = type("ArgsSchema", (BaseModel,), fields)
4. 生成 LangChain Tool
python
运行
tool = StructuredTool(
name="alert_health",
description="查询TopN告警健康度",
args_schema=ArgsModel,
func=lambda **kw: base_tool.execute(**kw)
)

四、💡 为什么必须这样做?(架构价值)
表格
| 原因 | 说明 |
|---|---|
| LangChain 强制要求 | StructuredTool 必须 args_schema |
| 自研体系不兼容 | 旧工具是列表格式,非 Pydantic |
| 无侵入迁移 | 不改旧代码,自动适配 |
| 元编程威力 | 运行时造类,1 行顶 100 行 |
一句话总结:type() 动态造类 = 自研工具 ↔ LangChain 桥梁
五、🎯 总结(面试必背)
type(类名, 基类元组, 属性字典)→ Python 动态创建类- 适配 LangChain
StructuredTool必备技巧 - 企业级 Agent 工厂标准设计模式
- 元编程 = 优雅、可扩展、零冗余
🎁 福利
需要 完整可运行工具适配器源码 的同学,评论区扣 「Agent」!关注 @WangQiaomei,持续更新 AI Agent 架构实战干货!
更多推荐



所有评论(0)