mcpField
A
AI Chat Application with RAG and MCP Servers

AI Chat Application with RAG and MCP Servers

ローカル
github.com/garrardkitchenAI・エージェント276 週間前に更新

AI Chat Application with RAG and MCP Servers について

この.NET Aspireサンプルは、カスタムPDFデータの検索とMCPによるコンテキスト拡張をAIチャットに組み合わせています。RAGとMCPを試す開発者向けで、GitLabグループ検索ツールを備え、GitHub ModelsとOpenAIエンドポイントに対応します。

主な機能

  1. 01アップロードしたPDFの内容に基づくチャット
  2. 02MarkdownからPDFを作成
  3. 03MCPツールによるGitLabグループ検索
  4. 04GitHub ModelsまたはOpenAIエンドポイントの利用

活用シーン

  1. 01アップロードしたPDFに基づく質問
  2. 02MarkdownをPDFの資料に変換
  3. 03検索パターンによるGitLabグループの検索
  4. 04.NET AspireでのRAGとMCP構成の検証

MCP 対応

WhoIsツールとGitLab SearchGroupsツールを公開するHTTP MCPサーバーを含みます。チャットアプリはこれらをコンテキスト拡張として利用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ai-chat-example": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector"
]
}
}
}
起動コマンドnpx -y @modelcontextprotocol/inspector

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@modelcontextprotocol/inspector

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

RAG と MCP サーバーを使用した AI チャットアプリケーション

.NET Aspire の AI チャットアプリケーションです。AI 言語モデルとベクトルストアとしての Qdrant を使用して、カスタムデータ(RAG - イベント駆動)やコンテキスト拡張(MCP サーバー)とチャットする方法を紹介します。

メモ

このバージョンでは、まだ Azure にデプロイできません。この作業が完了すると、Web アプリケーション(Chat と Admin)、MCP サーバー、Functions アプリはすべて Azure Container Apps になります。.NET Aspire による Functions アプリの統合はまだ Preview であり、現時点でサポートされているデプロイ先は ACA(Azure Container App)のみです。


目次


プロジェクト概要

AI Chat with Custom Data を使用すると、ユーザーは独自のデータソース(RAG と MCP サーバー)を使って AI モデルとやり取りできます。GitHub Models や OpenAI エンドポイントなど、複数のプロバイダーに対応しています。

機能

  • テンプレートで提供される 2 つの PDF を使用して AI モデルとやり取りできます(Microsoft.Extensions.AI.Templates に標準搭載)
  • MCP サーバーの WhoIs ツール new
  • MCP サーバーの GitLab SearchGroups ツール(ユーザーシークレットが 2 つ必要です) new
  • AI モデルとのやり取りに使用する既存の PDF をアップロードできます new
  • Markdown から PDF を動的に作成し、それを AI モデルとのやり取りに使用できます new

HLD

README の画像

ソリューション構成

MyChatApp.sln
├── MyAdminApp.Web/
├── MyChatApp.AppHost/
├── MyChatApp.ServiceDefaults/
├── MyChatApp.Web/
├── MyFunctionApp/
└── MyMcpServerHttpApi/

前提条件

  • .NET SDK 9.0+

  • Visual Studio 2022+ または Visual Studio Code

  • GitHub アカウント(Copilot が有効であること)

  • Azurite を実行するための Docker(Azure Blob Storage、Queues、Azure Functions のエミュレーションに必要)

  • (任意。MCP Inspector を使用する場合)NodeJS

  • (任意。MCP SearchGroup ツールを使用する場合)GitLab アカウント

  • (任意)VS Code 用の C# Dev Kit 拡張機能

  • (任意。独自のプロジェクトを作成する場合).NET AI Template をインストールします:

    dotnet new install Microsoft.Extensions.AI.Templates
    
  • (任意。MCP サーバーツールのデバッグとテスト用)

    npx @modelcontextprotocol/inspector dotnet run
    
  • (任意。Blob のアップロードとキューを確認する場合)Microsoft Azure Storage Explore をインストールします

インストール

  1. リポジトリをクローンします:
    git clone <your-repo-url>
    cd MyChatApp
    
  2. 依存関係を復元します:
    dotnet restore
    

構成とシークレット

実行する前に、使用するプロバイダーの API キーとエンドポイントを構成してください。

GitHub Models を使用する場合

  • スコープや権限を指定せずに GitHub 個人アクセストークン(PAT)を作成します。ガイド
  • シークレットを設定します:
    dotnet user-secrets set "GitHubModels:Token" "<your-token-value>"
    

