↓推荐关注↓
最近微软宣布推出全新的生成式 AI 脚本:GenAI!
GenAI 是一种结合了生成式人工智能(Generative AI,简称 GenAI)和脚本编写能力的新型脚本语言:
集成 LLMs: GenAI 无缝集成了大型语言模型,使得脚本能够直接调用强大的生成式 AI 能力,简化复杂的自然语言处理任务。
简化 Java 语法:结合标准的 Java 语法,使开发者无需学习新的编程语言,降低了上手难度。
高效的自动化能力:通过脚本自动化各种任务,如数据处理、内容生成和执行 API 请求等,能够高效完成。
通过简化的 Java 语法,它将大型语言模型(LLMs)引入到脚本编写过程中,使开发者能够更加灵活快捷地创建自动化任务和智能应用。
// define the context
def( "FILE", env.files, { endsWith: ".pdf"})
// structure the data
constschema = defSchema( "DATA", { type: "array", items: { type: "string"} })
// assign the task
$ `Analyze FILE and extract data to JSON.`
// save results to file
defFileOutput( "*.pdf.txt", "Extracted data", { schema })
// tools
defTool( "weather", "live weather", { city: "Paris"},
async({ city }) => { ... "sunny"})
// agents!
defAgent( "git", "answer git questions", "You are a git expert.", { tools: [ "git"] })
...
支持 Java 和 Type
GenAI 支持使用 Java 和 Type 来构建 prompts,使得开发过程更加灵活和方便。脚本文件以 .genai.mjs 或 .genai.mts 扩展名命名,分别表示 Java 或 Type 文件,并设计用于通过 LLM 构建提示。
.genai.mjs:模块化 Java 语法,支持导入其他模块。
.genai.js:非模块化 Java 文件,通过 eval 执行,不支持模块导入。
.genai.mts:模块化 Type 文件,支持导入其他 Type 模块,包括动态导入。
system.*.genai.mjs:系统提示模板,默认情况下未列出。
GenAI 将自动检测工作区中任何匹配 *.genai.mjs、*.genai.js 或 *.genai.mts 的文件。虽然脚本文件可以放置在工作区的任何位置,但扩展会默认将它们放置在 genaisrc 文件夹中。
以下是一个名为 shorten.genai.mjs 的示例文件,演示了如何创建一个缩短文本的提示脚本:
({
title: "Shorten", // 在UI和 Copilot聊天中显示
deion: "A prompt that shrinks the size of text without losing meaning", // 也显示但灰色显示
})
constfile = def( "FILE", env.files) // 定义文件变量
// 将文本附加到提示中
$ `Shorten ${file}. Limit changes to minimum.`
安装与配置
GenAI 需要 Node.js 才能运行。我们推荐安装 Node.js 的长期支持版 (LTS)。
VSCode 扩展
然后安装 Visual Studio Code 扩展
在 Visual Studio Code Marketplace 中搜索 GenAI,安装最新的稳定版本扩展。
安装 Visual Studio Code。这是一个轻量且强大的源代码编辑器,支持 Windows、macOS 和 Linux。
在 Visual Studio Code 中打开你的项目文件夹。
点击左侧活动栏中的扩展视图图标
搜索 GenAI 并点击 安装。安装成功后,你将看到扩展视图中的图标
(可选)点击扩展页面上的 ⚙️ 齿轮图标,并选择 添加到工作区推荐。
如果你需要安装特定版本的扩展,建议将 genai.vsix 存储在你的仓库中并使用手动安装。步骤如下:
打开 GitHub 最新发布页面,下载 genai.vsix 到你的项目根目录。
在 Visual Studio Code 中打开你的项目。
右键点击 .vsix 文件,选择 Install Extension VSIX… 进行安装。
命令行工具
GenAI 命令行工具允许你从任何终端运行脚本。
使用 npx 运行脚本
npx genai run my- some/path*.md")
def( "DOCS", mds)
使用 grep 方法在工作区中搜索含有特定模式的文件内容:
const{ files } = awaitworkspace.grep( "example", "***.md")
运行代码
LLM 可以在沙箱环境下运行代码。
({ tools: [ "python_code_interpreter"] })
也可以在 Docker 容器中运行代码。
constc = awaithost.container({ image: "python:alpine"})
constres = awaitc.exec( "python --version")
还可以运行 Prompty 文件。
---
name:poem
---
Writemeapoem
应用示例示例1:生成 Git 提交信息
gcm 脚本提供了生成提交信息的引导流程。它会根据 Git 仓库中的暂存变更生成一个提交信息,并引导用户提交这些变更或重新生成提交信息。
首先,我们定义 函数,设置脚本的标题和描述,并指定要使用的模型:
({
title: "git commit message",
deion: "Generate a commit message for all staged changes",
model: "openai:gpt-4o",
})
接下来,使用 git diff 检查你 Git 仓库中的暂存变更。如果没有暂存任何变更,GenAI 会通知你将所有变更暂存:
// 检查暂存的变更,如果没有则暂存所有变更
constdiff = awaitgit.diff({
staged: true,
askStageOnEmpty: true,
})
if(!diff) cancel( "no staged changes")
console.log(diff.stdout) // 输出变更内容供你查看
此部分是关键。我们进入一个循环,根据 diff 生成提交信息。如果你对生成的信息不满意,可以选择编辑、接受或重新生成:
letchoice
letmessage
do{
// 生成一个符合规范的 Git 提交信息
constres = awaitrunPrompt( ( _) => {
_.def( "GIT_DIFF", diff, { maxTokens: 20000, language: "diff"})
_.$ `Generate a git conventional commit message for the changes in GIT_DIFF.
- do NOT add quotes
- maximum 50 characters
- use emojis`
})
message = res.text
} while(choice !== "commit")
如果你选择提交,GenAI 会用你的信息运行 git commit 命令,如果你愿意,还可以立即将变更推送到仓库:
if(choice === "commit"&& message) {
console.log(
( awaithost.exec( "git", [ "commit", "-m", message, "-n"])).stdout
)
if( awaithost.confirm( "Push changes?", { default: true}))
console.log(( awaithost.exec( "git push")).stdout)
}
使用以下命令在终端运行脚本:
npx genai run gcm
这就是完整的 gcm 脚本实现,通过运行上述命令,可以自动化生成 Git 提交信息并进行提交。
示例2:图片替代文本生成器
图片的替代文本(alt text)对于使图片对包括视障人士在内的所有人可接触是至关重要的。它为图片提供了一种文字描述,使屏幕阅读器能够将内容传达给看不到图片的用户。然而,为图片编写替代文本可能非常耗时,尤其是当你要处理大量图片时。这时,AI 可以大显身手。使用类似于 OpenAI 的 GPT-4 的语言模型,你可以自动生成图片替代文本,从而节省时间和精力。
这个示例展示了如何构建一个工具来为 Markdown 文件中的图片生成替代文本。脚本主要由 Type 代码组成,并在 GenAI CLI 中运行。让我们来逐步解析这些代码。
首先,我们定义 函数,设置脚本的标题和描述,并指定要使用的模型:
({
title: "Image Alt Textify",
deion: "Generate alt text for images in markdown files",
parameters: {
docs: {
type: "string",
deion: "path to search for markdown files",
default: "**.{md,mdx}",
},
force: {
type: "boolean",
deion: "regenerate all deions",
default: false,
},
assets: {
type: "string",
deion: "image assets path",
default: "./assets/images", // 修改为你的资产文件夹路径
},
},
})
在这里,我们声明了脚本,并使用 OpenAI 的 GPT-4 模型。我们还设置了文件路径、是否重新生成所有描述,以及资产路径等参数。
接下来,提取环境变量:
const{ docs, force, assets } = env.vars
然后,我们定义一个正则表达式来查找 Markdown 中的图片:
constrx = force
? /!\[[^\]]*\]\(([^)]+.(png|jpg))\)/g// 匹配包含或不包含替代文本的图片
: /!\[\s*\]\(([^)]+.(png|jpg))\)/g// 匹配没有替代文本的图片
const{ files } = awaitworkspace.grep(rx, {
path: docs,
glob: "*.mdx",
readText: true,
})
我们使用 workspace.grep 来查找指定文档中符合正则表达式模式的所有内容。
对于找到的每个图片 URL,我们使用一个内联提示来生成替代文本:
for( constfile offiles) {
const{ filename, content } = file
constmatches = content.matchAll(rx)
for( constmatch ofmatches) {
consturl = match[ 1]
constresolvedUrl = resolveUrl(filename, url)
const{ text } = awaitrunPrompt(
( _) => {
_.defImages(resolvedUrl)
_.$ `
You are an expert in assistive technology.
You will analyze the image
and generate a deion alt text for the image.
- Do not include alt text in the deion.
- Keep it short but deive.
- Do not generate the [ character.`
},
{
system: [ "system.safety_harmful_content"],
model: "openai:gpt-4o",
}
)
imgs[url] = text
}
}
最后,我们将替代文本更新到 Markdown 内容中:
constnewContent = content.replace(
rx,
(m, url) => `![ ${imgs[url] ?? ""} ]( ${url})`
)
if(newContent !== content) awaitworkspace.writeText(filename, newContent)
你需要通过 GenAI CLI 来运行这个脚本。如果你还没有安装 GenAI CLI,请查看安装指南。安装后,可以通过以下命令运行脚本:
npx genai run iat
脚本默认导入了一个安全系统消息,以防止生成有害文本内容:
// safety system message to prevent generating harmful text
system: [ "system.safety_harmful_content"],
通过这个脚本,你可以自动化生成 Markdown 文件中图片的替代文本,大大提高工作效率并确保内容的可访问性。
最后
官方还提供了完整的使用指南、大量的案例:
使用指南
应用案例
了解更多内容可以访问:
官网:https://microsoft.github.io/genai/
Github:https://github.com/microsoft/genai/
END