ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;letter-spacing: 0.1em;border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;color: rgb(15, 76, 129);">GenAIScript 是微软开源的,允许你使用 JavaScript 语法编写和管理 LLM prompts 的强大工具。它与 VS Code 深度集成,提供便捷的开发环境,并支持多种 LLM 模型。通过 "
rompt 即代码" 的理念,GenAIScript 简化了 LLM 应用的开发流程,并提升了效率。本文将带你深入了解 GenAIScript,从入门到最佳实践,并通过实例展示其强大功能。
•ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;color: rgb(15, 76, 129);">Prompt 即代码:以编程方式构建和管理 prompt,提高了 prompt 的可重用性和可维护性。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-indent: -1em;display: block;margin: 0.5em 8px;">•与 VS Code 深度集成:提供了便捷的开发、调试、测试和运行环境。
•支持多种 LLM 模型:连接 GitHub Models、GitHub Copilot、开源模型等,提供灵活的选择。
•丰富的功能:包括文件读写、数据处理、LLM 工具和代理、RAG、安全检测等,涵盖 LLM 应用开发的各个方面。
GenAIScript 的应用场景:
•自动化文档处理:例如翻译、摘要、审查等。
•代码生成和分析:例如生成代码注释、进行代码审查、修复代码错误等。
•数据提取和分析:例如从非结构化数据中提取关键信息、进行情感分析等。
•构建聊天机器人和 AI 代理:创建更智能、更具交互性的对话体验。
GenAIScript 的核心在于其"Prompt 即代码" 的理念。它将 LLM prompt 转化为可编程、可管理的 JavaScript 代码,让开发者可以像编写普通代码一样构建和操作 prompt。
最基本的 prompt 创建方式如下:
$`Writea'helloworld'poem.`
$函数在这里充当了一个模板标签,将字符串内容转换为发送给 LLM 的 prompt。
GenAIScript 支持将变量、文件内容等动态地嵌入到 prompt 中:
//读取文件
constfile=awaitworkspace.readText("data.txt");
//定义变量DATA,并将文件内容赋值给它
def("DATA",file);
//构建prompt,引用变量DATA
$`AnalyzeDATAandextractdatainJSONandsaveittodata.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获取当前选中文件的内容
constfile=def("FILE",env.files);
//构建prompt,引用变量FILE
$`Summarize${file}inonesentence.`在 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":"TranslateMakeCodedocumentation",
"group":"Translation",
temperature:0//temperature为0表示生成结果更确定性
})
//获取命令行参数中的目标语言,默认为French
constlangName=env.vars.lang||"French"
//获取待翻译的文件内容
constfile=env.files[0]
//将文件内容定义为变量ORIGINAL,并指定语言为markdown
def("ORIGINAL",file,{language:"markdown"})
//构建prompt,设定LLM的角色和专业领域
$`YouareanexpertatComputerScienceeducation.
YouareanexpertatwritingMakeCodedocumentationandtutorials.
Youareanexpert${langName}translator.`
//构建第二个prompt,描述翻译任务,并给出具体的翻译规则
$`TranslatethedocumentationinORIGINALto${langName}.
-Donottranslateheaderstartingwith~//保留以~开头的标题
-DoNOTtranslatecodein\`blocks\`,\`typescript\`,\`spy\`or\`python\`.However,youcantranslatecomments.//保留代码块,但可以翻译注释
-Donottranslate@variable@or@unplugged//保留特定标识符
-Translate\`##{<text>}\`as\`##{<translatedtext>}\`//翻译标题中的文本
-Whenyouencounterasnippetlike"\`\`||<namespace>:<text>||\`\`",DONOTtranslate<namespace>butDOtranslate<text>.//翻译特定格式的文本,保留命名空间
\`\`||<namespace>:<text>||\`\`-->\`\`||<namespace>:<translatedtext>||\`\`//示例
...`//其他翻译规则
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |