自社サービスにAIチャットを組み込む!huggingface/chat-uiの機能とカスタマイズ方法


自社サービスにAIチャットを組み込む!huggingface/chat-uiの機能とカスタマイズ方法

huggingface/chat-ui

2025-10-20

これは、Hugging Faceが提供するチャットアプリケーション「HuggingChat」の基盤となっている、オープンソースのチャットUIコードベースです。大規模言語モデル(LLM)との対話インターフェースを、自分の環境で構築・カスタマイズしたい場合に非常に強力なツールとなります。

このコードベースは、単なるチャット画面のデモに留まらず、プロダクトレベルのチャットUIに必要な要素が詰まっています。

完成されたUIの活用
ゼロからチャットUIを作る手間を省き、すぐに会話ロジックやバックエンドとの連携に集中できます。

TypeScriptとSvelteKit

TypeScriptのおかげで、大規模なコードベースでも型安全性が確保され、メンテナンス性やリファクタリングのしやすさが向上します。

SvelteKitは、高速で軽量なUIフレームワークであり、優れたユーザー体験を提供できます。特に、コンパイル時に多くの処理を行うため、実行時のオーバーヘッドが少ないのが魅力です。

ブランディングとテーマ
環境変数を通じて、アプリ名、説明、アセットなどを簡単にカスタマイズでき、自社のブランドに合わせたチャットインターフェースを構築できます。

機能拡張 Web検索機能やOpenID認証などのオプション機能も組み込まれており、これらを参考に独自の認証方法や新しい対話機能(例ツール利用、RAG機能)を追加しやすい構造になっています。

多様なLLMへの対応
基本的にOpenAI互換のAPIと通信するように設計されているため、Hugging Faceのインファレンスプロバイダーだけでなく、独自のLLMエンドポイントや他の互換サービスとも接続しやすいです。

ベストプラクティス
大手プラットフォームが実際に運用しているコードから、LLMフロントエンドの設計、State管理(Svelteストアなど)、バックエンド連携(WebSocketなど)のノウハウを学べます。

最新技術の採用
Svelteというモダンなフロントエンド技術とTypeScriptの組み合わせを、実践的なプロジェクトで学ぶ絶好の機会です。

huggingface/chat-uiは、SvelteKitで構築されたアプリケーションであり、バックエンドとの連携にはMongoDBを必要とします。

Node.jsとnpm (または yarn/pnpm) がインストールされていること。

MongoDBのインスタンス(ローカルコンテナまたはMongoDB Atlasなどのマネージドサービス)が利用可能であること。

LLMエンドポイント(OpenAI互換API)が必要です。Hugging Face Inference ProvidersやローカルのLLMサービスなどが考えられます。

# リポジトリをクローン
git clone https://github.com/huggingface/chat-ui.git
cd chat-ui

# 依存関係をインストール
npm install 
# または pnpm install

プロジェクトのルートディレクトリに、.env.local ファイルを作成し、必須の環境変数を設定します。

# .env.local の例

# 必須: MongoDB 接続URI
# (例: Atlasの場合) MONGODB_URL="mongodb+srv://<user>:<password>@<cluster-url>/<dbname>?retryWrites=true&w=majority"
# (例: ローカルの場合) MONGODB_URL="mongodb://localhost:27017"
MONGODB_URL="あなたのMongoDB接続URI"

# 必須: LLM API キー (Hugging FaceトークンまたはOpenAI APIキー)
OPENAI_API_KEY="あなたのAPIキー" 

# LLMエンドポイントのベースURL。Hugging Face Inference Providersルーターなどが設定可能です。
# OPENAI_BASE_URL="https://your-llm-router-url/v1" 

# オプション: アプリケーションの表示名を設定
PUBLIC_APP_NAME="私のカスタムAIチャット"

環境変数を設定したら、以下のコマンドで開発サーバーを起動できます。

npm run dev

通常、http://localhost:5173 などでチャットUIにアクセスできるようになります。

huggingface/chat-ui は、コンポーネント指向で設計されており、特にSvelteでの開発に慣れているエンジニアには非常に分かりやすいです。

たとえば、チャットメッセージの表示部分をカスタマイズしたい場合、src/lib/components/chat/Message.svelte などのファイルを参考にします。

カスタムのアバターアイコンを使いたい場合、src/lib/components/Icon.svelte コンポーネントなどを確認し、新しいアイコンを定義したり、既存のコンポーネントを修正したりできます。

例
カスタムフッターの追加

すべてのチャットウィンドウに特定の免責事項を表示するフッターを追加したいとします。

<script lang="ts">
  // 必要なインポート
</script>

<div class="flex flex-col h-screen">
  <main class="flex-grow">
    <slot /> 
  </main>
  
  <footer class="p-2 text-center text-xs text-gray-500 border-t">
    これはカスタムの注意書きフッターです。
    このサービスは学習目的でのみ使用してください。
  </footer>
</div>

Chat UIは、OpenAI互換APIを通じてモデルを取得しますが、特定のモデルを明示的に設定したい場合は、環境変数または設定ファイルで調整します。

アプリケーションのコード内で、LLMへのリクエストを処理している部分(通常はバックエンドAPIルートやサービス)を見つけ、例えばプロンプトの形式やパラメータをカスタマイズすることで、新しいLLM(例
Llama 3)に最適化できます。

