GenAIスタックによるAI強化ドキュメント管理の作成

組織は数え切れないほどのレポート、契約書、研究論文、その他の文書を扱わなければなりませんが、これらの文書から関連情報を管理、解読、抽出することは困難で時間がかかる場合があります。 このようなシナリオでは、AI を活用したドキュメント管理システムが革新的なソリューションを提供できます。

DockerでジェネレーティブAI(GenAI)技術を開発すると、長いドキュメントを要約するだけでなく、それらを分類して詳細な説明を生成し、見逃していた可能性のある迅速な洞察を提供することさえ、無限の可能性が広がります。 AIを活用したこの多面的なアプローチは、組織がテキストデータと対話する方法を変え、時間と労力の両方を節約します。

この記事では、堅牢なドキュメント管理システムである AlfrescoGenAIスタック を統合して、ドキュメント分析の強化、コンテンツ分類の自動化、検索機能の変革などの可能性を広げる方法を見ていきます。

2400x1260 2024 Gen AI スタック v1

Alfresco文書管理のアーキテクチャの概要 

Alfrescoは、組織がデジタルコンテンツやドキュメントを管理、共有、共同作業できるように設計されたオープンソースのコンテンツ管理プラットフォームです。 ドキュメント管理、ワークフローの自動化、コラボレーション、およびレコード管理のためのさまざまな機能を提供します。

Alfresco Communityプラットフォームは Docker Hubにあります。 alfresco-content-appという名前のUIのDockerイメージは 10 00万回以上プルされていますが、他のコアプラットフォームサービスには 1 00万回以上のプルがあります。

Alfresco Communityプラットフォーム(図 1)は、コンテンツサービスプラットフォームを構築するためのさまざまなオープンソーステクノロジーを提供します。

  • Alfrescoコンテンツリポジトリ はAlfrescoの中核であり、コンテンツの保存と管理を担当します。 このコンポーネントは、リポジトリで操作を実行するための REST API を公開します。
  • データベース:PostgreSQLは、とりわけ、データベース管理システムとして機能し、ドキュメントに関連付けられたメタデータを格納します。
  • Apache Solr: 検索機能を強化したSolrは、Alfresco内での効率的なコンテンツ検索とメタデータ検索を可能にします。
  • Apache ActiveMQ:オープンソースのメッセージブローカーであるActiveMQは、Alfrescoのさまざまなサービス間の非同期通信を可能にします。 Messaging APIは、リポジトリ内の非同期メッセージを処理します。
  • UIリファレンスアプリケーション:ShareとAlfresco Content Appは、直感的なインターフェイスでユーザー操作とアクセシビリティを実現します。

Docker ComposeでAlfresco Communityをデプロイする手順の詳細については、Alfrescoの公式ドキュメントを参照してください。

postgresql、activemq、repo、share、alfrescoコンテンツアプリなどを示す、alfrescoコミュニティプラットフォームのアーキテクチャの図。
図 1: Dockerを使ったAlfresco Communityのデプロイの基本図です。

AlfrescoとGenAIスタックを統合する理由

AlfrescoとGenAIスタックを統合することで、強力なGenAIサービススイートが利用でき、ドキュメント管理機能が大幅に強化されます。 GenAIスタックサービスでAlfrescoの文書管理を強化すると、次のようなメリットがあります。

  • 使用可能なリソースに応じて異なるデプロイを使用します。 Docker を使用すると、サイズの異なるさまざまな大規模言語モデル (LLM) を簡単に切り替えることができます。 さらに、GPU にアクセスできる場合は、GPU で高速化された LLM を使用してコンテナーをデプロイして、推論を高速化できます。 逆に、GPU リソースが限られているか使用できない場合は、CPU ベースの LLM を使用してコンテナーをデプロイできます。
  • ポータビリティ: Dockerコンテナは、GenAIサービス、その依存関係、ランタイム環境をカプセル化し、異なる環境間で一貫した動作を保証します。 この移植性により、AI モデルをローカルで開発およびテストし、さまざまなプラットフォームにシームレスにデプロイできます。
  • 実稼働準備完了: このスタックは GPU アクセラレーテッド コンピューティングをサポートしているため、本番環境での GenAI モデルのデプロイに適しています。 デプロイに対するDockerの宣言型アプローチにより、システムの望ましい状態を定義し、Dockerにデプロイの詳細を処理させて、一貫性と信頼性を確保できます。
  • アプリケーションとの統合:Dockerは、GenAIサービスとコンテナとしてデプロイされた他のアプリケーションとの統合を容易にします。 同じDocker環境内に複数のコンテナをデプロイし、Dockerネットワークを使用してコンテナ間の通信を調整できます。 この統合により、マイクロサービスで構成される複雑なシステムを構築でき、GenAI機能を大規模なアプリケーションやワークフローに簡単に統合できます。

