mcpField
G
GenAIScript

GenAIScript

github.com/microsoftフレームワーク・SDK2.9k59 週間前に更新

GenAIScript について

GenAIScript は、JavaScript でプロンプトをプログラム的に組み立て、LLM・ツール・データをコード上で連携させるスクリプティングフレームワークです。Visual Studio Code 連携とコマンドラインを備え、GenAI タスクを自動化したい開発者向けです。

主な機能

  1. 01JavaScript や TypeScript でのプロンプト構築
  2. 02スキーマによる構造化出力の定義・検証・修復
  3. 03PDF、DOCX、CSV、XLSX の解析
  4. 04ツールとエージェントの登録、MCP ツールにも対応
  5. 05ベクトル検索の内蔵と Ollama などのローカルモデル
  6. 06CLI と API による自動化、テストと評価

活用シーン

  1. 01PDF や表計算ファイルからの構造化 JSON の抽出
  2. 02GitHub Actions や Azure DevOps での Pull Request レビュー自動化
  3. 03関数をツールとして登録しエージェントに組み合わせる
  4. 04動画の文字起こしとスクリーンショットを LLM で分析

MCP 対応

Model Context Protocol(MCP)のツールに対応しており、独自の JavaScript ツールと並べて LLM から呼び出せます。

詳細

黄色い正方形の中に、黒の小文字で「gen」、その上に黒の大文字で「AI」と書かれている。

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 などからテキストを取り込む

PDF、DOCX などを操作できます。

def("PDF", env.files, { endsWith: ".pdf" })
const { pages } = await parsers.PDF(env.files[0])

📊 CSV や XLSX などからテーブルを取り込む

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 で自動化

CLI または 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 によるスポンサーシップを示唆したりしてはなりません。 第三者の商標やロゴを使用する場合は、その第三者のポリシーに従う必要があります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。