> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Boxに保存されている企業ドキュメントを対象としたRAGの構築

> Box内のドキュメントについて検索拡張生成 (RAG) を構築します。まずBox HubsとBox AI Askで、権限に応じた回答を取得します。カスタム取得スタックが必要な場合は、Pinecone、Weaviate、またはLangChainにエクスポートできます。

export const RelatedLinks = ({title, items = []}) => {
  const getBadgeClass = badge => {
    if (!badge) return "badge-default";
    const badgeType = badge.toLowerCase().replace(/\s+/g, "-");
    return `badge-${badge === "ガイド" ? "guide" : badgeType}`;
  };
  if (!items || items.length === 0) {
    return null;
  }
  return <div className="my-8">
      {}
      <h3 className="text-sm font-bold uppercase tracking-wider mb-4">{title}</h3>

      {}
      <div className="flex flex-col gap-3">
        {items.map((item, index) => <a key={index} href={item.href} className="py-2 px-3 rounded related_link hover:bg-[#f2f2f2] dark:hover:bg-[#111827] flex items-center gap-3 group no-underline hover:no-underline border-b-0">
            {}
            <span className={`px-2 py-1 rounded-full text-xs font-semibold uppercase tracking-wide flex-shrink-0 ${getBadgeClass(item.badge)}`}>
              {item.badge}
            </span>

            {}
            <span className="text-base">{item.label}</span>
          </a>)}
      </div>
    </div>;
};

export const SignupCTA = ({children}) => {
  return <div className="flex flex-wrap items-center gap-4 p-5 rounded-lg border border-gray-200 dark:border-gray-700 my-6" style={{
    background: "linear-gradient(135deg, rgba(0, 97, 213, 0.06), rgba(0, 97, 213, 0.02))"
  }}>
      <div className="flex-1 text-sm leading-relaxed text-gray-700 dark:text-gray-300" style={{
    minWidth: "280px"
  }}>
        {children}
      </div>
      <div className="flex flex-col items-center gap-2">
        <a href="https://account.box.com/signup/developer" className="signup-cta-button inline-flex items-center whitespace-nowrap px-5 py-2 text-sm font-semibold text-white no-underline">
          {translate("Get started for free")}
        </a>
        <a href="https://account.box.com/developers/console" className="signup-cta-login text-xs text-gray-500 dark:text-gray-400 no-underline whitespace-nowrap">
          {translate("Already have an account? Log in")}
        </a>
      </div>
    </div>;
};

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = localizeLink(href);
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

**Boxによって管理される取得**から始めます。ファイルを<Link href="/guides/hubs-api">Box Hub</Link>に追加し、<Link href="/guides/box-ai/ai-tutorials/ask-questions#ask-questions-about-a-hub">Box AI Ask</Link>を呼び出します。Boxはコンテンツを取得して回答の根拠として利用するとともに、リクエストを行ったユーザーの権限を確認します。この方法では、独自の埋め込みパイプラインやベクトルデータベースを運用する必要はありません。

独自のパイプライン (チャンク、埋め込み、保存、生成) を構築するのは、Boxによって管理される取得では対応できないユースケースのみとしてください。

<SignupCTA>
  無料のDeveloperアカウントで、Box AI API、Hubs、および両方の方法をテストするために必要なコンテンツAPIを利用できます。
</SignupCTA>

## 使用すべきアプローチ

| 目的 | 方法 |
| - | - |
| すでにBox内にあるドキュメントに基づいた回答 (引用情報を表示し、ウェブアプリと同じ権限を適用) | Hub + <Link href="/reference/post-ai-ask">`POST /2.0/ai/ask`</Link> |
| 管理されたナレッジベース (ステージング、承認、クエリ) | <Link href="/guides/hubs-api/access-controlled-knowledge-base">アクセス制御されたAIナレッジベース</Link> |
| Boxとそれ以外のソースを組み合わせたインデックス、カスタム埋め込みモデル、カスタムチャンク化、カスタムランク付け | BoxコンテンツをLangChain、LlamaIndex、Pinecone、またはWeaviateにエクスポート。取得レイヤーには権限を適用 |