それはどのように機能しますか?

Alfrescoでは、 Alfresco REST APIAlfresco Messaging API という2つの主要なAPIを提供しています(図 2)。

  • Alfresco REST APIは、開発者がHTTP経由でAlfrescoのコンテンツ管理機能を操作できるようにする一連のエンドポイントを提供します。 Alfresco内でドキュメント、フォルダ、ユーザー、グループ、権限の作成、読み取り、更新、削除などの操作を行うことができます。 
  • Alfresco Messaging APIは、Apache ActiveMQ上に構築された非同期通信用のメッセージングインフラストラクチャを提供し、パブリッシュ/サブスクライブメッセージングパターンに従います。 Messaging APIとの統合により、開発者はAlfresco Repository内の変更や更新に動的に応答するイベント駆動型のアプリケーションやワークフローを構築できます。

Alfresco Repositoryは、GenAI Serviceが提供するエンリッチメントデータで、次の2つのAPIを使用して更新できます。

  • Alfresco REST APIは、既存のリポジトリノードからメタデータとコンテンツを取得してGenAI Serviceに送信し、ノードをアップデートし直すことができます。
  • Alfresco Messaging APIを使用して、リポジトリ内の新しいノードや更新されたノードを使用し、GenAIサービスから結果を取得できます。
Alfresco の 2 つの主要な API、REST API とメッセージング API の統合を示す図。
図 2: Alfrescoは、Alfresco REST APIとAlfresco Messaging APIという2つの主要なAPIを連携用に提供しています。

技術的には、Dockerの導入には、同じDockerネットワーク上で実行されるAlfrescoとGenAIスタックの両方のプラットフォームが含まれます(図 3)。 

GenAIスタックはREST APIサービスとして機能し、エンドポイントはgenai:8506で利用可能ですが、AlfrescoはREST APIクライアント(alfresco-ai-applier)とメッセージAPIクライアント(alfresco-ai-listener)を使用してAIサービスと統合します。 どちらのクライアントもコンテナーとして実行することもできます。

デプロイアーキテクチャの図で、alfrescoとgenaiスタックを示しています。
図 3: AlfrescoとGenAIスタックサービスの統合のためのデプロイアーキテクチャ。

GenAI Stack サービスは、以下のエンドポイントを提供します。

  • summary: ドキュメントの概要を複数のタグとともに返します。 これにより、応答の言語、要約の単語数、タグの数など、いくつかのカスタマイズが可能です。
  • classify: ドキュメントに最も一致するリストから用語を返します。 分類するドキュメントに加えて、入力として用語のリストが必要です。
  • prompt: ドキュメントの Retrieval-augmented generation (RAG) を使用してカスタムユーザープロンプトに応答し、応答の範囲を制限します。
  • describe: 入力画像の説明テキストを返します。

GenAI Stackサービスの実装は、ドキュメントテキストをNeo4j VectorDBのチャンクにロードし、埋め込みによるQAチェーンを改善し、応答の幻覚を防ぎます。 画像は、ビジュアルエンコーダ(LlaVA)を備えたLLMを使用して処理され、説明が生成されます(図 4)。 Docker GenAI Stackでは、異なる目標に対して複数のLLMを使用できることに注意してください。

genaiスタックサービスの図で、ドキュメントローダー、llm埋め込み、vectordb、qaチェーンなどを示しています。
図 4: GenAI Stackサービスは、RAGと、画像を記述するためのビジュアルエンコーダー付きLLM(LlaVA)を使用して実装されています。

はじめ 

開始するには、次の点を確認してください。

Docker Desktop で使用可能な RAM の容量を取得するには、次のコマンドを使用します。

docker info --format '{{json .MemTotal}}'

結果が 20 GiB を下回る場合は、オペレーティング システムの Docker 公式ドキュメント の手順に従って、Docker Desktop のメモリ制限を増やします。

