以下文章來源于code秘密花園,作者ConardLi
最近微軟宣布推出全新的生成式 AI 腳本:GenAIScript!
GenAIScript 是一種結(jié)合了生成式人工智能(Generative AI,簡稱 GenAI)和腳本編寫能力的新型腳本語言:
集成 LLMs:GenAIScript 無縫集成了大型語言模型,使得腳本能夠直接調(diào)用強大的生成式 AI 能力,簡化復(fù)雜的自然語言處理任務(wù)。
簡化 JavaScript 語法:結(jié)合標準的 JavaScript 語法,使開發(fā)者無需學(xué)習(xí)新的編程語言,降低了上手難度。
高效的自動化能力:通過腳本自動化各種任務(wù),如數(shù)據(jù)處理、內(nèi)容生成和執(zhí)行 API 請求等,能夠高效完成。
$`Analyze${env.files}andreporterrors.Usegitmojis.`
通過簡化的 JavaScript 語法,它將大型語言模型(LLMs)引入到腳本編寫過程中,使開發(fā)者能夠更加靈活快捷地創(chuàng)建自動化任務(wù)和智能應(yīng)用。
//definethecontext
def("FILE",env.files,{endsWith:".pdf"})
//structurethedata
constschema=defSchema("DATA",{type:"array",items:{type:"string"}})
//assignthetask
$`AnalyzeFILEandextractdatatoJSON.`
//saveresultstofile
defFileOutput("*.pdf.txt","Extracteddata",{schema})
//tools
defTool("weather","liveweather",{city:"Paris"},/*schema*/
async({city})=>{..."sunny"})/*callback*/
//agents!
defAgent("git","answergitquestions","Youareagitexpert.",{tools:["git"]})
...
支持 JavaScript 和 TypeScript
GenAIScript 支持使用 JavaScript 和 TypeScript 來構(gòu)建 prompts,使得開發(fā)過程更加靈活和方便。腳本文件以 .genai.mjs 或 .genai.mts 擴展名命名,分別表示 JavaScript 或 TypeScript 文件,并設(shè)計用于通過 LLM 構(gòu)建提示。
.genai.mjs:模塊化 JavaScript 語法,支持導(dǎo)入其他模塊。
.genai.js:非模塊化 JavaScript 文件,通過 eval 執(zhí)行,不支持模塊導(dǎo)入。
.genai.mts:模塊化 TypeScript 文件,支持導(dǎo)入其他 TypeScript 模塊,包括動態(tài)導(dǎo)入。
system.*.genai.mjs:系統(tǒng)提示模板,默認情況下未列出。
GenAIScript 將自動檢測工作區(qū)中任何匹配 *.genai.mjs、*.genai.js 或 *.genai.mts 的文件。雖然腳本文件可以放置在工作區(qū)的任何位置,但擴展會默認將它們放置在 genaisrc 文件夾中。
以下是一個名為 shorten.genai.mjs 的示例文件,演示了如何創(chuàng)建一個縮短文本的提示腳本:
script({
title:"Shorten",//在UI和Copilot聊天中顯示
description:"Apromptthatshrinksthesizeoftextwithoutlosingmeaning",//也顯示但灰色顯示
})
constfile=def("FILE",env.files)//定義文件變量
//將文本附加到提示中
$`Shorten${file}.Limitchangestominimum.`
安裝與配置
GenAIScript 需要 Node.js 才能運行。我們推薦安裝 Node.js 的長期支持版 (LTS)。
VSCode 擴展
然后安裝 Visual Studio Code 擴展
在 Visual Studio Code Marketplace 中搜索 GenAIScript,安裝最新的穩(wěn)定版本擴展。
安裝 Visual Studio Code。這是一個輕量且強大的源代碼編輯器,支持 Windows、macOS 和 Linux。
在 Visual Studio Code 中打開你的項目文件夾。
點擊左側(cè)活動欄中的擴展視圖圖標
搜索 GenAIScript 并點擊 安裝。安裝成功后,你將看到擴展視圖中的圖標
(可選)點擊擴展頁面上的 齒輪圖標,并選擇 添加到工作區(qū)推薦。
如果你需要安裝特定版本的擴展,建議將 genaiscript.vsix 存儲在你的倉庫中并使用手動安裝。步驟如下:
打開 GitHub 最新發(fā)布頁面,下載 genaiscript.vsix 到你的項目根目錄。
在 Visual Studio Code 中打開你的項目。
右鍵點擊 .vsix 文件,選擇 Install Extension VSIX… 進行安裝。

