ai-chat-studio について
AI Chat Studioは、アプリケーション開発者向けのマルチLLMチャット編成フレームワークで、300種類以上のアシスタントプリセット、モデルルーティング、会話管理を提供します。タスクの特性や性能・コスト・遅延の要件に応じてモデルを選び、プロンプトとパラメーターを設定します。
主な機能
- 01300種類以上のアシスタントプリセット
- 02タスクに応じたモデルルーティング
- 03複数プロバイダーのモデル設定
- 04会話履歴とコンテキストの管理
- 05チャット応答のストリーミング
活用シーン
- 01タスク要件に応じたモデル選択
- 02ドメイン設定を備えたAIアシスタントの導入
- 03複数プロバイダーで同じプロンプトの出力を比較
- 04アプリケーション内のマルチモデルチャット管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ itallstartedwithaidea/ agent-skills --skill ai-chat-studioインストール後、Claude Code で/ai-chat-studioを入力して読み込まれたか確認します。
詳細
AI Chat Studio
googleadsagent.ai™ による Agent Skills™ の一部です
説明
AI Chat Studio は、300 以上のアシスタントプリセット、インテリジェントなモデルルーティング、会話管理を備えたマルチ LLM チャットオーケストレーションフレームワークを提供します。エージェントは複数の言語モデルプロバイダー(OpenAI、Anthropic、Google、オープンソースモデル)とのやり取りを設定・管理し、能力、コスト、レイテンシの要件に基づいて各タスクに最適なモデルを選択します。
すべてのタスクに最も高性能なモデルが必要なわけではありません。コードレビューには推論能力の高いモデルが適しています。翻訳タスクなら中位モデルで十分に対応でき、単純な書式変更タスクに高速で安価なモデルを超えるものを使うのは無駄です。このスキルは、タスクの特性とモデルの能力を照合するインテリジェントなルーティングを実装し、重要な品質を維持しながらコストを 40~60%削減します。
300 以上のアシスタントプリセットには、コード生成、テクニカルライティング、データ分析、クリエイティブなアイデア出し、カスタマーサポート、法務レビューなど、一般的なタスク向けのドメイン固有のシステムプロンプト、温度設定、出力形式の制約が組み込まれています。各プリセットは品質ベンチマークでテストされ、最も高い性能を発揮するモデルがタグ付けされています。
使用する場面
- アプリケーションでマルチプロバイダーの LLM アクセスを設定する
- コストと品質のトレードオフに基づいて、タスクを最適なモデルにルーティングする
- 会話履歴とコンテキストウィンドウを管理する
- 厳選したプリセットを使って、ドメイン固有の AI アシスタントをデプロイする
- ストリーミング応答を備えたチャットインターフェースを構築する
- 同じプロンプトに対するモデルの出力をプロバイダー間で比較する
仕組み
graph TD
A[User Message] --> B[Task Classifier]
B --> C{Task Type}
C -->|Complex Reasoning| D[Claude 4 / GPT-4o]
C -->|Code Generation| E[Claude 4 / Codestral]
C -->|Translation| F[GPT-4o-mini / Gemini Flash]
C -->|Simple Format| G[Haiku / Flash]
D --> H[Apply Preset: System Prompt + Params]
E --> H
F --> H
G --> H
H --> I[Manage Context Window]
I --> J[Stream Response]
J --> K[Log Usage + Cost]
タスク分類器が受信メッセージを分析して複雑さとドメインを特定し、対応可能なモデルの中から最も費用対効果の高いモデルにルーティングします。プリセットはドメイン固有のシステムプロンプトとパラメーター調整を提供します。
実装
interface ModelConfig {
provider: "openai" | "anthropic" | "google" | "ollama";
model: string;
maxTokens: number;
costPer1kInput: number;
costPer1kOutput: number;
capabilities: string[];
}
const MODEL_REGISTRY: ModelConfig[] = [
{ provider: "anthropic", model: "claude-sonnet-4-20250514", maxTokens: 8192,
costPer1kInput: 0.003, costPer1kOutput: 0.015, capabilities: ["reasoning", "code", "analysis"] },
{ provider: "openai", model: "gpt-4o-mini", maxTokens: 4096,
costPer1kInput: 0.00015, costPer1kOutput: 0.0006, capabilities: ["general", "translation", "format"] },
{ provider: "google", model: "gemini-2.0-flash", maxTokens: 8192,
costPer1kInput: 0.0001, costPer1kOutput: 0.0004, capabilities: ["general", "fast", "multimodal"] },
];
interface AssistantPreset {
id: string;
name: string;
systemPrompt: string;
temperature: number;
preferredModels: string[];
tags: string[];
}
class ChatRouter {
constructor(private models: ModelConfig[], private presets: Map<string, AssistantPreset>) {}
route(message: string, presetId?: string): { model: ModelConfig; preset?: AssistantPreset } {
const preset = presetId ? this.presets.get(presetId) : undefined;
const taskType = this.classifyTask(message);
const candidates = this.models.filter(m =>
m.capabilities.some(c => taskType.requiredCapabilities.includes(c))
);
const selected = candidates.sort((a, b) => a.costPer1kInput - b.costPer1kInput)[0];
return { model: selected, preset };
}
private classifyTask(message: string): { type: string; requiredCapabilities: string[] } {
const lower = message.toLowerCase();
if (lower.includes("debug") || lower.includes("refactor") || lower.includes("architect"))
return { type: "complex", requiredCapabilities: ["reasoning", "code"] };
if (lower.includes("translate") || lower.includes("rewrite"))
return { type: "simple", requiredCapabilities: ["general", "translation"] };
return { type: "general", requiredCapabilities: ["general"] };
}
}
class ConversationManager {
private history: Array<{ role: string; content: string }> = [];
private maxContextTokens: number;
constructor(maxContextTokens: number = 100_000) {
this.maxContextTokens = maxContextTokens;
}
addMessage(role: string, content: string): void {
this.history.push({ role, content });
this.trimToContextWindow();
}
getHistory(): Array<{ role: string; content: string }> {
return [...this.history];
}
private trimToContextWindow(): void {
while (this.estimateTokens() > this.maxContextTokens && this.history.length > 2) {
this.history.splice(1, 1);
}
}
private estimateTokens(): number {
return this.history.reduce((sum, m) => sum + Math.ceil(m.content.length / 4), 0);
}
}
ベストプラクティス
- 単純なタスクは安価なモデルにルーティングします。クエリの 80%には最先端のモデルは不要です
- 体感レイテンシを改善するため、すべてのチャットでストリーミング応答を実装します
- システムプロンプトと直近のメッセージを保持しながら、会話履歴の中間部分を削除します
- ルーティングルールを継続的に最適化できるよう、モデルの選択理由とコストを併せて記録します
- 本番環境にデプロイする前に、ベンチマークデータセットを使ってプリセットをテストします
- プライマリプロバイダーが利用できない場合に備えて、すべてのルートにフォールバックモデルを用意します
プラットフォームの互換性
| プラットフォーム | サポート | 備考 |
|---|---|---|
| Cursor | 完全対応 | マルチモデル設定 |
| VS Code | 完全対応 | 拡張機能ベースの LLM アクセス |
| Windsurf | 完全対応 | 組み込みのモデルルーティング |
| Claude Code | 完全対応 | マルチプロバイダー対応 |
| Cline | 完全対応 | モデル選択設定 |
| aider | 完全対応 | 複数のモデルバックエンド |
関連スキル
キーワード
ai-chat multi-llm model-routing assistant-presets conversation-management streaming cost-optimization chat-studio
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License