概要
Salesforce Engineeringは、従来のRAGの検索精度問題を解決するため、Enriched Indexを開発しました。
技術アプローチ
多段階インデキシング
- 第1段階: ドキュメントをパース・チャンク化
- 第2段階: LLMで各チャンクにカテゴリ・要約・キーワードを自動付与
- 第3段階: チャンク間の関連性グラフを構築
- 第4段階: アクセス制御メタデータを伝播
階層型インデキシング
# Salesforce Enriched Index の概念実装
from dataclasses import dataclass, field
@dataclass
class EnrichedChunk:
text: str
source_doc_id: str
# 第1段階: 基本メタデータ
section_title: str = ""
position_in_doc: int = 0
# 第2段階: LLM生成メタデータ
summary: str = ""
keywords: list[str] = field(default_factory=list)
category: str = ""
# 第3段階: 関連性メタデータ
related_chunk_ids: list[str] = field(default_factory=list)
# 第4段階: アクセス制御
visibility: str = "internal"
permitted_roles: list[str] = field(default_factory=list)
def enrich_chunk(chunk: str, document: str, llm) -> EnrichedChunk:
# LLMでメタデータを自動生成
metadata = llm.extract_metadata(
chunk=chunk,
document=document,
schema=["summary", "keywords", "category"],
)
return EnrichedChunk(
text=chunk,
source_doc_id=document.id,
summary=metadata["summary"],
keywords=metadata["keywords"],
category=metadata["category"],
)
具体的なエンリッチメント例
入力(生チャンク):
{
"text": "Einstein GPT enables sales teams to generate personalized emails...",
"source": "product_docs/einstein-gpt.md"
}
出力(Enriched Chunk):
{
"text": "Einstein GPT enables sales teams to generate personalized emails...",
"source": "product_docs/einstein-gpt.md",
"summary": "Einstein GPTのセールス向けメール自動生成機能の説明",
"keywords": ["Einstein GPT", "sales", "email generation", "personalization"],
"category": "product_feature",
"related_chunks": ["einstein-gpt-setup-guide", "sales-cloud-integration"],
"visibility": "public",
"permitted_roles": ["sales", "admin"]
}
Agentforce Data Library
- 99.99%の稼働率を実現
- 属性ベースアクセス制御(ABAC)で、生成されたデータが元のソースのアクセス権限を継承
成果
- 動的コンテキスト認識検索の実現
- 階層的インデキシングによる大規模データ対応
- セキュリティとスケーラビリティの両立