GenAIScript について
GenAIScript は、JavaScript でプロンプトをプログラム的に組み立て、LLM・ツール・データをコード上で連携させるスクリプティングフレームワークです。Visual Studio Code 連携とコマンドラインを備え、GenAI タスクを自動化したい開発者向けです。
主な機能
- 01JavaScript や TypeScript でのプロンプト構築
- 02スキーマによる構造化出力の定義・検証・修復
- 03PDF、DOCX、CSV、XLSX の解析
- 04ツールとエージェントの登録、MCP ツールにも対応
- 05ベクトル検索の内蔵と Ollama などのローカルモデル
- 06CLI と API による自動化、テストと評価
活用シーン
- 01PDF や表計算ファイルからの構造化 JSON の抽出
- 02GitHub Actions や Azure DevOps での Pull Request レビュー自動化
- 03関数をツールとして登録しエージェントに組み合わせる
- 04動画の文字起こしとスクリーンショットを LLM で分析
MCP 対応
Model Context Protocol(MCP)のツールに対応しており、独自の JavaScript ツールと並べて LLM から呼び出せます。
詳細
![]()
GenAIScript
プロンプティングはコーディング
JavaScript を使って LLM 向けのプロンプトをプログラムで組み立てられます。LLM、ツール、データをコードでオーケストレーションできます。
-
プロンプトを扱うための JavaScript ツールボックス
-
簡単かつ生産的に使えるようにする抽象化
-
Visual Studio Code とのシームレスな統合、または柔軟なコマンドライン
-
GitHub Copilot、GitHub Models、OpenAI、Azure OpenAI、Anthropic などを標準でサポート
-
📄 オンラインドキュメントは microsoft.github.io/genaiscript をご覧ください
-
💬 Discord サーバーに参加する
-
📝 最新ニュースはブログをご覧ください
-
📺 Mr. Maeda's Cozy AI Kitchen を視聴する
-
🤖 エージェント - llms-full.txt をご覧ください
Hello world
「hello world」の詩を生成する LLM スクリプトを作りたいとします。次のようなスクリプトを書くことができます。
$`Write a 'hello world' poem.`
$ 関数はプロンプトを作成するテンプレートタグです。このプロンプトは (設定済みの) LLM に送信され、詩が生成されます。
ファイル、データ、構造化出力を追加して、もう少し面白くしてみましょう。たとえば、プロンプトにファイルを含め、その出力をファイルに保存したいとします。次のようなスクリプトを書くことができます。
// read files
const file = await workspace.readText("data.txt")
// include the file content in the prompt in a context-friendly way
def("DATA", file)
// the task
$`Analyze DATA and extract data in JSON in data.json.`
def 関数はファイルの内容を取り込み、必要に応じて対象の LLM 向けに最適化します。また、GenAIScript のスクリプトは LLM の出力を解析し、data.json ファイルを自動的に抽出します。
🚀 クイックスタートガイド
Visual Studio Code 拡張機能をインストールするか、コマンドラインを使って、すぐに始められます。
✨ 機能
🎨 スタイリッシュな JavaScript と TypeScript
JavaScript または TypeScript を使って、プロンプトをプログラムで構築できます。
def("FILE", env.files, { endsWith: ".pdf" })
$`Summarize FILE. Today is ${new Date()}.`
🚀 高速な開発ループ
Visual Studio Code またはコマンドラインで、スクリプトの編集、デバッグ、実行、テストができます。
🔗 スクリプトの再利用と共有
スクリプトはファイルです。バージョン管理、共有、フォークができます。
// define the context
def("FILE", env.files, { endsWith: ".pdf" })
// structure the data
const schema = defSchema("DATA", { type: "array", items: { type: "string" } })
// assign the task
$`Analyze FILE and extract data to JSON using the ${schema} schema.`
📋 データスキーマ
スキーマを使って、データの定義、検証、修復ができます。Zod も標準でサポートしています。
const data = defSchema("MY_DATA", { type: "array", items: { ... } })
$`Extract data from files using ${data} schema.`
📄 PDF や DOCX などからテキストを取り込む
def("PDF", env.files, { endsWith: ".pdf" })
const { pages } = await parsers.PDF(env.files[0])
📊 CSV や XLSX などからテーブルを取り込む
def("DATA", env.files, { endsWith: ".csv", sliceHead: 100 })
const rows = await parsers.CSV(env.files[0])
defData("ROWS", rows, { sliceHead: 100 })
📝 ファイルの生成
LLM の出力からファイルや差分を抽出できます。変更内容は Refactoring UI でプレビューできます。
$`Save the result in poem.txt.`
FILE ./poem.txt
The quick brown fox jumps over the lazy dog.
🔍 ファイル検索
ファイルに対して grep やあいまい検索ができます。
const { files } = await workspace.grep(/[a-z][a-z0-9]+/, { globs: "*.md" })
分類
テキスト、画像、またはそれらの組み合わせを分類できます。
const joke = await classify(
"Why did the chicken cross the road? To fry in the sun.",
{
yes: "funny",
no: "not funny",
}
)
LLM ツール
JavaScript 関数をツールとして登録できます (ツールをサポートしないモデル向けのフォールバック付き)。Model Context Protocol (MCP) ツールにも対応しています。
defTool(
"weather",
"query a weather web api",
{ location: "string" },
async (args) =>
await fetch(`https://weather.api.api/?location=${args.location}`)
)
LLM エージェント
JavaScript 関数をツールとして登録し、ツールとプロンプトを組み合わせてエージェントを作成できます。
defAgent(
"git",
"Query a repository using Git to accomplish tasks.",
`Your are a helpful LLM agent that can use the git tools to query the current repository.
Answer the question in QUERY.
- The current repository is the same as github repository.`,
{ model, system: ["system.github_info"], tools: ["git"] }
)
その後、ツールとして使用します
script({ tools: "agent_git" })
$`Do a statistical analysis of the last commits`
git エージェントのソースを参照してください。
🔍 RAG を標準搭載
const { files } = await retrieval.vectorSearch("cats", "**/*.md")
🐙 GitHub Models と GitHub Copilot
GitHub Models または GitHub Copilot を通じてモデルを実行できます。
script({ ..., model: "github:gpt-4o" })
💻 ローカルモデル
Ollama や LocalAI を使用して、Phi-3 などのオープンソースモデルでスクリプトを実行できます。
script({ ..., model: "ollama:phi3" })
🐍 コードインタープリター
LLM にサンドボックス化された実行環境でコードを実行させることができます。
script({ tools: ["python_code_interpreter"] })
🐳 コンテナー
Docker コンテナー内でコードを実行できます。
const c = await host.container({ image: "python:alpine" })
const res = await c.exec("python --version")
動画処理
動画を文字起こしし、スクリーンショットを取得することで、LLM へのリクエストに効率よく渡せます。
// transcribe
const transcript = await transcript("path/to/audio.mp3")
// screenshots at segments
const frames = await ffmpeg.extractFrames("path_url_to_video", { transcript })
def("TRANSCRIPT", transcript)
def("FRAMES", frames)
🧩 LLM コンポジション
LLM を実行して、LLM 用のプロンプトを構築できます。
for (const file of env.files) {
const { text } = await runPrompt((_) => {
_.def("FILE", file)
_.$`Summarize the FILE.`
})
def("SUMMARY", text)
}
$`Summarize all the summaries.`
🅿️ Prompty のサポート
Prompty ファイルも実行できます。
---
name: poem
---
Write me a poem
プラグイン可能なシークレットスキャン
シークレットスキャンを使用して、チャットに含まれるシークレットを検出できます。
{
"secretPatterns": {
...,
"OpenAI API Key": "sk-[A-Za-z0-9]{32,48}"
}
}
⚙ コマンドラインまたは API で自動化
npx genaiscript run tlaplus-linter "*.tla"
import { run } from "genaiscript/api"
const res = await run("tlaplus-linter", "*.tla")
安全性を最優先
GenAIScript は、責任ある AI のためのシステムプロンプトを標準で提供し、Azure Content Safety にも対応しています。 これらを使用してコンテンツの安全性を検証できます。
script({ ...,
system: ["system.safety_harmful_content", ...],
contentSafety: "azure" // use azure content safety
})
const safety = await host.contentSafety()
const res = await safety.detectPromptInjection(env.vars.input)
💬 プルリクエストレビュー
コメント、レビュー、説明文の更新を通じて、プルリクエストのチェックに組み込めます。GitHub Actions と Azure DevOps パイプラインに対応しています。
npx genaiscript ... --pull-request-reviews
⭐ テストと評価
promptfoo を利用したテストと評価により、信頼性の高いプロンプトを構築できます。
script({ ..., tests: {
files: "penguins.csv",
rubric: "is a data analysis report",
facts: "The data refers about penguin population in Antarctica.",
}})
LLM に優しいドキュメント
ドキュメントの全内容が、https://microsoft.github.io/genaiscript/llms-full.txt で Markdown 形式として公開されています。お気に入りの RAG システムに直接取り込むことができます。
LLM クローラーの場合は、任意のドキュメント URL に .md サフィックスを付けると、生の Markdown コンテンツを取得できます。例: https://microsoft.github.io/genaiscript/guides/prompt-as-code.md (.md 拡張子に注意してください)
コントリビュート
コントリビュートを歓迎します。詳細と開発者向けのセットアップについては、CONTRIBUTING ページをご覧ください。
商標
このプロジェクトには、プロジェクト、製品、またはサービスの商標やロゴが含まれている場合があります。Microsoft の商標やロゴを正当に使用する場合は、 Microsoft's Trademark & Brand Guidelines に従う必要があります。 このプロジェクトを改変したバージョンで Microsoft の商標やロゴを使用する場合は、混乱を招いたり、Microsoft によるスポンサーシップを示唆したりしてはなりません。 第三者の商標やロゴを使用する場合は、その第三者のポリシーに従う必要があります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。