リポジトリのクローンを作成する

次のコマンドを使用して、リポジトリを閉じます。

git clone https://github.com/aborroy/alfresco-genai.git

このプロジェクトには、次のコンポーネントが含まれています。

  • genai-stackフォルダは https://github.com/docker/genai-stack を使用しています プロジェクトを使用して、特定のドキュメントに AI サービスを提供する REST エンドポイントを構築します。
  • alfresco フォルダには、Alfresco Community 23をデプロイするためのDocker Composeテンプレートが含まれています。1.
  • alfresco-ai フォルダには、Alfresco統合に関連する一連のプロジェクトが含まれています。
    • alfresco-ai-model は、Alfrescoリポジトリと共有アプリにデプロイする概要、用語、プロンプトを保存するためのカスタムAlfrescoコンテンツモデルを定義します。
    • alfresco-ai-applier は、Alfresco REST APIを使用して、入力されたAlfrescoリポジトリに概要や用語を適用します。
    • alfresco-ai-listener はメッセージをリッスンし、Alfresco Repositoryで作成または更新されたノードの概要を生成します。
  • compose.yaml ファイルは、includeディレクティブを使用してAlfrescoおよびGenAIスタックサービスのデプロイを記述します。

Docker GenAIサービスの開始

フォルダー genai-stack にあるDocker GenAI Service for Alfrescoは、Docker GenAI Stack プロジェクトに基づいており、Alfresco統合から使用されるRESTエンドポイントとして要約サービスを提供します。

cd genai-stack

サービスを実行する前に、 .env ファイルを使用して、使用可能な設定を調整します。

# Choose any of the on premise models supported by ollama
LLM=mistral
LLM_VISION=llava
# Any language name supported by chosen LLM
SUMMARY_LANGUAGE=English
# Number of words for the summary
SUMMARY_SIZE=120
# Number of tags to be identified with the summary
TAGS_NUMBER=3

標準コマンドを使用してDockerスタックを起動します。

docker compose up --build --force-recreate

サービスが起動して準備が整うと、サマリーRESTエンドポイントにアクセスできるようになります。 コマンドを使用して、その機能を curl テストできます。

ローカルの PDF ファイル (file.pdf 次のサンプルの ) を使用して、概要といくつかのタグを取得します。

curl --location 'http://localhost:8506/summary' \
--form 'file=@"./file.pdf"'
{ 
  "summary": " The text discusses...", 
  "tags": " Golang, Merkle, Difficulty", 
  "model": "mistral"
}

ローカルの PDF ファイル (file.pdf 次のサンプル) と用語のリスト (日本語やスペイン語など) を使用して、ドキュメントの分類を取得します。

curl --location \
'http://localhost:8506/classify?termList=%22Japanese%2CSpanish%22' \
--form 'file=@"./file.pdf"'
{
    "term": " Japanese",
    "model": "mistral"
}

ローカルの PDF ファイル (file.pdf 次のサンプル) とプロンプト (「息子の名前は何ですか?」など) を使用して、ドキュメントに関する応答を取得します。

curl --location \
'http://localhost:8506/prompt?prompt=%22What%20is%20the%20name%20of%20the%20son%3F%22' \
--form 'file=@"./file.pdf"'
{
    "answer": " The name of the son is Musuko.",
    "model": "mistral"
}

ローカル画像ファイル (picture.jpg 次のサンプルの ) を使用して、画像のテキスト説明を取得します。

curl --location 'http://localhost:8506/describe' \
--form 'image=@"./picture.jpg"'
{
    "description": " The image features a man standing... ",
    "model": "llava"
}

この場合、Mistral の代わりに LlaVA LLM が使用されることに注意してください。

次の手順に進む前に、必ず Docker Compose を停止してください。

Alfrescoを起動する

フォルダー内の alfresco Alfresco Platformは、GenAIサービスとの統合から得られた結果を保存するためのカスタマイズされたコンテンツモデルを含む、Alfresco Repositoryのサンプルデプロイを提供します。

AlfrescoとGenAIの両方を一緒に実行したいので、プロジェクトのメインフォルダーにあるファイルを使用します compose.yaml

include:
  - genai-stack/compose.yaml
  - alfresco/compose.yaml
#  - alfresco/compose-ai.yaml