例
server/routes/api/v1/chat/completions/+server.ts(仮想的なファイルパス)

このファイルでは、ユーザーのメッセージを受け取り、LLMエンドポイントにリクエストを投げる処理が行われています。

// 実際のコードはSvelteKitのAPIルートにあります
// LLMに送信するリクエストボディの構造を調整する例

const body = await request.json();
const { messages, model } = body;

// Llama 3のプロンプト形式に合わせるための変換処理を実装
const convertedMessages = convertToLlama3Format(messages); // ← ここがカスタマイズポイント

const llmResponse = await fetch(`${OPENAI_BASE_URL}/chat/completions`, {
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        "Authorization": `Bearer ${OPENAI_API_KEY}`,
    },
    body: JSON.stringify({
        model: model,
        messages: convertedMessages, // 変換後のメッセージを使用
        stream: true,
        // その他のパラメータ (temperature, top_pなど)
    }),
});
// ... レスポンスの処理

huggingface/chat-ui




Kubernetesでの機密情報管理を自動化するツール

ソフトウェア開発において、データベースのパスワードやAPIキーなどの機密情報を安全に管理することは非常に重要です。Kubernetes環境では、これらの情報をKubernetes Secretsとして保存するのが一般的です。しかし、この方法にはいくつかの課題があります。


ソフトウェアエンジニア必見!「MusicFree」で叶える自由な音楽体験とスキルアップ

やぁ、同僚諸君!最近、こんなつぶやきが聞こえてこないかい?「あー、またあの音楽アプリ、広告が邪魔すぎる!」「もっと自分好みにカスタマイズできないかなぁ」「特定のサービスに縛られずに自由に音楽を楽しみたい!」…ふむ、わかる。その気持ち、痛いほどわかるぞ。


ソフトウェアエンジニアのためのバーチャルオフィス workadventure徹底解説

workadventureは、ソフトウェア開発のワークフローに多くのメリットをもたらします。チームのコラボレーションを強化 物理的な距離がある場合でも、チームメンバーが同じバーチャル空間にいる感覚を味わえます。これにより、偶発的な会話が生まれやすくなり、チーム内のコミュニケーションが活性化されます。


evershopで実現するヘッドレスコマース:開発効率を最大化するReact/TypeScriptの活用法

evershopは、TypeScriptベースのオープンソースEコマースプラットフォームで、特にReactを活用している点が大きな特徴です。エンジニアにとって、モダンな技術スタックで構築されていることが、まず大きな魅力になります。evershopは、単なるショッピングカートシステム以上の、開発者フレンドリーな構造を持っています。


GitHub-readme-stats解説

ソフトウェアエンジニアの方にとって、anuraghazra/github-readme-stats がどのように役立つか、導入方法やサンプルコードを分かりやすく解説しますね。このツールを一言で言うと、「GitHubのプロフィールやREADMEを、あなたの開発実績を視覚的にアピールする場に変える魔法のツール」 です。 ‍♂


現場のボスになれ!Pythonで操る「InvenTree」在庫管理システム

お前、現場で部品や資材の管理、マジで大変だろ?Excelファイルとにらめっこしたり、棚卸しで汗だくになったり…。そんな泥臭い作業とは今日でおさらばだ!この「InvenTree」、一言で言うと「現場の在庫管理システムを最強にするオープンソースのツール」ってわけだ。


【エンジニア向け】DocSendの代替!オープンソースPDF分析ツール「Papermark」徹底解説

諸君、ごきげんよう!我々はPDFを扱うエンジニアの味方、ペーパーマークだ! 君たちの中に、PDFドキュメントを共有する時、こんなことで悩んでるやつはいないか?「この企画書、送ったはいいけど、本当に読まれてるのかな…?」 「みんなどのページでつまずいてるんだ…?」 「URLを自社ドメインにしたいけど、どうすれば…?」


脆弱性の闇を覗け!Metasploitで鍛えるソフトウェアエンジニアのセキュリティ魂

(立ち上がって、情熱的に身振り手振り)いいか、君たちは日々、素晴らしいソフトウェアを生み出している。だがな、その輝かしい作品に、攻撃者(アクター)の視点を取り入れているか? 表面的なテストだけではダメだ!その深い、深い、脆弱性の闇を覗き込む勇気を持て!


プロジェクト管理の「真犯人」Worklenz/worklenzをエンジニアが徹底解剖!

そう、Worklenz/worklenz。このツールこそが、あなたのチームのプロジェクト管理における「犯人」…つまり、これまであなた方を悩ませてきた非効率性の正体を暴き、すべてを解決する救世主となるのです!ソフトウェアエンジニアの皆さん、よく聞いてください。このWorklenz/worklenzは、まさに皆さんのための「万能ツール」です。では、どのように皆さんの役に立つのか、その全貌を暴いていきましょう。


コードの隙間を見逃さない。DeepAuditが変える、AI駆動の自律型セキュリティ運用

本日おすすめするのは、「DeepAudit」という名の、非常にキレのあるカクテル…いえ、セキュリティ監査ツールです。ソフトウェアエンジニアであるあなたにとって、これは「ただの静的解析ツール」ではありません。いわば、24時間眠らずにあなたのコードの隙間を探し続ける、熟練のホワイトハッカー・チームを雇うようなものです。