插件的定义 #68
|
最近在研究codex 它里面有插件的功能 这个和skill tool有什么区别呢 是针对某个产品自己的一种cli吗 直接集成到了codex里面? 实现方式我理解是不是和skill加载不太相同呢? 用langchain实现类似的功能怎么做呢? |
Replies: 1 comment
|
这个问题可以先别急着落到实现,先把几个词拆开看,不然很容易把 plugin / skill / tool 混在一起。 我的理解是: Tool 是“能做什么动作”。 比如 所以 tool 更像是 Agent 手里的“工具按钮”。 Skill 是“遇到一类任务时该怎么做”。 Skill 通常是一个 Deep Agents 这里不用自己重写这层,它本身就有 agent = create_deep_agent(
model=model,
skills=["/path/to/skills"],
)它会先读取 skill 的 name / description,需要的时候再读完整 所以 skill 更像是 Agent 的“操作手册”。 Plugin 是更外层的“能力包”。 Codex 里的 plugin 不只是一个 skill,也不只是一个 tool。它更像一个可安装、可启用/禁用、可分享的包。里面可以放:
所以 plugin 解决的不是“怎么做某件事”,而是“怎么把一组能力打包、安装、分发和治理”。 简单说: 如果用 LangChain / Deep Agents 做类似机制,我觉得可以分两步: 第一步,Skill 不要重造。Deep Agents 已经有 第二步,如果要做 Codex 类似的 plugin 机制,需要自己实现一层 plugin loader / PluginMiddleware。 比如一个 plugin 可以长这样:
{
"name": "research-plugin",
"version": "1.0.0",
"skills": "./skills",
"tools": ["tools.search:search_web"],
"mcp_servers": {
"docs": {
"transport": "http",
"url": "https://example.com/mcp"
}
}
}然后 loader 做这些事:
概念上就是: plugin = load_plugin("/path/to/plugin")
agent = create_deep_agent(
model=model,
tools=[*plugin.tools],
skills=plugin.skill_paths,
middleware=[*plugin.middleware],
)真正难的不是把 所以我会这样总结:
|
这个问题可以先别急着落到实现,先把几个词拆开看,不然很容易把 plugin / skill / tool 混在一起。
我的理解是:
Tool 是“能做什么动作”。
比如
read_file、write_file、search_web、query_database、send_email、ask_user这些,都是 tool。它们有明确的参数、有返回值,也可能有副作用。所以 tool 更像是 Agent 手里的“工具按钮”。
Skill 是“遇到一类任务时该怎么做”。
Skill 通常是一个
SKILL.md,里面写 workflow、注意事项、参考资料、模板,必要时也可以带脚本。它不一定直接执行动作,更多是教 Agent 一套方法。Deep Agents 这里不用自己重写这层,它本身就有
SkillsMiddleware,也可以直接这样用:它会先读取 skill 的 name / description,需要的时候再读完整
SKILL.md。这个 progressive disclosure 是 Skill 很关键的设计:平时不占太多上下文,需要时再展开。所以 skill 更像是 Agent 的“操作手册”。
Plugin 是更外层的“能力包”。
Codex 里的 plugin 不只是一个 skill,也不只是一个 tool。它更像一个可安装、可启用/禁用、可分享的包。里面可以放: