自社サービスに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




CLI開発者のためのドキュメント革命: charmbracelet/glowで実現する「見せる」README

このツールは、コマンドラインインターフェース (CLI) 上で Markdown (マークダウン) ファイルをとても魅力的に、まるでウェブサイトのようにレンダリングできる優れものです。開発者にとって、さまざまな場面で「ちょっとした工夫」として役立ちますよ。


【ナンバーワンホストが語る】TheOdinProject/css-exercises:エンジニアがCSSを極める理由

今回は、GitHubにある「TheOdinProject/css-exercises」というリポジトリが、私たちソフトウェアエンジニアにとってどれほど有益なのか、そしてどう活用できるのかを、ナンバーワンホストの私が分かりやすく丁寧にご説明しますね。


【エンジニア必見】面倒な認証はComposioに丸投げ!800以上のツールとAIを繋ぐ方法

AIに「何かやっといて」と言っても、「やり方は知っていますが、ボタンは押せません」なんて言われたら、喉ごしが悪いですからね。アサヒ(キレ担当) 「おい、最近のAIエージェント、頭ばっかり良くなって行動が伴ってないんじゃないか? 喉ごし(UX)がガツンと来ないんだよ!」


【サボる技術】epicenterで学ぶSvelte, Tauri, Tailwind

さて、今日の議題は「どうやってサボって、かつデキるエンジニアに見られるか」です。epicenterは、そのための秘密兵器になりえます。もし僕が「この機能、明日までに作っといて」って言われたら、普通なら「無理だよ!」って叫びますよね。でも、もし音声入力でサッとコードコメントを書きたいとか、議事録を素早くまとめたいって場面に出くわしたら、epicenterのようなツールは最強の味方になります。手でタイピングするより、喋る方が圧倒的に速いんです。このプロジェクトを参考にすれば、Svelte、Tauri、Tailwind CSSというモダンな技術スタックを組み合わせて、いかに速くUI/UXに優れたデスクトップアプリを作れるかがわかります。


ベテランも驚愕!次世代エージェント「シシュポス」の導入ガイダンス

若手 デカ長!とんでもないブツを見つけました。これはただのAIライブラリじゃありません。「自分と同じようにコードを書く」をコンセプトにした、TypeScript製の最強エージェント・ハーネス(基盤)です!ベテラン フン、AIがコードを書くだと? 現場の苦労も知らねえで……。で、具体的に何ができるんだ?


C#エンジニア必見!jellyfin/jellyfinで学ぶサーバー開発の秘訣

「jellyfin/jellyfin」は、一言で言うと 「自分だけのNetflixを作れるソフトウェア」 です。しかも、全部無料で、オープンソースなんです。お手持ちの映画、ドラマ、アニメ、音楽などを、自宅のサーバーに置いて、スマホやテレビ、パソコンなど、好きなデバイスでいつでもどこでも楽しめるようにする、そのための心臓部となるのが、このプロジェクトです。


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

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


恐怖のミステリーホラー?…からの爆笑変換劇!C4illin/ConvertX徹底解説!

今回は「C4illin/ConvertX」について、俺様が恐怖のミステリーホラーコント風に、でもめちゃくちゃ分かりやすく解説してやるぜ!ある夜更けのことだった…。俺は真っ暗な部屋でPCの前に座っていた。締め切り間近のドキュメント、プレゼン資料、古い企画書…。ファイル形式がバラバラで、開けない、共有できない、もうどうしようもない!「うわぁぁぁ!このデータ、なんでこんな形式なんだよぉぉぉ!」俺は絶叫した。


もう経理で悩まない!middayで実現する快適フリーランスライフ

日々のコーディングや設計作業に加え、フリーランスには請求書作成、作業時間の記録、プロジェクトごとの収支管理など、面倒な事務作業がつきものです。middayはこれらの作業を一本化し、最小限の労力で最大の効果を得られるように設計されています。請求書作成の自動化


Postgres, TypeScript, Remixで構築する:AI向け超高速メモリエンジンの全貌

大山 新田、お前、最近顔色が悪いぞ。夜なべしてまた新しい技術ばっかり追いかけてるんじゃないだろうな?新田 大山さん!ちょうど良かったです。今、GitHubでsupermemoryai/supermemoryってヤツを見てたんです。これが、AI時代の「記憶」を扱うのに、すっごく重要になりそうだと思って!