微软开源 GenAIScript:用 JavaScript 掌控 LLM 的力量

文摘   2024-11-03 10:28   美国  

GenAIScript 是微软开源的,允许你使用 JavaScript 语法编写和管理 LLM prompts 的强大工具。 它与 VS Code 深度集成,提供便捷的开发环境,并支持多种 LLM 模型。通过 "Prompt 即代码" 的理念,GenAIScript 简化了 LLM 应用的开发流程,并提升了效率。本文将带你深入了解 GenAIScript,从入门到最佳实践,并通过实例展示其强大功能。

GenAIScript 简介

在 AI 编程的浪潮中,高效地利用大型语言模型 (LLM) 至关重要。GenAIScript 作为微软开源的创新解决方案,为开发者提供了一种全新的 LLM 交互方式它将 JavaScript 的灵活性和 LLM 的强大能力结合起来,让开发者可以用更熟悉的编程范式来构建和管理 LLM 应用,从而极大地简化了开发流程,并提升了效率。

GenAIScript 的优势:

  • • Prompt 即代码: 以编程方式构建和管理 prompt,提高了 prompt 的可重用性和可维护性。

  • • 与 VS Code 深度集成: 提供了便捷的开发、调试、测试和运行环境。

  • • 支持多种 LLM 模型: 连接 GitHub Models、GitHub Copilot、开源模型等,提供灵活的选择。

  • • 丰富的功能: 包括文件读写、数据处理、LLM 工具和代理、RAG、安全检测等,涵盖 LLM 应用开发的各个方面。

GenAIScript 的应用场景:

  • • 自动化文档处理: 例如翻译、摘要、审查等。

  • • 代码生成和分析: 例如生成代码注释、进行代码审查、修复代码错误等。

  • • 数据提取和分析: 例如从非结构化数据中提取关键信息、进行情感分析等。

  • • 构建聊天机器人和 AI 代理: 创建更智能、更具交互性的对话体验。

核心代码逻辑:Prompt 即代码

GenAIScript 的核心在于其 "Prompt 即代码" 的理念。它将 LLM prompt 转化为可编程、可管理的 JavaScript 代码,让开发者可以像编写普通代码一样构建和操作 prompt。

最基本的 prompt 创建方式如下:

$`Write a 'hello world' poem.`

$ 函数在这里充当了一个模板标签,将字符串内容转换为发送给 LLM 的 prompt。

GenAIScript 支持将变量、文件内容等动态地嵌入到 prompt 中:

// 读取文件
const file = await workspace.readText("data.txt");
// 定义变量 DATA,并将文件内容赋值给它
def("DATA", file);
// 构建 prompt,引用变量 DATA
$`Analyze DATA and extract data in JSON and save it to data.json.`

def 函数不仅引入了文件内容,还会对其进行优化,以适应目标 LLM 的特性。同时,GenAIScript 也能智能地解析 LLM 的输出,并自动提取 data.json 文件。

GenAIScript 入门

安装与配置

推荐使用 VS Code 插件,可以获得更好的开发体验,包括语法高亮、代码补全、调试等功能。你也可以使用命令行工具。

  1. 1. 在 VS Code 中打开 Extensions Marketplace (Ctrl+Shift+X)。

  2. 2. 搜索 "GenAIScript" 并安装。

  3. 3. 安装完成后,需要在 VS Code 的设置中配置 LLM 模型的访问密钥等信息。参考配置文档:GenAIScript 配置文档

编写第一个 GenAIScript

创建一个以 .genai.mjs 或 .genai.mts 为后缀的文件,例如 summarize.genai.mjs

// 定义文件变量 FILE,使用 env.files 获取当前选中文件的内容
const file = def("FILE", env.files);
// 构建 prompt,引用变量 FILE
$`Summarize ${file} in one sentence.`

在 VS Code 中右键点击文件,选择 "Run GenAIScript" 即可运行脚本。env.files 会自动获取你所选中的文件内容作为输入。

