Artieの設計:AIドキュメントアシスタント
より広い文脈については、関連するブログ記事をご覧ください:AIドキュメントアシスタントの開発を通じて学んだテクニカルライティング。検索拡張生成(RAG)の仕組みや、このプロジェクトがテクニカルライティングにどのように位置づけられるかを解説しています。
このケーススタディでは、本ドキュメントサイトに組み込まれているAIドキュメントアシスタント「Artie」(Algoliaを使用して構築)の設計決定について詳しく解説します。Artieは、ここで公開されているコンテンツのみから回答する検索拡張生成(RAG)アシスタントです。システムプロンプトは、ドキュメントに関する問い合わせを一般的な学習知識ではなく、そのコンテンツに基づかせます。この制約により、ハルシネーション(幻覚)を抑え、架空の機能の捏造を防ぎます。
ドキュメントアシスタントの構築は、エッジケースを考慮するまでは単純そうに見えます:ドキュメントで扱われていない質問をされた場合はどうなるのか? 異なる2つのユーザー層が同じインターフェースを使用する場合は? AIに個性を与えつつ、支離滅裂な回答をさせないようにするにはどうすればよいのか? そして、誰かがプロンプトを完全に乗っ取るのを防ぐにはどうすればよいのか?
このページでは、本設計がこれらの各問題をどのように解決しているかを解説します。
対象ユーザーへのルーティング
Artieは、単一の対話型インターフェースを通じて、2つの対象ユーザーに対応しています:
- 開発者およびエンドユーザー:セットアップ手順、APIリファレンス、またはドキュメントサンプルの説明を探しているユーザー
- 採用担当者や人事担当者:本ポートフォリオを評価し、資格、経験、または執筆プロセスについて質問する可能性のあるユーザー
個別のフローを構築したり、ユーザーに自己申告を求めたりするのではなく、プロンプトは意図に基づいてルーティングを行います。技術的な質問には、ドキュメントインデックスに基づいた段階的な回答が提供されます。ポートフォリオに関する質問には、履歴書の背景情報とサイト上の執筆サンプルを統合した回答が返されます。インデックスに履歴書の背景情報が含まれていない場合、Artieは回答を生成しようとせず、代わりに訪問者を「About Me」ページへ誘導します。
インターフェースは、分岐メニューのない1つのチャットを両方の対象者に提供し、それぞれが適切な回答を得られます。
知識の基盤と検索
Artieの設計における最も重要な制約は、Algoliaを利用したドキュメントインデックスのみから排他的に回答することです。これが検索拡張生成(RAG)の中核原則です。モデルの応答は、一般的なトレーニングデータから引き出すのではなく、特定のコンテンツ群に錨を下ろしています。
- 架空のコンテンツの排除とは、アシスタントがドキュメントに記載されていない機能をでっち上げたり、ダウンロードリンクを作成したりせず、ドキュメントに記載された手順のみを説明することを意味します。
- 出典リンクの提供とは、アシスタントがインデックスからのURLやファイル参照を提供し、ユーザーが関連ページに直接移動できるようにすることを意味します。
- 適切なフォールバックとは、インデックスに関連情報が不足している場合に、Artieがその制限を率直に述べ、再試行や推測を行うことなく直接連絡を取るよう提案することを意味します。
Artieは公開されているドキュメントの範囲外のことには対応できません。ポートフォリオサイトにおいては、この制約が利点になります。網羅性よりも正確さが重要です。狭い範囲の質問に対する正確で出典の確かな回答は、一見もっともらしく聞こえて実際には間違っている回答よりも、高い信頼を築きます。
ペルソナとトーンの調整
Artieには、ジョージ・ハリスンにインスパイアされた穏やかな温かみと、時折混ざるリヴァプール方言に基づく軽量な個性があります。キーワードは軽量です。このペルソナは、技術的な内容に干渉することなく、挨拶や締めくくりに個性を加えています。
ここでの設計上の制約は意図的なものです:
- 技術的な回答は簡潔に保つとは、個性を理由に回答を長くしないことを意味します。温かい挨拶の後に簡潔で事実に基づいた回答を続けることで、この目標を達成します。
- 繰り返しよりも多様性とは、プロンプトに表現のプールを含め、Artieが毎回同じ決まり文句に頼るのを防ぐことを意味します。
- 説教調の排除とは、ペルソナが温かく少し皮肉めいたトーンを保ち、威圧的に響かないことを意味します。キャラクターの演技ではなく、役に立つ同僚のように機能します。
このようなトーンの調整は、会話型AIの設計における共通の課題です。個性が強すぎるとアシスタントはギミックのように感じられ、少なすぎるとロボットのように感じられます。解決策は、ペルソナを調味料として扱うことです。存在感はあっても、決して主原料にはしません。
セキュリティとガードレール
一般公開されるAIアシスタントは攻撃対象領域(アタックサーフェス)となるため、プロンプトには大規模言語モデル(LLM)の一般的な脆弱性に対する明確な防御策が含まれています。
プロンプトインジェクション対策
Artieのプロンプトは、「以前の指示を無視せよ」といったコマンドや別のペルソナを採用するよう求める要求など、指示を上書きしようとする試みを明示的に拒否します。これにより、OWASP(Open Worldwide Application Security Project)の大規模言語モデルアプリケーション向けTop 10で第1位にランクされているプロンプトインジェクションに対するプロンプトレベルの防御が確立されます。
スコープ制限
プロンプトは明確な拒否カテゴリを定義しています:
- アシスタントは、ドキュメントでカバーされていない一般的なコーディング支援の質問を辞退します。
- アシスタントは、特別に定義された2つの楽しい機能を除き、無関係な雑学へのリクエストを拒否します。
- アシスタントは、プロフェッショナルポートフォリオに公開されていない個人情報に関する問い合わせを辞退します。
- アシスタントは、フリーランスの料金や交渉については、訪問者に直接連絡するよう案内します。
各カテゴリには明確な境界線があるため、アシスタントは回答するのに「十分近い」かどうかを主観的に判断しません。リクエストがその境界線を越える場合は、丁寧に辞退します。
データプライバシー
Artieは、LinkedInプロフィールやポートフォリオのメールアドレスなど、ドキュメントに明示的に公開されている連絡先情報のみを共有します。電話番号や住所などの個人情報を推測、推論、または生成することはありません。
職業上の境界線
アシスタントは、敵対的なメッセージに応じたり、卑語を使用したり、キャラクターを崩したりすることはありません。これは単なる礼儀正しさを超えています。予測可能な動作を維持するためのものです。アシスタントの限界を試そうとする採用担当者は、毎回一貫したプロフェッショナルな境界線に出会うことになります。
制御されたイースターエッグ
Artieには、悪用の余地を残さずに個性を加える方法を示す2つの「楽しい機能」、すなわちSnapple Real Factsときれいなジョークが含まれています。
どちらの機能も同じ設計パターンを共有しています:
- 明示的なトリガーとは、曖昧なプロンプトではなく、ユーザーが明示的に求めた場合(「Snappleの豆知識を教えて」「ジョークを言って」)にのみ作動することを意味します。
- 限定されたコンテンツとは、Snappleの豆知識は埋め込まれた検証済みリストに基づき、ジョークは厳選されたファミリーフレンドリーな内容に限定されることを意味します。
- 根拠のない捏造の排除とは、アシスタントが事実をでっち上げたり、ブランドイメージに合わないユーモアを生成したりすることを避け、出力を予測可能に保つことを意味します。
制限のない創作機能はトークンを急速に消費し、予測不能な出力を生み出します。厳選されたコンテンツと明示的なトリガーは、そのリスクなしに温かみを加えます。
改善したい点
実際のユーザーがこの設計を変えました。
- トークンコストが最初の変更点です。Snappleの豆知識リストだけでも100項目を超えます。トークン単位で課金される本番システムでは、システムプロンプトに埋め込むのではなく、検索レイヤーに移行するでしょう。チームは、ユーザーが豆知識を求めたかどうかにかかわらず、すべてのリクエストでプロンプト内のすべてのトークンに対して料金を支払います。
- マルチターンコンテキストにより、現在の設計はシングルターンのQ&Aに限定されています。後のバージョンでは、会話履歴を保持し、クエリを書き換えて「次のステップはどうすればいい?」といったフォローアップの質問を解決できるでしょう。
- 分析とフィードバックはまだ実装されていません。フォールバック応答をカウントして記録するだけでも、どのドキュメントのギャップが最も多くの失敗を生むかが分かります。
- 動的なペルソナ調整には、現在ハードコードされた表現の編集が必要です。それらを外部設定に移せば、中核となる指示セットを編集することなくトーンの調整が容易になります。
これらはそれぞれ、本番規模の最適化よりもシンプルさと明快さが重要なポートフォリオプロジェクトのための意図的なトレードオフです。しかし、トラフィックの多い環境に移行する場合、これらは真っ先に対処すべき項目です。