55 カスタム・ドキュメント・ローダー

特殊なユース・ケースの場合、ユーザーは特定のニーズに合せたカスタム・ドキュメント・ローダーを定義できます。

カスタム・ドキュメント・ローダーを実装するには、`com.oracle.coherence.rag.DocumentLoader`インタフェースを実装するCDI Beanを作成し、`@Named`クラス注釈を介して処理するURIプロトコルの名前を指定する必要があります。

`load`メソッドは指定された`uri`の内容に基づいてドキュメントをフェッチし、注入された`DocumentParser`を使用して解析し、抽出されたテキストおよびメタデータを含むLangChain4J `dev.langchain4j.data.document.Document`のインスタンスを返します。

例として、前述のすべてを実行する`OciObjectStorageDocumentLoader`の実際の実装を次に示します:

java
@Named("oci.os")
@ApplicationScoped
public class OciObjectStorageDocumentLoader
        implements DocumentLoader
    {
    @Inject
    DocumentParser documentParser;                                              // <1>

    @Inject
    ObjectStorageClient client;                                                 // <2>
    
    public Document load(URI uri)
        {
        String ns     = uri.getHost();
        Path   path   = Path.of(uri.getPath());
        String bucket = path.getName(0).toString();
        String object = path.subpath(1, path.getNameCount()).toString();

        var request = GetObjectRequest.builder()                                // <3>
                .namespaceName(ns)
                .bucketName(bucket)
                .objectName(object)
                .build();

        var response = client.getObject(request);                               // <4>

        var source = new DocumentSource()                                       // <5>
            {
            public InputStream inputStream() throws IOException
                {
                return response.getInputStream();                               // <6>
                }

            public Metadata metadata()
                {
                var metadata = Metadata.metadata("url", uri.toString());        // <7>
                metadata.put("ns", ns);
                metadata.put("bucket", bucket);
                metadata.put("object", object);
                metadata.put("content_type", response.getContentType());
                metadata.put("content_md5", response.getContentMd5());
                metadata.put("content_length", response.getContentLength());
                return metadata;
                }
            };

        return dev.langchain4j.data.document.DocumentLoader.load(source, documentParser);  // <8>
        }
    }
  1. 使用する`DocumentParser`はストア構成に基づいて注入されます
  2. `ObjectStorageClient`は構成に基づいて作成および注入されます
  3. 指定された`uri`からの情報に基づいて`GetObjectRequest`を作成します
  4. リクエストを実行し、サービスからレスポンスを取得します
  5. ドキュメント・コンテンツおよびメタデータへのアクセスに使用するLangChain4J `DocumentSource`を作成します
  6. レスポンスからドキュメント・コンテンツを返します
  7. レスポンスに基づいてドキュメント・メタデータを作成します
  8. ステップ#5で作成した`DocumentSource`から`Document`のインスタンスを作成します。注入された`DocumentParser`を使用して、ドキュメント・コンテンツからテキストを抽出します。