GenAIScript 最佳实践

  • • 提供充足的上下文: 使用 def 函数将相关文档和数据引入 prompt,为 LLM 提供更丰富的背景信息,使其更好地理解任务。

  • • 专注于单一任务: 避免在一个 GenAIScript 中处理过于复杂的任务。将复杂任务分解成多个小的、专注的脚本,更易于调试和维护。

  • • 组合多个脚本: 利用 GenAIScript 的 CLI 或其他工具,将多个脚本组合成一个完整的工作流程,实现更复杂的功能。

  • • 选择合适的 LLM: 根据任务需求、性能和成本,选择最合适的 LLM 模型。

  • • 利用 Schema 定义结构化数据: 使用 defSchema 定义预期的数据结构,可以更有效地从 LLM 输出中提取信息,并提高输出的可靠性。

  • • 善用工具和代理: GenAIScript 支持自定义工具和代理,可以扩展 LLM 的能力,使其能够执行更复杂的操作,例如访问外部 API、执行代码等。

  • • 测试和评估: 使用 GenAIScript 内置的测试和评估功能,可以确保 prompt 的质量和可靠性。

GenAIScript 实例:文档翻译

VSCode with GenAIScript

MakeCode 文档翻译案例充分展现了 GenAIScript 的实用价值。由于 MakeCode 文档中包含许多自定义宏和语法,传统的翻译工具难以处理。GenAIScript 通过定制 prompt,成功地解决了这个问题。

实例实现说明:

该脚本的目标是将 MakeCode 文档翻译成不同的语言。它利用 GenAIScript 的 $ 函数构建 prompt,并利用 def 函数将待翻译的文档内容传入 prompt。脚本中定义了详细的翻译规则,以指导 LLM 正确地翻译文档,并保留 MakeCode 文档中的自定义宏和语法。通过命令行参数 lang 可以指定目标语言,结合 GitHub Actions 可以实现自动化翻译流程。

代码示例:

// 定义脚本元数据,包括标题、分组和 temperature
script({
    "title""Translate MakeCode documentation",
    "group""Translation",
    temperature0 // temperature 为 0 表示生成结果更确定性
})

// 获取命令行参数中的目标语言,默认为 French
const langName = env.vars.lang || "French"
// 获取待翻译的文件内容
const file = env.files[0]
// 将文件内容定义为变量 ORIGINAL,并指定语言为 markdown
def("ORIGINAL", file, { language"markdown" })

// 构建 prompt,设定 LLM 的角色和专业领域
$`You are an expert at Computer Science education.
You are an expert at writing MakeCode documentation and tutorials.
You are an expert ${langName} translator.`


// 构建第二个 prompt,描述翻译任务,并给出具体的翻译规则
$`Translate the documentation in ORIGINAL to ${langName}.
- Do not translate header starting with ~  // 保留以 ~ 开头的标题
- Do NOT translate code in \`blocks\`, \`typescript\`, \`spy\` or \`python\`. However, you can translate comments. // 保留代码块,但可以翻译注释
- Do not translate @variable@ or @unplugged // 保留特定标识符
- Translate \`## {<text>}\` as \`## {<translated text>}\` // 翻译标题中的文本
- When you encounter a snippet like "\`\`||<namespace>:<text>||\`\`", DO NOT translate <namespace> but DO translate <text>.  // 翻译特定格式的文本,保留命名空间
 \`\`||<namespace>:<text>||\`\` --> \`\`||<namespace>:<translated text>||\`\` // 示例
...`
 // 其他翻译规则

相关链接

  • • GenAIScript 官方文档: https://microsoft.github.io/genaiscript/

  • • GenAIScript GitHub 仓库: https://github.com/microsoft/genaiscript

  • • VS Code 插件: https://marketplace.visualstudio.com/items?itemName=ms-genai.genai

子非AI
子非AI,焉知AI之乐:分享AI的有趣应用和创新案例,让你了解AI的乐趣。
 最新文章