微信扫码
与创始人交个朋友
我要投稿
GenAIScript 是微软开源的,允许你使用 JavaScript 语法编写和管理 LLM prompts 的强大工具。 它与 VS Code 深度集成,提供便捷的开发环境,并支持多种 LLM 模型。通过 "Prompt 即代码" 的理念,GenAIScript 简化了 LLM 应用的开发流程,并提升了效率。本文将带你深入了解 GenAIScript,从入门到最佳实践,并通过实例展示其强大功能。
GenAIScript 的优势:
• Prompt 即代码: 以编程方式构建和管理 prompt,提高了 prompt 的可重用性和可维护性。
• 与 VS Code 深度集成: 提供了便捷的开发、调试、测试和运行环境。
• 支持多种 LLM 模型: 连接 GitHub Models、GitHub Copilot、开源模型等,提供灵活的选择。
• 丰富的功能: 包括文件读写、数据处理、LLM 工具和代理、RAG、安全检测等,涵盖 LLM 应用开发的各个方面。
GenAIScript 的应用场景:
• 自动化文档处理: 例如翻译、摘要、审查等。
• 代码生成和分析: 例如生成代码注释、进行代码审查、修复代码错误等。
• 数据提取和分析: 例如从非结构化数据中提取关键信息、进行情感分析等。
• 构建聊天机器人和 AI 代理: 创建更智能、更具交互性的对话体验。
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
文件。
推荐使用 VS Code 插件,可以获得更好的开发体验,包括语法高亮、代码补全、调试等功能。你也可以使用命令行工具。
1. 在 VS Code 中打开 Extensions Marketplace (Ctrl+Shift+X)。
2. 搜索 "GenAIScript" 并安装。
3. 安装完成后,需要在 VS Code 的设置中配置 LLM 模型的访问密钥等信息。参考配置文档: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
会自动获取你所选中的文件内容作为输入。
• 提供充足的上下文: 使用 def
函数将相关文档和数据引入 prompt,为 LLM 提供更丰富的背景信息,使其更好地理解任务。
• 专注于单一任务: 避免在一个 GenAIScript 中处理过于复杂的任务。将复杂任务分解成多个小的、专注的脚本,更易于调试和维护。
• 组合多个脚本: 利用 GenAIScript 的 CLI 或其他工具,将多个脚本组合成一个完整的工作流程,实现更复杂的功能。
• 选择合适的 LLM: 根据任务需求、性能和成本,选择最合适的 LLM 模型。
• 利用 Schema 定义结构化数据: 使用 defSchema
定义预期的数据结构,可以更有效地从 LLM 输出中提取信息,并提高输出的可靠性。
• 善用工具和代理: GenAIScript 支持自定义工具和代理,可以扩展 LLM 的能力,使其能够执行更复杂的操作,例如访问外部 API、执行代码等。
• 测试和评估: 使用 GenAIScript 内置的测试和评估功能,可以确保 prompt 的质量和可靠性。
MakeCode 文档翻译案例充分展现了 GenAIScript 的实用价值。由于 MakeCode 文档中包含许多自定义宏和语法,传统的翻译工具难以处理。GenAIScript 通过定制 prompt,成功地解决了这个问题。
实例实现说明:
该脚本的目标是将 MakeCode 文档翻译成不同的语言。它利用 GenAIScript 的 $
函数构建 prompt,并利用 def
函数将待翻译的文档内容传入 prompt。脚本中定义了详细的翻译规则,以指导 LLM 正确地翻译文档,并保留 MakeCode 文档中的自定义宏和语法。通过命令行参数 lang
可以指定目标语言,结合 GitHub Actions 可以实现自动化翻译流程。
代码示例:
// 定义脚本元数据,包括标题、分组和 temperature
script({
"title": "Translate MakeCode documentation",
"group": "Translation",
temperature: 0 // 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>||\`\` // 示例
...` // 其他翻译规则
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-02
让AI眼里有活主动干!清华&面壁等开源主动交互Agent新范式
2024-12-01
开源本地实时语音AI,三分钟看懂下一代AI语音助手的实时多模态交互
2024-12-01
11.7k star 的 AI 知识库 MaxKB 也用了
2024-12-01
【开源】一个基于LangGraph构建AI旅行助理,该产品能够处理航班查询、酒店预订和个性化邮件发送等极大地提高了用户的旅行效率
2024-12-01
京东开源普通话数字人JoyHallo,一口流利标准普通话还会讲英语
2024-12-01
Hugging Face,AI时代的“军火库”
2024-12-01
探索 Docling:高效且安全的 PDF 解析利器
2024-11-30
微软开源黑科技!
2024-05-06
2024-07-25
2024-08-13
2024-06-12
2024-07-11
2024-06-16
2024-07-20
2024-06-15
2024-07-25
2024-07-25
2024-11-22
2024-11-19
2024-11-13
2024-11-13
2024-10-07
2024-09-22
2024-09-20
2024-09-14