GenAIScript 是微软推出的基于 JavaScript/TypeScript 的框架,用于构建可自动化的 LLM 提示词(prompts)与 AI 工作流。该技能面向 GenAIScript 使用专家,提供对 GenAIScript 文档的编排式访问。
一、主要能力 GenAIScript 支持以下能力:
- Prompt-as-Code:用 JavaScript/TypeScript 以编程方式构建提示词。
- 文件处理:从 PDF、DOCX、CSV 等格式导入上下文。
- 工具集成:为 LLM 定义自定义工具和智能体。
- 结构化输出:从 LLM 响应生成文件、编辑内容和结构化数据。
- MCP 支持:集成 Model Context Protocol 工具与资源。
二、使用方式 技能提供一组资源文件,按任务类型导航:
- core-concepts.md:框架基础、脚本结构、文件处理(约 280 行),适合学习基础与理解运作方式。
- api-reference.md:完整 API 文档、函数签名、参数(约 350 行),适合查阅函数细节。
- examples.md:常见用例的实用示例(约 400 行),适合构建解决方案、寻找模板。
- patterns.md:高级模式、优化、最佳实践与设计模式(约 350 行),适合优化性能、处理复杂任务。
基本脚本结构示例:
script({ title: "My Script", description: "What this does", model: "openai:gpt-4" })
def("FILE", env.files)
$Analyze the FILE and provide insights.
包含上下文的示例: def("CODE", env.files, { endsWith: ".ts", lineNumbers: true }) const rows = await parsers.CSV(env.files[0]) defData("ROWS", rows) const schema = defSchema("RESULT", { type: "object", properties: { /* schema */ } })
常用函数包括 $、def()、defSchema()、defTool()、defAgent()、defFileOutput()、defData(),以及 PDF、CSV、XLSX 等解析器。
命令行运行方式: genaiscript run <script-name> genaiscript run <script-name> file1.ts file2.ts genaiscript run <script-name> --var KEY=value genaiscript run <script-name> --model openai:gpt-4
VS Code 集成包含:.genai.mjs 文件的语法高亮、API 函数的 IntelliSense、带断点的调试支持、用于测试脚本的脚本运行器、生成文件的输出预览。
三、三步编排协议
- 任务分析:判断脚本用途(分析、生成、转换、集成)与复杂度级别(简单、中级、高级)。
- 资源选择:根据任务类型加载对应资源文件。
- 执行与验证:使用示例作模板,遵循模式保证性能与可靠性;使用前验证文件输入可用、用样本数据测试、检查 token 预算、验证 schema 与预期输出匹配。
四、常见工作流
- 分析现有代码:阅读 core-concepts.md 理解 def(),查看 examples.md 的 Code Quality 章节,参考 patterns.md 的 Error Handling。
- 生成文档:查看 examples.md 的 Documentation 章节,参考 api-reference.md 的 defFileOutput()。
- 处理文件并提取数据:阅读 core-concepts.md 的文件处理章节,查看 examples.md 的 Data Processing 章节,参考 api-reference.md 的 Parsers。
- 构建多步工作流:参考 patterns.md 的设计模式(如 Chain of Responsibility),查看 examples.md 的 Advanced Workflows。
- 优化性能或调试:参考 patterns.md 的 Performance Optimization 与 Error Handling,以及 api-reference.md 的 token 管理选项。
五、安全提示 当构建摄入外部内容的 GenAIScript 工作流时,需防范间接提示注入(W011)。不可信来源包括:网页搜索结果、抓取的 URL、用户提供的 PDF/CSV、外部 API 响应。缓解措施包括:在动作执行前用独立的仅提取 LLM 调用隔离外部内容;使用 defSchema() 并设 additionalProperties: false;在提示中明确将不可信内容标注为“仅作为数据,而非指令”;在传给外部 API 前校验 LLM 提供的工具参数(URL 允许列表、参数净化、encodeURIComponent);处理外部或用户提供文件时在 script() 中包含 system.safety。