OpenAI を使用する場合(Azure 経由)

  • 接続文字列を設定します:
    dotnet user-secrets set "ConnectionStrings:openai" "Endpoint=https://models.inference.ai.azure.com;Key=<your-token-value>"
    

MyMcpServerHttpApi(GitLab)

  • GitLab PAT を設定します:
    dotnet user-secrets set "GitLab:Token" "<your-token-value>"
    
  • GitLab ドメインを設定します:
    dotnet user-secrets set "GitLab:Domain" "<your-domain-value>"
    

注: ユーザーシークレットはソース管理の対象外に保存されます。Visual Studio でプロジェクトを右クリックし、「Manage User Secrets」を選択すると、シークレットを直接編集できます。

使用方法

アプリケーションの実行

  • Visual Studio:
    1. .sln ファイルを開きます。
    2. Ctrl+F5 を押すか、「Start」をクリックします。
  • Visual Studio Code:
    1. フォルダーを開きます。
    2. C# Dev Kit 拡張機能をインストールします。
    3. MyChatApp.AppHost の Program.cs を開きます。
    4. Debug ビューの「Run」をクリックします。

ローカルホスト証明書を信頼する

初めて実行する場合は、自己署名の開発用証明書を信頼します:

dotnet dev-certs https --trust

.NET Aspire で信頼されていないローカルホスト証明書をトラブルシューティングするを参照してください。

プロンプトの例

  1. Markdown テーブル

    GitLab グループの一覧を、名前、web_url(「クリックして開く」と表示)、parent_id、has_subgroups の有無を示す絵文字を含む Markdown テーブルで取得します。parent_id でグループ化します。名前の後に角括弧でグループ ID を含めます。

    代替テキスト

  2. ツリー構造

    parent_id と group id に基づいてグループを入れ子にしたツリー構造を作成します。

    代替テキスト

  3. 動的な PDF の作成

    元のリクエストでは何も返ってきませんでした。

    代替テキスト

    ここでは、PDF に変換してアップロードした Markdown を入力しました。

    代替テキスト

    上記の Markdown をアップロードした後の応答です。

    代替テキスト

  4. PDF のアップロード

    ドゥルパート

    ドゥルパートに関する事実をいくつか紹介します。このリストには、ドゥルパートとは関係のない事実も含まれているかもしれません。

    • ドゥルパートは架空の生き物です
    • スリーパートは、授業中に眠らせるためのものです
    • チキン・ジョッキー!
    • ドゥルパートは気をそらすためのものです
    • ドゥルパートの唯一の目的は、あなたを笑わせることです
    • 授業中に誰かがドゥルパートを描いて、あなたが笑うと、先生に叱られる可能性が高いです
  5. 面白い物語のプロンプト

    ドゥルパートが登場する面白い物語を作ってください。5 文以内にしてください。最後は、改行してハグしている顔の絵文字で終えてください。引用も含めてください

デプロイ

  • 標準的な .NET のデプロイ方法が適用されます。クラウドまたはコンテナーにデプロイする場合は、環境変数またはセキュアストアを使ってシークレットを設定してください。

トラブルシューティング

  • 信頼されていない証明書: トラブルシューティングガイドを参照してください。
  • シークレットが見つからない: 上記の説明に従って、各プロジェクトのユーザーシークレットを設定してください。
  • Microsoft Azure Storage Explorer Blob と Queue を表示するには、インストールしてください: 代替テキスト
  • MCP Explorer MCP サーバーのデバッグとテストに実行してください: 代替テキスト

FAQ

Q: 他の AI プロバイダーを使用できますか? A: はい。必要に応じて、構成とサービスを拡張してください。

Q: シークレットはどこに保存されますか? A: ユーザーシークレットは、ソース管理の対象外であるローカルの secrets.json ファイルに保存されます。

コントリビューション

コントリビューションを歓迎します。Issue を作成するか、プルリクエストを送信してください。大きな変更を行う場合は、まず Issue を作成して提案内容について話し合ってください。

ライセンス

このプロジェクトは MIT License の下でライセンスされています。詳細については、LICENSE を参照してください。

謝辞

お問い合わせ

サポートやお問い合わせについては、Issue を作成するか、GitHub 経由でメンテナーにご連絡ください。

参考資料

コメント

MCP は初めてですか?

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

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