AI (Artificial Intelligence)
DrupalサイトにAIサービスを統合するための統一フレームワークを提供するモジュールです。OpenAI、Anthropic、Google Gemini、Azure、AWS Bedrock、Ollama、Mistral、Groqなど、複数のAIプロバイダーに対応しています。
ai
インストール
composer require 'drupal/ai:^1.2'
概要
AI (Artificial Intelligence)モジュールは、Drupalサイトに様々なAIモデルやサービスを統合するための包括的な抽象化レイヤーを提供します。このモジュールを使用することで、チャット、テキスト生成、画像生成、音声合成、音声認識、翻訳、エンベディング、コンテンツモデレーションなど、多様なAI機能をDrupalサイトに組み込むことができます。
主な特徴として、プロバイダー非依存のAPI設計により、異なるAIプロバイダー間での切り替えが容易です。また、プロンプト管理機能により、AIプロンプトをエンティティとして管理・再利用できます。豊富なサブモジュール群により、チャットボット、CKEditor連携、コンテンツ自動生成、翻訳支援など、様々なユースケースに対応しています。
開発者向けには、イベントシステムによるリクエスト/レスポンスのカスタマイズ、プラグインシステムによる拡張性、Function Calling/Tools機能によるAIエージェントの構築など、高度な機能も提供しています。
Features
- 複数AIプロバイダーの統一API:OpenAI、Anthropic、Google Gemini、Azure、AWS Bedrock、Ollama、Mistral、Groq、DeepL、ElevenLabs、Deepgramなど主要なAIサービスに対応
- 多様な操作タイプ:Chat(チャット)、Embeddings(エンベディング)、Text to Image(テキストから画像生成)、Text to Speech(テキストから音声生成)、Speech to Text(音声からテキスト変換)、Moderation(コンテンツモデレーション)、Translation(翻訳)、Image Classification(画像分類)など
- AIプロンプト管理システム:プロンプトをconfig entityとして管理し、プロンプトタイプによる分類と再利用が可能
- AIアシスタントAPI:デカップルドフロントエンドと連携可能なAIアシスタント機能を提供
- AIチャットボット:DeepChatベースのチャットボットUIをブロックとして配置可能
- CKEditor 5統合:エディタ内でAIによるテキスト生成、要約、トーン変更、翻訳、スペルチェックなどが可能
- AIオートメーター:コンテンツフィールドの自動生成(タクソノミー、画像ALTテキスト、要約、メタタグなど)
- AI翻訳:AIを使用したワンクリックコンテンツ翻訳機能
- コンテンツ提案:AIによるタグ提案、タイトル提案、可読性分析、トーン調整などの提案機能
- ロギング・オブザーバビリティ:AIリクエスト/レスポンスの詳細なログ記録とOpenTelemetry対応
- Function Calling/Tools:AIエージェントによる外部関数呼び出しとツール実行
- Vector Database連携:エンベディングを使用したセマンティック検索のためのベクトルDB統合
- セットアップウィザード:AIプロバイダーの設定を段階的にガイドするウィザード機能
Use Cases
AIチャットボットの設置
AI ChatbotサブモジュールとAI Assistant APIサブモジュールを有効化し、/admin/config/ai/ai-assistantでAIアシスタントを作成します。プロバイダー、モデル、システムプロンプト、利用可能なアクションを設定後、ブロック配置画面で「AI DeepChat Chatbot」ブロックを任意のリージョンに配置します。スタイル(toolbar、ChatGPT風、Bard風)、配置位置、ストリーミング有効化などをブロック設定で調整できます。
CKEditorでのAIテキスト生成
AI CKEditorサブモジュールを有効化し、テキストフォーマットの設定でCKEditor 5のツールバーに「AI CKEditor」ボタンを追加します。エディタ使用時にボタンをクリックするとAIダイアログが開き、テキスト補完、要約、トーン変更、翻訳、スペルチェックなどの機能を利用できます。バルーンメニュープラグインを追加すると、テキスト選択時にコンテキストメニューからAI機能にアクセスできます。
コンテンツフィールドの自動生成
AI Automatorsサブモジュールを有効化し、/admin/config/ai/ai-automators/fieldsでフィールドオートメーターを作成します。対象エンティティタイプ、バンドル、フィールドを選択し、オートメータータイプ(LLM Simple Text、LLM Taxonomy、LLM Image Alt Text等)を追加します。処理タイプ(直接保存、バッチ、キュー、フィールドウィジェット)を選択し、プロンプトテンプレートを設定します。コンテンツ保存時に自動的にAIがフィールド値を生成します。
AIを使用したコンテンツ翻訳
AI Translateサブモジュールを有効化し、/admin/config/ai/ai-translateで設定を行います。デフォルトプロンプト、言語別のモデル/プロンプト設定、参照エンティティの翻訳深度を設定します。コンテンツの翻訳タブで「AI Translate」ボタンをクリックすると、AIが自動的にコンテンツを翻訳します。Drushコマンド(drush ai:translate-entity)でバッチ翻訳も可能です。
フィールドへのAI提案機能追加
AI Content Suggestionsサブモジュールを有効化し、/admin/config/ai/suggestionsで設定を行います。フィールドウィジェットの設定で「Field Widget Actions」を有効化し、AI提案アクションを追加します。コンテンツ編集時にフィールド横にAIボタンが表示され、クリックするとタグ提案、タイトル提案、トーン調整、可読性分析などの提案を受けられます。
AIリクエストのログ記録と分析
AI Loggingサブモジュールを有効化し、/admin/config/ai/logging/settingsでログ設定を行います。ログの有効化、最大保存数、保存期間を設定後、/admin/config/ai/logging/collectionでログを確認できます。プロンプト、レスポンス、使用トークン数、処理時間などの詳細情報を記録します。本番環境での監視にはAI Observabilityサブモジュールも併用できます。
カスタムAIエージェントの構築
Function Calling機能を使用してカスタムAIエージェントを構築します。AiFunctionCallプラグインを作成して独自のツールを定義し、AiFunctionGroupプラグインでグループ化します。AIアシスタント設定で「Use function calling」を有効化し、作成したツールを有効化します。AIがユーザーの要求に応じて適切なツールを呼び出し、複雑なタスクを自動実行できます。
Drushでの対話的AIチャット
drush ai:chat コマンドを使用して、ターミナルからAIと対話できます。引数なしで実行すると対話モードになり、複数行のメッセージを入力してCtrl+Dで送信できます。--providerと--modelオプションでデフォルト以外のプロバイダー/モデルを指定できます。Drupal関連の質問に特化したシステムプロンプトがデフォルトで設定されています。
Tips
- 本番環境ではAPIキーを環境変数またはファイルストレージで管理し、設定にハードコードしない
- コスト管理のため、AI Loggingを有効にしてトークン使用量を監視する
- 複数のプロバイダーを設定し、タスクに応じて最適なモデルを使い分ける(高品質タスクにはGPT-4/Claude、軽量タスクにはGPT-3.5/Gemini Flash)
- プロンプトはAIプロンプトエンティティとして管理し、バージョン管理とテストを容易にする
- 大量のコンテンツを処理する場合はバッチ処理またはキュー処理を使用してサーバー負荷を分散
- チャットボットのシステムプロンプトでサイト固有の情報やガイドラインを明確に定義
- オートメーターのプロンプトにはDrupalトークンを活用して動的なコンテキストを提供
- 開発環境ではAI API Explorerを活用して各操作タイプのレスポンスを確認
- CommonMarkライブラリ(composer require league/commonmark)をインストールするとチャットボットの出力が整形される
- カスタムスタイルをテーマの deepchat_styles フォルダに配置してチャットボットの外観をカスタマイズ
Technical Details
Admin Pages 18
/admin/config/ai
AI関連のすべての設定にアクセスするためのメインメニューページ。サブモジュールをインストールすると、このページから各機能の設定にアクセスできます。
/admin/config/ai/settings
各操作タイプ(Chat、Embeddings、Text to Image等)のデフォルトプロバイダーとモデルを設定します。外部モジュールがこれらのデフォルト設定を使用してAI機能を提供します。
/admin/config/ai/setup
AIプロバイダーの設定を段階的にガイドするウィザード。プロバイダーモジュールのダウンロード、有効化、APIキー設定を順を追って行えます。
/admin/config/ai/providers
インストール済みのAIプロバイダーの一覧と設定状況を表示。各プロバイダーの詳細設定やモデル固有の設定にアクセスできます。
/admin/config/ai/vdb_providers
ベクトルデータベースプロバイダーの一覧と設定。Milvus、Pinecone、MySQLベクトルなどのVDBの設定を管理します。
/admin/config/ai/prompts
AIプロンプトをconfig entityとして管理。プロンプトを作成・編集・削除し、サイト全体で再利用できます。
/admin/config/ai/prompts/prompt-types
AIプロンプトタイプの管理。プロンプトタイプにより、必要な変数やトークンを定義できます。
/admin/config/ai/ai-external-moderation
外部モデレーション設定。チャットモデルを使用する前に、別のプロバイダーのモデレーションモデルでコンテンツをチェックする設定ができます。
/admin/config/ai/tools
利用可能なAIツール(Function Call/Tools)の一覧。AIエージェントが使用できるツールを確認できます。
/admin/config/ai/explorers
開発者向けのAI APIエクスプローラー。各操作タイプ(Chat、Embeddings、Text to Image等)のAPIをテストできます。
/admin/config/ai/ai-assistant
AIアシスタントの作成・管理。チャットボットやデカップルドフロントエンドで使用するアシスタントを設定します。
/admin/config/ai/ai-automators
AIオートメーターの設定メニュー。フィールドオートメーター、オートメーターツール、チェーン設定にアクセスできます。
/admin/config/ai/ai-automators/fields
フィールドオートメーターの設定。エンティティのフィールドに対してAIによる自動生成ルールを設定します。
/admin/config/ai/suggestions
AIコンテンツ提案の設定。フィールドウィジェットでのAI提案機能を設定します。
/admin/config/ai/logging
AIログの表示と設定。AIリクエスト/レスポンスの詳細なログを確認できます。
/admin/config/ai/logging/settings
AIロギングの設定。ログの保存期間、最大メッセージ数などを設定します。
/admin/config/ai/ai-translate
AI翻訳の設定。デフォルトプロンプト、言語別設定、翻訳後の動作などを設定します。
/admin/config/ai/observability
AIオブザーバビリティの設定。Drupalロガーおよび OpenTelemetryへのAIリクエストログ出力を設定します。
権限 19
Hooks 4
hook_deepchat_settings
DeepChatチャットボットの設定を変更するフック
hook_deepchat_buttons_alter
DeepChatメッセージのボタンを変更するフック
hook_deepchat_prepend_message
DeepChatメッセージの前に内容を追加するフック
hook_ai_chatbot_style_modules_alter
DeepChatスタイルを提供するモジュール一覧を変更するフック
Drush Commands 3
drush ai:chat
AIプロバイダーにメッセージを送信してチャット応答を取得
drush ai:translate-entity
エンティティのAI翻訳を作成
drush ai:translate-text
テキストのAI翻訳を実行
Troubleshooting 6
1. プロバイダーモジュールが有効化されているか確認 2. KeyモジュールでAPIキーが正しく設定されているか確認 3. プロバイダーの設定ページで接続テストを実行 4. APIキーの権限やクォータを確認
1. AIアシスタントが正しく設定されているか確認 2. 選択したプロバイダーとモデルが利用可能か確認 3. ブラウザの開発者ツールでネットワークエラーを確認 4. Drupalのエラーログを確認(/admin/reports/dblog) 5. CSRFトークンエラーの場合はキャッシュをクリア
1. AI CKEditorサブモジュールが有効か確認 2. テキストフォーマット設定でAI CKEditorプラグインが有効か確認 3. ユーザーに「use ai ckeditor」権限があるか確認 4. CKEditor 5が正しく設定されているか確認
1. AI Automatorsサブモジュールとその依存関係(Token)が有効か確認 2. オートメーター設定が正しいエンティティタイプ/バンドル/フィールドを指定しているか確認 3. 処理タイプに応じた設定(キュー処理の場合はcronが動作しているか)を確認 4. プロンプトに必要なトークンが含まれているか確認
1. 翻訳プロンプトを調整してより具体的な指示を追加 2. 言語別のモデル設定でより高性能なモデルを選択 3. 長いコンテンツの場合はチャンキング設定を確認 4. 特定のフィールドタイプの翻訳に問題がある場合はカスタムプロンプトを作成
1. PHPのmax_execution_time設定を増やす 2. バッチ処理またはキュー処理を使用 3. より高速なモデルを選択 4. リクエストのコンテンツサイズを削減
Security Notes 8
- APIキーは必ずKeyモジュールを使用して安全に保存し、設定ファイルや環境変数で直接公開しない
- AIチャットボットへのアクセスは適切な権限設定で制限し、匿名ユーザーのアクセスを慎重に検討
- ユーザー入力をAIに送信する前にサニタイズし、プロンプトインジェクション攻撃を防止
- 外部モデレーション機能を使用して、不適切なコンテンツの生成を防止
- AIが生成したコンテンツを公開前にレビューするワークフローを検討(translation_status: create_draft)
- ログに機密情報が含まれる可能性があるため、AI Loggingへのアクセスを管理者に制限
- Rate Limitingを実装してAPIコストの予期せぬ増加を防止
- AIアシスタントのアクセスをロールベースで制限し、機密データへのアクセスを制御