为 Agent SDK 代理开发和集成插件——扩展能力的方式。
插件与工具的区别
| 特性 | 工具 | 插件 |
|---|---|---|
| 复杂度 | 单个函数 | 多个工具 + 状态 |
| 生命周期 | 会话内 | 可独立运行 |
| 分发 | 代码中定义 | 独立包 |
| 隔离性 | 同一进程 | 可独立进程 |
创建插件
class DatabasePlugin:
"""数据库操作插件。"""
def __init__(self, connection_string):
self.connection_string = connection_string
def get_tools(self):
"""返回插件提供的工具列表。"""
return [
{
"name": "query_database",
"description": "执行 SQL 查询",
"input_schema": {
"type": "object",
"properties": {
"sql": {"type": "string", "description": "SQL 语句"},
"params": {"type": "array", "description": "查询参数"}
},
"required": ["sql"]
}
}
]
def execute(self, name, **kwargs):
"""执行工具调用。"""
if name == "query_database":
return self._execute_sql(kwargs["sql"], kwargs.get("params", []))
raise ValueError(f"未知工具: {name}")
def _execute_sql(self, sql, params):
# 实现数据库查询
return "查询结果"
加载插件
plugins = [
DatabasePlugin("postgresql://localhost/mydb"),
EmailPlugin("smtp.example.com"),
]
# 收集所有工具
all_tools = []
for plugin in plugins:
all_tools.extend(plugin.get_tools())
def execute_tool(name, **kwargs):
for plugin in plugins:
try:
return plugin.execute(name, **kwargs)
except ValueError:
continue
return "未知工具"