このステップでは、GenAI StackとAlfrescoのみをデプロイするため、行は compose.ai.yaml コメントアウトのままにしてください。

標準コマンドを使用してスタックを起動します。

docker compose up --build --force-recreate

サービスが起動して準備が整うと、Alfresco Repositoryにアクセスできるようになります。 次の URL で既定の資格情報 (admin/admin) を使用してプラットフォームをテストできます。

Alfresco内の既存のドキュメントを強化する 

このフォルダにある alfresco-ai/alfresco-ai-applier AIアプライヤーアプリケーション には、Alfrescoフォルダに保存されているドキュメントを取得し、GenAIサービスから応答を取得し、Alfrescoの元のドキュメントを更新するSpring Bootアプリケーションが含まれています。

アプリケーションを初めて実行する前に、Maven を使用してソースコードをビルドする必要があります。

cd alfresco-ai/alfresco-ai-applier
mvn clean package

前の手順でGenAIサービスとAlfresco Platformが稼働しているので、Alfresco Shared Files/summary フォルダにドキュメントをアップロードし、プログラムを実行してドキュメントを要約で更新できます。

java -jar target/alfresco-ai-applier-0.8.0.jar \
--applier.root.folder=/app:company_home/app:shared/cm:summary \
--applier.action=SUMMARY
...
Processing 2 documents of a total of 2
END: All documents have been processed. The app may need to be executed again for nodes without existing PDF rendition.

プロセスが完了すると、フォルダー内のすべての Shared Files/summary Alfrescoドキュメントに、GenAI Stackサービスによって取得された情報(概要、タグ、使用されたLLM)が含まれます(図 5)。

Alfrescoのドキュメントの詳細のスクリーンショットで、ドキュメントのプロパティ、概要、タグ、使用されているllmが示されています。
図 5: Alfresco Repositoryで、概要、タグ、モデル(LLM)でドキュメントが更新されました。

これで、ドキュメントをAlfresco Shared Files/classify フォルダーにアップロードして、次のステップのためにリポジトリを準備できます。

分類アクションは、次のコマンドを使用してAlfresco Shared Files/classify フォルダー内のドキュメントに適用できます。 GenAI Service は、フォルダー内の各ドキュメントに最も適した用語をリストから (英語、スペイン語、日本語) 選択します。

java -jar target/alfresco-ai-applier-0.8.0.jar \
--applier.root.folder=/app:company_home/app:shared/cm:classify \
--applier.action=CLASSIFY \
--applier.action.classify.term.list=English,Spanish,Japanese
...
Processing 2 documents of a total of 2
END: All documents have been processed. The app may need to be executed again for nodes without existing PDF rendition.

完了すると、フォルダー内のすべての Shared Files Alfrescoドキュメントに、GenAI Stackサービスによって取得された情報(用語リストの用語と使用されたLLM)が含まれます(図 6)。

alfrescoリポジトリでの文書分類の更新を示すスクリーンショット。
図 6: Alfresco Repositoryで、用語とモデル(LLM)でドキュメントが更新されました。

Alfresco Shared Files/picture フォルダに画像をアップロードして、次のステップのためにリポジトリを準備できます。

画像からテキストの説明を取得するには、フォルダーの下に Shared Files という名前のpicture新しいフォルダーを作成します。このフォルダーに画像ファイルをアップロードし、次のコマンドを実行します。

java -jar target/alfresco-ai-applier-0.8.0.jar \
--applier.root.folder=/app:company_home/app:shared/cm:picture \
--applier.action=DESCRIBE
...
Processing 1 documents of a total of 1
END: All documents have been processed. The app may need to be executed again for nodes without existing PDF rendition.

このプロセスに従うと、フォルダー内のすべての picture Alfresco画像に、GenAI Stackサービスによって取得された情報(テキストの説明と使用されたLLM)が含まれます(図 7)。

alfrescoリポジトリでのドキュメントの説明の更新を示すスクリーンショット。
図 7: Alfrescoリポジトリでドキュメントが更新され、テキストの説明とモデル(LLM)が追加されました。

Alfrescoにアップロードされる新しいドキュメントの機能強化

この alfresco-ai/alfresco-ai-listener フォルダにある AI Listener アプリケーションには、Alfrescoのメッセージをリッスンし、GenAIサービスから応答を取得し、Alfrescoの元のドキュメントを更新するSpring Bootアプリケーションが含まれています。

