闪电疯狂赛车
91.44M · 2026-03-23
本文将:
用最通俗的方式讲清 OpenSpec
带你实现一个可运行的 OpenSpec Agent 项目
OpenSpec = 给 AI 定义“怎么调用能力”的标准
| 世界 | 对应 |
|---|---|
| 操作系统(iOS) | OpenSpec |
| App | Skill(能力) |
| 用户操作 | Agent 调度 |
如果没有 OpenSpec:
结果就是:
AI = 聊天工具
系统 = 工具孤岛
有了 OpenSpec:
结果:
AI 开始“干活”
系统变成“能力网络”
假设用户说:
帮我查东京天气并总结
const weather = await getWeather()
const result = await callLLM(`请总结:${weather}`)
问题:
先定义能力:
{
"name": "getWeather",
"input": { "city": "string" },
"output": { "temperature": "number" }
}
然后交给 AI:
1. 调 getWeather
2. 再调 summarize
核心变化:
OpenSpec 干了三件关键的事:
{
"name": "search",
"input": { "query": "string" },
"output": { "results": "array" }
}
AI 可以“理解能力”
{
"tool": "search",
"params": { "query": "OpenSpec" }
}
AI 开始“调用工具”
模型(决策) + Skill(执行)
可以随意替换模型
不讲虚的,直接上代码。
openspec-demo/
├── index.ts
├── agent/
│ └── orchestrator.ts
├── skills/
│ ├── weather.ts
│ └── summarize.ts
├── spec/
│ └── registry.ts
├── llm/
│ └── mock.ts
├── types/
│ └── skill.ts
export interface Skill<I = any, O = any> {
name: string
description: string
inputSchema: Record<string, string>
outputSchema: Record<string, string>
run: (input: I) => Promise<O>
}
export const weatherSkill = {
name: "getWeather",
async run({ city }) {
return {
temperature: 18,
desc: "东京多云"
}
}
}
export const summarizeSkill = {
name: "summarize",
async run({ text }) {
return `总结:${text}`
}
}
export const skillRegistry = {
getWeather: weatherSkill,
summarize: summarizeSkill
}
这一步非常关键:
export async function decidePlan(input) {
return [
{ tool: "getWeather", params: { city: "东京" }},
{ tool: "summarize", params: { fromPrevious: true }}
]
}
export async function runAgent(input) {
const plan = await decidePlan(input)
let lastResult = null
for (const step of plan) {
const skill = skillRegistry[step.tool]
let params = step.params
if (params.fromPrevious) {
params = { text: JSON.stringify(lastResult) }
}
lastResult = await skill.run(params)
}
return lastResult
}
runAgent("帮我查东京天气并总结").then(console.log)
输出:
总结:{"temperature":18,"desc":"东京多云"}
虽然只有 200 行代码,但已经具备:
能力抽象(Skill)
标准化注册(OpenSpec)
自动调度(Agent)
多步骤执行(Pipeline)
本质上:
把:
decidePlan()
换成:
OpenAI Tool Calling / Function Calling
现在是写死的:
if (input.includes("天气"))
未来是:
AI 自动规划任务链
自动扫描 /skills 目录
你可以做:
执行链路可视化
Skill 调用流程图
这一步非常适合前端工程师做差异化。
| 传统开发 | AI 架构 |
|---|---|
| 写函数调用 | 定义能力 |
| 手动编排逻辑 | AI 自动调度 |
| 面向接口 | 面向能力 |
认知升级一句话:
OpenSpec = AI 世界的“能力操作系统规范”
Agent = 基于 OpenSpec 运行的执行引擎