当前位置:首页|资讯|微软|生成式AI

微软推出全新的生成式AI脚本:GenAIScript

作者:OSC开源社区发布时间:2024-11-12

↓推荐关注↓

最近微软宣布推出全新的生成式 AI 脚本:GenAI!

GenAI 是一种结合了生成式人工智能(Generative AI,简称 GenAI)和脚本编写能力的新型脚本语言:

  1. 集成 LLMs: GenAI 无缝集成了大型语言模型,使得脚本能够直接调用强大的生成式 AI 能力,简化复杂的自然语言处理任务。

  2. 简化 Java 语法:结合标准的 Java 语法,使开发者无需学习新的编程语言,降低了上手难度。

  3. 高效的自动化能力:通过脚本自动化各种任务,如数据处理、内容生成和执行 API 请求等,能够高效完成。

$ `Analyze ${env.files}and report errors. Use gitmojis.`

通过简化的 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 扩展

  1. 在 Visual Studio Code Marketplace 中搜索 GenAI,安装最新的稳定版本扩展。

  2. 安装 Visual Studio Code。这是一个轻量且强大的源代码编辑器,支持 Windows、macOS 和 Linux。

  3. 在 Visual Studio Code 中打开你的项目文件夹。

  4. 点击左侧活动栏中的扩展视图图标

  5. 搜索 GenAI 并点击 安装。安装成功后,你将看到扩展视图中的图标

  6. (可选)点击扩展页面上的 ⚙️ 齿轮图标,并选择 添加到工作区推荐。

如果你需要安装特定版本的扩展,建议将 genai.vsix 存储在你的仓库中并使用手动安装。步骤如下:

  1. 打开 GitHub 最新发布页面,下载 genai.vsix 到你的项目根目录。

  2. 在 Visual Studio Code 中打开你的项目。

  3. 右键点击 .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


Copyright © 2025 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1