## Boxによって管理される取得

項目としてHubを指定したBox AI Askの動作は次のとおりです。

* Hubのコンテンツをインデックス化します。ベクトルストアはホストしません。
* 呼び出し元ユーザーまたはアプリがアクセスできるファイルからのみ回答を返します。
* ソースファイルへの引用情報を含みます。
* ファイルやHubの項目が変更されても最新の状態を保ちます。再インデックス化ジョブは実行しません。

全体的な手順については、<Link href="/guides/hubs-api/access-controlled-knowledge-base">アクセス制御されたAIナレッジベース</Link>を参照してください。業務用アプリについては、<Link href="/tutorials/sales-rfp-answer-bank">RFP回答集</Link>や<Link href="/tutorials/company-brain">カンパニーブレイン</Link>に関するチュートリアルを参照してください。

## 独自のRAGパイプライン

以下が必要な場合は、Boxからエクスポートします。

* Box AIが提供しない取得エンジンまたは埋め込みモデル。
* Boxのドキュメントと他のソースを組み合わせた単一のインデックス。
* カスタムのチャンク化、ランク付け、または評価。
* 自分が管理するモデルホスティング。

一般的なフロー:

1. アプリケーションで読み取れるフォルダまたはファイルを選択します。企業のルートはインデックス化しないでください。
2. Boxレプリゼンテーションまたは独自のパーサーを使用してテキストを抽出します。<Link href="/ai/vector-databases/pinecone">Pinecone</Link>と<Link href="/ai/vector-databases/weaviate">Weaviate</Link>のチュートリアルを参照してください。
3. テキストをチャンク化し、埋め込みを生成して、ベクトルをBoxファイルIDと権限メタデータとともに保存します。
4. クエリ実行時に、質問を埋め込み、インデックスを検索し、現在のユーザーがBoxでアクセスできないチャンクを削除します。
5. 質問と許可されたチャンクをLLMに送信します。回答ではBoxファイルIDを引用します。

フレームワークローダー: <Link href="/ai/integrations">LangChain、LangChain.js、LlamaIndex</Link>。

## エクスポートされたインデックスで権限対応を維持する

Boxは、Pinecone、Weaviate、LLMのプロンプト内で権限を適用しません。Boxからテキストをコピーした後のアクセス制御はお使いのサービス側で行われます。

最低限、以下の実装が必要です。

* 各ベクトルにBoxファイルIDとバージョンIDを保存します。
* 結果を返す前に、クエリを実行したユーザーのBoxの権限を確認します。ユーザーが開けないファイルからのチャンクは削除します。
* ファイル、コラボレーション、または共有に変更があった場合はインデックスを更新します。一度限りのクロールではなく、<Link href="/guides/events">イベント</Link>または<Link href="/guides/webhooks">Webhook</Link>を使用します。
* インデックス時に権限をキャッシュした場合でも、クエリ実行時にアクセス権限を再確認します。共有の変更はほとんどのバッチ処理よりも高頻度で発生します。

権限に応じた回答が主な要件で、コンテンツがすでにBox内にある場合は、代わりにHubsとAskを使用してください。<Link href="/guides/getting-started/why-box#box-managed-retrieval-or-your-own-rag-pipeline">Boxによって管理される取得か、独自のRAGパイプラインか?</Link> を参照してください。

<RelatedLinks
  title="関連するガイド"
  items={[
{ label: translate("Access-controlled AI knowledge base"), href: "/guides/hubs-api/access-controlled-knowledge-base", badge: "GUIDE" },
{ label: translate("AI integrations"), href: "/ai/integrations", badge: "GUIDE" },
{ label: translate("Box and Pinecone"), href: "/ai/vector-databases/pinecone", badge: "GUIDE" },
{ label: translate("Box and Weaviate"), href: "/ai/vector-databases/weaviate", badge: "GUIDE" },
{ label: translate("Permission-aware agent access"), href: "/guides/box-mcp/permission-aware-access", badge: "GUIDE" }
]}
/>