命令行工具
GenAIScript 命令行工具允許你從任何終端運行腳本。
使用 npx 運行腳本
npxgenaiscriptrunmy-scriptsome/path/*.pdf
npx 將自動安裝并緩存CLI。你也可以將它作為 devDependency 添加到你的項目中:
安裝 genaiscript 為開發(fā)依賴
npminstall-Dgenaiscript
GenAIScript 會在默認的終端中啟動一個 node 服務(wù)器。如果默認終端未配置或不支持 Node.js,你可能需要在用戶/工作區(qū)設(shè)置中更新它。
打開命令面板 Ctrl+Shift+P,搜索 Terminal: Select Default Profile。
選擇一個終端配置文件,比如 Git Bash。
這樣配置好之后,你便可以方便地在 Visual Studio Code 或命令行中進行 GenAIScript 的開發(fā)工作了。
運行模型
通過 GitHub Models 或 GitHub Copilot 運行模型:
script({...,model:"github:gpt-4o"})
支持 Ollama、LocalAI 等開源模型在本地運行:
script({...,model:"ollama:phi3"})
數(shù)據(jù)架構(gòu)
在 GenAIScript 中,我們可以強制 LLM 生成符合特定架構(gòu)的數(shù)據(jù)。這種方法效果相當不錯,并且 GenAIScript 還會提供自動驗證功能。GenAIScript 支持的架構(gòu)比完整的 JSON 架構(gòu)規(guī)范要簡單,建議使用簡單的架構(gòu)以避免混淆 LLM,然后再將其導(dǎo)入到你的應(yīng)用特定的數(shù)據(jù)格式中。
你可以使用 defSchema 來定義提示輸出的 JSON/YAML 架構(gòu)。例如,下面定義了一個城市列表的架構(gòu):
constschema=defSchema("CITY_SCHEMA",{
type:"array",
description:"Alistofcitieswithpopulationandelevationinformation.",
items:{
type:"object",
description:"Acitywithpopulationandelevationinformation.",
properties:{
name:{type:"string",description:"Thenameofthecity."},
population:{type:"number",description:"Thepopulationofthecity."},
url:{type:"string",description:"TheURLofthecity'sWikipediapage."}
},
required:["name","population","url"]
}
})
$`GeneratedatausingJSONcompliantwith${schema}.`
根據(jù) TypeChat 的 “All You Need Is Types” 方法,架構(gòu)會在插入 LLM 提示前轉(zhuǎn)換成 TypeScript 類型。例如,上面的 CITY_SCHEMA 類型如下:
//Alistofcitieswithpopulationandelevationinformation.
typeCITY_SCHEMA=Array<{
????//?The?name?of?the?city.
????name:?string,
????//?The?population?of?the?city.
????population:?number,
????//?The?URL?of?the?city's?Wikipedia?page.
????url:?string,
}>
一旦定義了架構(gòu),你可以告訴 LLM 根據(jù)這個架構(gòu)生成數(shù)據(jù)。你可以通過以下方式生成符合 CITY_SCHEMA 的 JSON 數(shù)據(jù):
constschema=defSchema("CITY_SCHEMA",{
type:"array",
description:"Alistofcitieswithpopulationandelevationinformation.",
items:{
type:"object",
description:"Acitywithpopulationandelevationinformation.",
properties:{
name:{type:"string",description:"Thenameofthecity."},
population:{type:"number",description:"Thepopulationofthecity."},
url:{type:"string",description:"TheURLofthecity'sWikipediapage."}
},
required:["name","population","url"]
}
})
$`GeneratedatausingJSONcompliantwith${schema}.`
生成的數(shù)據(jù)示例:
[
{
"name":"NewYork",
"population":8398748,
"url":"https://en.wikipedia.org/wiki/New_York_City"
},
{
"name":"LosAngeles",
"population":3990456,
"url":"https://en.wikipedia.org/wiki/Los_Angeles"
},
{
"name":"Chicago",
"population":2705994,
"url":"https://en.wikipedia.org/wiki/Chicago"
}
]
當生成的 JSON/YAML 內(nèi)容帶有架構(gòu)標識符時,GenAIScript 會自動驗證其是否符合定義的架構(gòu)。你可以在腳本運行時使用 parsers.validateJSON 來驗證 JSON 數(shù)據(jù):
constvalidation=parsers.validateJSON(schema,json)
特性和功能
文本文件處理
GenAIScript 支持從 PDF、DOCX 等文件中提取文本內(nèi)容,比如處理和解析 PDF 文件:
def("PDF",env.files,{endsWith:".pdf"})
const{pages}=awaitparsers.PDF(env.files[0])
def 函數(shù)將自動解析 PDF 文件并從中提取文本,parsers.PDF 函數(shù)會讀取 PDF 文件并嘗試將其干凈地轉(zhuǎn)換為適合 LLM 的文本格式。
表格數(shù)據(jù)處理
可以從 CSV、XLSX 等表格文件中提取數(shù)據(jù)并進行處理。
def("DATA",env.files,{endsWith:".csv",sliceHead:100})
constrows=awaitparsers.CSV(env.files[0])
defData("ROWS",rows,{sliceHead:100})
文件操作
GenAIScript 提供了對工作區(qū)文件系統(tǒng)以及在用戶界面中選定文件的訪問權(quán)限。
env.files 變量包含了通過用戶界面或命令行選中的文件數(shù)組,你可以直接在 def 函數(shù)中傳遞并添加額外過濾條件。
def("PDFS",env.files,{endsWith:".pdf"})
使用 defFileOutput 指定允許輸出的文件路徑及其用途描述。
defFileOutput("src/*.md","Productdocumentationinmarkdownformat")
使用 glob 模式在工作區(qū)中查找文件:
constmds=awaitworkspace.findFiles("**/*.md")
def("DOCS",mds)
使用 grep 方法在工作區(qū)中搜索含有特定模式的文件內(nèi)容:
const{files}=awaitworkspace.grep("example","**/*.md")
def("FILE",files)
讀取 JSON 文件內(nèi)容:
constdata=awaitworkspace.readJSON("data.json")
將文本內(nèi)容寫入文件:
awaitworkspace.writeText("output.txt","Hello,world!")
LLM 工具
你可以注冊 JavaScript 函數(shù)作為工具來使用。
defTool(
"weather",
"queryaweatherwebapi",
{location:"string"},
async(args)=>
awaitfetch(`https://weather.api.api/?location=${args.location}`)
)
注冊 JavaScript 函數(shù)作為工具并結(jié)合 prompt 成為代理。
defAgent( "git", "QueryarepositoryusingGittoaccomplishtasks.", `YourareahelpfulLLMagentthatcanusethegittoolstoquerythecurrentrepository. AnswerthequestioninQUERY. -Thecurrentrepositoryisthesameasgithubrepository.`, {model,system:["system.github_info"],tools:["git"]} ) thenuseitasatool script({tools:"agent"}) $`Doastatisticalanalysisofthelastcommits`
內(nèi)置 RAG
支持矢量搜索功能。
const{files}=awaitretrieval.vectorSearch("cats","**/*.md")
運行代碼
LLM 可以在沙箱環(huán)境下運行代碼。
script({tools:["python_code_interpreter"]})
也可以在 Docker 容器中運行代碼。
constc=awaithost.container({image:"python:alpine"})
constres=awaitc.exec("python--version")
還可以運行 Prompty 文件。
--- name:poem --- Writemeapoem
應(yīng)用示例
示例1:生成 Git 提交信息
gcm 腳本提供了生成提交信息的引導(dǎo)流程。它會根據(jù) Git 倉庫中的暫存變更生成一個提交信息,并引導(dǎo)用戶提交這些變更或重新生成提交信息。
首先,我們定義 script 函數(shù),設(shè)置腳本的標題和描述,并指定要使用的模型:
script({
title:"gitcommitmessage",
description:"Generateacommitmessageforallstagedchanges",
model:"openai:gpt-4o",
})
接下來,使用 git diff 檢查你 Git 倉庫中的暫存變更。如果沒有暫存任何變更,GenAI 會通知你將所有變更暫存:
//檢查暫存的變更,如果沒有則暫存所有變更
constdiff=awaitgit.diff({
staged:true,
askStageOnEmpty:true,
})
if(!diff)cancel("nostagedchanges")
console.log(diff.stdout)//輸出變更內(nèi)容供你查看
此部分是關(guān)鍵。我們進入一個循環(huán),根據(jù) diff 生成提交信息。如果你對生成的信息不滿意,可以選擇編輯、接受或重新生成:
letchoice
letmessage
do{
//生成一個符合規(guī)范的Git提交信息
constres=awaitrunPrompt((_)=>{
_.def("GIT_DIFF",diff,{maxTokens:20000,language:"diff"})
_.$`GenerateagitconventionalcommitmessageforthechangesinGIT_DIFF.
-doNOTaddquotes
-maximum50characters
-useemojis`
})
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("Pushchanges?",{default:true}))
console.log((awaithost.exec("gitpush")).stdout)
}
使用以下命令在終端運行腳本:
npxgenaiscriptrungcm
這就是完整的 gcm 腳本實現(xiàn),通過運行上述命令,可以自動化生成 Git 提交信息并進行提交。
示例2:圖片替代文本生成器
圖片的替代文本(alt text)對于使圖片對包括視障人士在內(nèi)的所有人可接觸是至關(guān)重要的。它為圖片提供了一種文字描述,使屏幕閱讀器能夠?qū)?nèi)容傳達給看不到圖片的用戶。然而,為圖片編寫替代文本可能非常耗時,尤其是當你要處理大量圖片時。這時,AI 可以大顯身手。使用類似于 OpenAI 的 GPT-4 的語言模型,你可以自動生成圖片替代文本,從而節(jié)省時間和精力。
這個示例展示了如何構(gòu)建一個工具來為 Markdown 文件中的圖片生成替代文本。腳本主要由 Typescript 代碼組成,并在 GenAIScript CLI 中運行。讓我們來逐步解析這些代碼。
首先,我們定義 script 函數(shù),設(shè)置腳本的標題和描述,并指定要使用的模型:
script({
title:"ImageAltTextify",
description:"Generatealttextforimagesinmarkdownfiles",
parameters:{
docs:{
type:"string",
description:"pathtosearchformarkdownfiles",
default:"**.{md,mdx}",
},
force:{
type:"boolean",
description:"regeneratealldescriptions",
default:false,
},
assets:{
type:"string",
description:"imageassetspath",
default:"./assets/images",//修改為你的資產(chǎn)文件夾路徑
},
},
})
在這里,我們聲明了腳本,并使用 OpenAI 的 GPT-4 模型。我們還設(shè)置了文件路徑、是否重新生成所有描述,以及資產(chǎn)路徑等參數(shù)。
接下來,提取環(huán)境變量:
const{docs,force,assets}=env.vars
然后,我們定義一個正則表達式來查找 Markdown 中的圖片:
constrx=force
?/![[^]]*](([^)]+.(png|jpg)))/g//匹配包含或不包含替代文本的圖片
:/]+.(png|jpg)))/g//匹配沒有替代文本的圖片
const{files}=awaitworkspace.grep(rx,{
path:docs,
glob:"*.mdx",
readText:true,
})
我們使用 workspace.grep 來查找指定文檔中符合正則表達式模式的所有內(nèi)容。
對于找到的每個圖片 URL,我們使用一個內(nèi)聯(lián)提示來生成替代文本:
for(constfileoffiles){
const{filename,content}=file
constmatches=content.matchAll(rx)
for(constmatchofmatches){
consturl=match[1]
constresolvedUrl=resolveUrl(filename,url)
const{text}=awaitrunPrompt(
(_)=>{
_.defImages(resolvedUrl)
_.$`
Youareanexpertinassistivetechnology.
Youwillanalyzetheimage
andgenerateadescriptionalttextfortheimage.
-Donotincludealttextinthedescription.
-Keepitshortbutdescriptive.
-Donotgeneratethe[character.`
},
{
system:["system.safety_harmful_content"],
model:"openai:gpt-4o",
}
)
imgs[url]=text
}
}
最后,我們將替代文本更新到 Markdown 內(nèi)容中:
constnewContent=content.replace(
rx,
(m,url)=>`![${imgs[url]??""}](${url})`
)
if(newContent!==content)awaitworkspace.writeText(filename,newContent)
我們使用生成的替代文本替換原始內(nèi)容中的占位符,并保存更新后的文件。
你需要通過 GenAIScript CLI 來運行這個腳本。如果你還沒有安裝 GenAIScript CLI,請查看安裝指南。安裝后,可以通過以下命令運行腳本:
npxgenaiscriptruniat
腳本默認導(dǎo)入了一個安全系統(tǒng)消息,以防止生成有害文本內(nèi)容:
//safetysystemmessagetopreventgeneratingharmfultext system:["system.safety_harmful_content"],
通過這個腳本,你可以自動化生成 Markdown 文件中圖片的替代文本,大大提高工作效率并確保內(nèi)容的可訪問性。
-
微軟
+關(guān)注
關(guān)注
4文章
6739瀏覽量
107729 -
人工智能
+關(guān)注
關(guān)注
1815文章
50053瀏覽量
264526 -
腳本語言
+關(guān)注
關(guān)注
0文章
48瀏覽量
8559 -
生成式AI
+關(guān)注
關(guān)注
0文章
538瀏覽量
1067
原文標題:微軟推出全新的生成式AI腳本:GenAIScript
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
微軟HoloLens正研發(fā)AI芯片 可識別語音和圖像
NVIDIA 攜手微軟,在生成式 AI 的新時代推動 Windows PC 創(chuàng)新
什么是生成式AI?生成式AI的四大優(yōu)勢
虹軟圖像深度恢復(fù)技術(shù)與生成式AI的創(chuàng)新 生成式AI助力
ABB攜手微軟將生成式AI引入工業(yè)應(yīng)用
生成式AI投資規(guī)模有望突破2千億美元!波音、IBM……微軟全球業(yè)務(wù)線合作再升級!
利用 NVIDIA Jetson 實現(xiàn)生成式 AI
微軟生成式AI腳本GenAIScript的安裝與配置
評論