/** * RAG Pipeline - End-to-End RAG処理パイプライン * * 検索→コンテキスト構築→回答生成を統合したパイプライン * * @requirement REQ-RAG-101 * @design DES-KATASHIRO-003-RAG §3.6 */ import type { Document, Chunk, SearchResult, RAGEngineConfig, EmbeddingProvider, VectorStore } from './types.js'; interface LLMProviderLike { generate(request: { messages: Array<{ role: string; content: string; }>; temperature?: number; maxTokens?: number; }): Promise<{ content: string; usage?: { promptTokens: number; completionTokens: number; totalTokens: number; }; }>; } /** * RAGパイプライン設定 */ export interface RAGPipelineConfig extends RAGEngineConfig { /** システムプロンプト */ systemPrompt?: string; /** コンテキストテンプレート */ contextTemplate?: string; /** 最大コンテキスト長(文字数) */ maxContextLength?: number; /** 回答生成温度パラメータ */ temperature?: number; /** 最大回答トークン数 */ maxAnswerTokens?: number; /** デフォルトのtopK */ defaultTopK?: number; /** 検索結果の最小スコア */ minSearchScore?: number; /** ストリーミング有効化 */ enableStreaming?: boolean; } /** * RAGパイプライン結果 */ export interface RAGPipelineResult { /** 生成された回答 */ answer: string; /** 使用されたコンテキスト */ contexts: string[]; /** 検索されたチャンク */ retrievedChunks: SearchResult[]; /** 使用されたクエリ */ query: string; /** トークン使用量 */ tokenUsage?: { promptTokens: number; completionTokens: number; totalTokens: number; }; /** 処理時間(ミリ秒) */ processingTimeMs: number; /** メタデータ */ metadata?: Record; } /** * RAGパイプラインオプション(クエリごと) */ export interface RAGQueryOptions { /** 検索件数 */ topK?: number; /** 最小スコア */ minScore?: number; /** 温度パラメータ */ temperature?: number; /** 追加コンテキスト */ additionalContext?: string; /** システムプロンプトオーバーライド */ systemPromptOverride?: string; /** 会話履歴 */ conversationHistory?: Array<{ role: 'user' | 'assistant'; content: string; }>; } /** * デフォルトのシステムプロンプト */ export declare const DEFAULT_RAG_SYSTEM_PROMPT = "\u3042\u306A\u305F\u306F\u4E0E\u3048\u3089\u308C\u305F\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u60C5\u5831\u306B\u57FA\u3065\u3044\u3066\u8CEA\u554F\u306B\u56DE\u7B54\u3059\u308B\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3067\u3059\u3002\n\u4EE5\u4E0B\u306E\u30EB\u30FC\u30EB\u306B\u5F93\u3063\u3066\u304F\u3060\u3055\u3044:\n1. \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u542B\u307E\u308C\u308B\u60C5\u5831\u306E\u307F\u3092\u4F7F\u7528\u3057\u3066\u56DE\u7B54\u3057\u3066\u304F\u3060\u3055\u3044\n2. \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u60C5\u5831\u304C\u306A\u3044\u5834\u5408\u306F\u3001\u305D\u306E\u65E8\u3092\u6B63\u76F4\u306B\u4F1D\u3048\u3066\u304F\u3060\u3055\u3044\n3. \u56DE\u7B54\u306F\u7C21\u6F54\u304B\u3064\u6B63\u78BA\u306B\u3057\u3066\u304F\u3060\u3055\u3044\n4. \u63A8\u6E2C\u3084\u4EEE\u5B9A\u3092\u907F\u3051\u3001\u4E8B\u5B9F\u306B\u57FA\u3065\u3044\u305F\u56DE\u7B54\u3092\u3057\u3066\u304F\u3060\u3055\u3044"; /** * デフォルトのコンテキストテンプレート */ export declare const DEFAULT_CONTEXT_TEMPLATE = "## \u95A2\u9023\u60C5\u5831\n{{contexts}}\n\n## \u8CEA\u554F\n{{query}}\n\n\u4E0A\u8A18\u306E\u60C5\u5831\u306B\u57FA\u3065\u3044\u3066\u8CEA\u554F\u306B\u56DE\u7B54\u3057\u3066\u304F\u3060\u3055\u3044\u3002"; /** * RAGパイプライン * 検索→コンテキスト構築→回答生成を統合 */ export declare class RAGPipeline { private ragEngine; private llmProvider; private config; private ragEngineConfig; constructor(embeddingProvider: EmbeddingProvider, vectorStore: VectorStore, llmProvider: LLMProviderLike, config?: RAGPipelineConfig); /** * ドキュメントをインジェスト */ ingest(document: Document): Promise; /** * 複数ドキュメントをバッチインジェスト */ ingestBatch(documents: Document[]): Promise; /** * RAGクエリを実行(検索→回答生成) */ query(query: string, options?: RAGQueryOptions): Promise; /** * 会話形式でクエリ(履歴を自動管理) */ chat(query: string, conversationHistory: Array<{ role: 'user' | 'assistant'; content: string; }>, options?: Omit): Promise; /** * 検索のみ実行(回答生成なし) */ search(query: string, topK?: number): Promise; /** * コンテキストを構築 */ private buildContexts; /** * ユーザープロンプトを構築 */ private buildUserPrompt; /** * コンテキストを最大長に切り詰め */ private truncateContext; /** * チャンクを削除 */ deleteChunk(chunkId: string): Promise; /** * ドキュメントを削除 */ deleteDocument(documentId: string, chunkCount: number): Promise; /** * 設定を更新 */ updateConfig(config: Partial): void; /** * 現在の設定を取得 */ getConfig(): Readonly; } export {}; //# sourceMappingURL=RAGPipeline.d.ts.map