
npm install -g openskills

npm install -g @anthropic-ai/claude-code

openskills sync


使用 xlsx skill 生成 10 条美味食谱


const executePythonTool = tool(async ({ code }) => {const tmpFile = `/skills/script_${Date.now()}.py`;fs.writeFileSync(tmpFile, code);// 读取脚本后执行......},{name: 'execute_python',description: '执行 xxx skill 的 Python 脚本',schema: z.object({code: z.string().describe('要执行的 Python 代码'),}),});
Skill → 注入"说明书"(工具调用的操作规范)RAG → 注入"知识内容"(业务知识库、文档库)
用户输入↓[RAG 检索] ──→ 检索知识库 ──→ 注入 Prompt[Skill 检索] ─→ 找对应的操作说明 ────→ 注入 Prompt↓[LLM] 结合两者生成计划↓[Tool 执行]↓[ReAct 循环]
RAG 和 Skill 在同一层次,都在 LLM 推理前注入 Prompt。Skill 给说明书,RAG 给知识库业务数据,Tool 负责执行。
async function runAgent(userInput) {// Step 1: 并行检索(RAG + Skill)const [ragContext, skill] = await Promise.all([retrieveFromRAG(userInput), // 检索业务知识retrieveSkill(userInput), // 检索操作规范]);// Step 2: 组装 Promptconst systemPrompt = `你是一个得力助手。<knowledge>${ragContext}</knowledge><skill>${skill}</skill>`;// Step 3: LLM 推理 + Tool 执行const agent = createReactAgent({ llm, tools, prompt: systemPrompt });return agent.invoke({ input: userInput });}
RAG 检索→ 从公司文档库找到今年销售数据.csv 的内容→ 注入 Prompt:"以下是相关数据:销售额 300万,同比+15%..."Skill 检索→ 匹配到 docx Skill→ 注入 Prompt:"生成 Word 文档请遵循以下规范:..."LLM 结合两者→ 知道数据内容(来自 RAG)→ 知道怎么生成文档(来自 Skill)→ 生成代码调用 Tool 执行
用户输入↓[Skill 检索] ──→ 读取 .md 文件 ──→ 注入 System Prompt↓[LangChain Agent] ──→ LLM 规划步骤↓[Tool 调用循环]├── install_npm_package (环境准备)├── generate_docx (执行代码)└── 验证结果 / 自我修正↓生成执行结果
const { MemoryVectorStore } = require('langchain/vectorstores/memory');const { OpenAIEmbeddings } = require('@langchain/openai');// 把所有 Skill 索引进向量数据库async function indexSkills() {const skills = [{ name: 'docx', content: loadSkill('docx'), desc: '生成Word文档' },{ name: 'excel', content: loadSkill('excel'), desc: '生成Excel表格' },];const vectorStore = await MemoryVectorStore.fromTexts(skills.map(s => s.desc),skills.map(s => ({ name: s.name })),new OpenAIEmbeddings());return vectorStore;}// 按需检索最相关的 Skill 说明async function retrieveSkill(userInput, vectorStore) {const results = await vectorStore.similaritySearch(userInput, 1);return loadSkill(results[0].metadata.name);}
const systemPrompt = `你是一个得力助手。<knowledge>${ragContext}</knowledge><skill>${skill}</skill>`;const agent = createAgent({ llm, tools, prompt: systemPrompt });
夜雨聆风