アプリケーションを初めて実行する前に、Maven を使用してソースコードをビルドし、Docker イメージをビルドする必要があります。

cd alfresco-ai/alfresco-ai-listener
mvn clean package
docker build . -t alfresco-ai-listener

AI Listenerアプリケーションをコンテナとして使用しているため、Alfrescoのデプロイを停止し、ファイル内の compose.yaml コメント alfresco-ai-listener を解除します。

include:
  - genai-stack/compose.yaml
  - alfresco/compose.yaml
  - alfresco/compose-ai.yaml

標準コマンドを使用してスタックを起動します。

docker compose up --build --force-recreate

サービスが再び起動し、準備が整うと、Alfresco Repositoryにアクセスできるようになります。 プラットフォームが動作していることは、次の URL で既定の資格情報 (admin/admin) を使用して確認できます。

要約

次に、新しいドキュメントをアップロードし、ドキュメントに「AIで要約可能」の側面を適用します。 しばらくすると、ドキュメントにはGenAI Stackサービスによって取得された情報(要約、タグ、使用されたLLM)が含まれます。

形容

AIエンハンスメントを使用する場合は、手動で行うのではなく、必要なアスペクトを自動的に適用するフォルダーを設定することをお勧めします。

Alfresco Repositoryという名前の新しい pictures フォルダを作成し、次の設定を含むルールを作成します。

  • 名前: description
  • いつ: アイテムが作成されるか、このフォルダーに入る
  • すべての条件が満たされている場合: すべてのアイテム
  • アクションの実行: 「AI で記述可能」の側面を追加

このフォルダに新しい画像をアップロードします。 しばらくすると、アスペクトを手動で設定せずに、ドキュメントにはGenAIスタックサービスによって取得された情報(説明と使用されたLLM)が含まれます。

分類

Alfresco Repositoryという名前の classifiable 新しいフォルダーを作成します。 このフォルダに「Classifiable with AI」アスペクトを適用し、「Terms」プロパティにカンマで区切られた用語のリストを追加します(英語、日本語、スペイン語など)。

次の設定でフォルダーの新しい classifiable ルールを作成します。

  • 名前: classifiable
  • いつ: アイテムが作成されるか、このフォルダーに入る
  • すべての条件が満たされている場合: すべてのアイテム
  • アクションの実行: 「AI で分類」アスペクトを追加

このフォルダに新しいドキュメントをアップロードします。 しばらくすると、ドキュメントにはGenAI Stackサービスによって取得された情報(用語と使用されたLLM)が含まれます。

AIで分類を使用すると、ある程度の自動化を実現できます。 これを行うには、次の内容で「Repository/Data Dictionary/Scripts」フォルダーに、次の classify.js 内容の単純なAlfresco Repositoryスクリプトを作成する必要があります。

document.move(
  document.parent.childByNamePath(    
    document.properties["genai:term"]));

フォルダーの新しい classifiable ルールを作成して、次の設定でこのスクリプトを適用します。

  • 名前: move
  • 時期: アイテムが更新される
  • すべての条件が満たされている場合: すべてのアイテム
  • アクションの実行: スクリプトの実行classify.js

「Terms」プロパティで定義されたすべての用語の名前を持つフォルダーの classifiable 子フォルダーを作成します。 

この構成を設定すると、フォルダーにアップロードされたドキュメントは、識別された用語に基づいてサブフォルダーに自動的に移動されます。 つまり、伝票は自動的に分類されます。

プロンプト

最後に、プロンプト GenAI 機能を使用するには、既存のドキュメントに "Promptable with AI" アスペクトを適用します。 「質問」プロパティに質問を入力します。

しばらくすると、ドキュメントにはGenAI Stackサービスによって取得された情報(answerと使用されたLLM)が含まれます。

文書管理の新時代

このフレームワークを採用することで、効率性、生産性、ユーザーエクスペリエンスを新たなレベルに引き上げるだけでなく、無限のイノベーションの基盤を築くことができます。 AlfrescoとGenAI Stackを使えば、文書分析の強化やコンテンツ分類の自動化、検索機能の革新など、可能性は無限大です。

このプロセスの一部について不明な点がある場合は、すべての手順をライブで示す次のビデオをご覧ください。

さらに詳しく