如何实现被大型语言模型代理识别的自定义指令文件(例如MYTOOL.md)
解决方案
AI工具,像 copilot 和 codex,对像 DESIGN.md、AGENT.md 和 SKILL.md 这样的文件有特殊处理。在哪里可以获得一个框架/流程来创建我自己的 MYTOOL.md?
就我目前的探索来看,如果我创建 MYTOOL.md 并在提示中持续引用它,LLM就能够使用它。或者如果把它发布为一个技能,它也能使用,但感觉仍然是在朝着更前端的方向将像 SKILL.md / AGENT.md 这样的文件紧密整合在一起,以赋予它们在AI Agent中的特殊含义/处理方式。
我已经查看了 https://github.com/google-labs-code/design.md 的代码,但仍无法掌握创建自己的 MYTOOL.md 的步骤。
解决方案
并不存在一个普遍的标准,让LLMs能像对待 AGENT.md 或 SKILL.md 那样自动识别 MYTOOL.md。那些文件之所以显得特别,是因为某些工具(如GitHub Copilot或 OpenAI Codex)对它们有硬编码的约定或训练模式。
所以如果你想让你自己的 MYTOOL.md 表现得类似,你必须通过结构+ 工具来自己重新创建这种“特殊性”——不仅仅是文件名。背后在SKILL.md / AGENT.md之间实际发生了什么?这些文件之所以能很好地工作,是因为:
- 它们遵循可预测的模式
- 代理运行时显式加载它们
- 提示会自动注入它们
- 有时微调或系统提示会强化它们
所以你在寻找的“框架”并不是一个库——它是一种模式:
“约定+ 加载器+ 提示注入+ 执行循环”
如何构建你自己的MYTOOL.md系统
1 define a Strict Schema(这一步很关键)不要让它成为自由形式的Markdown。给它一个代理能够可靠解析的结构。
示例:
MYTOOL: CodeRefactorer
目的
Refactor code for readability and performance.
输入
-
language: string
-
code: string
输出
-
refactored_code: string
-
explanation: string
规则
- Preserve functionality
- Improve naming conventions
- Reduce complexity
示例
输入
language:
-javascript
-code: var x=1;
输出
let count = 1;
把这看作是一个轻量级的DSL(领域特定语言),不仅仅是文档
- 构建一个Loader(这就是像Copilot这样的工具内部在做的)
你需要一个层:扫描仓库中的 \*.md(或专门的MYTOOL.md)解析分节 将它们转换为结构化的JSON注入到prompts
示例(伪代码):const tool = parseMarkdown("MYTOOL.md");
const systemPrompt = 你是一名AI代理。
Available tools: \${JSON.stringify(tool);
- 创建一个工具调用协议LLMs不会在没有你定义如何使用的情况下自行决定使用你的工具。示例模式
“ 当一个任务匹配某个工具时:回复:
TOOL_CALL: name: CodeRefactorer input: language: javascript code: ... ”
然后你的运行时:检测TOOL_CALL执行逻辑(或调用另一个LLM)将结果返回
- 增加一个计划层(这就是让它看起来像一个“代理”)
与其直接回答:用户 -> LLM -> Answer
应该是:用户 -> LLM(Planner)-> 决定工具 -> 执行工具 -> 返回结果
这就是现代代理框架的工作方式。
- 可选:将它注册为一个“技能”
像Codex或 Copilot这样的工具有时会对技能给予特殊处理,因为:
它们被索引 它们有元数据 它们是预加载的
你可以通过以下方式模拟:保留一个 /skills文件夹,在启动时加载所有.md文件,为它们命名、设定触发条件、能力。