組織は数え切れないほどのレポート、契約書、研究論文、その他の文書を扱わなければなりませんが、これらの文書から関連情報を管理、解読、抽出することは困難で時間がかかる場合があります。 このようなシナリオでは、AI を活用したドキュメント管理システムが革新的なソリューションを提供できます。
DockerでジェネレーティブAI(GenAI)技術を開発すると、長いドキュメントを要約するだけでなく、それらを分類して詳細な説明を生成し、見逃していた可能性のある迅速な洞察を提供することさえ、無限の可能性が広がります。 AIを活用したこの多面的なアプローチは、組織がテキストデータと対話する方法を変え、時間と労力の両方を節約します。
この記事では、堅牢なドキュメント管理システムである Alfrescoと GenAIスタック を統合して、ドキュメント分析の強化、コンテンツ分類の自動化、検索機能の変革などの可能性を広げる方法を見ていきます。
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の公式ドキュメントを参照してください。
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 API と Alfresco 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サービスから結果を取得できます。
技術的には、Dockerの導入には、同じDockerネットワーク上で実行されるAlfrescoとGenAIスタックの両方のプラットフォームが含まれます(図 3)。
GenAIスタックはREST APIサービスとして機能し、エンドポイントはgenai:8506で利用可能ですが、AlfrescoはREST APIクライアント(alfresco-ai-applier)とメッセージAPIクライアント(alfresco-ai-listener)を使用してAIサービスと統合します。 どちらのクライアントもコンテナーとして実行することもできます。
GenAI Stack サービスは、以下のエンドポイントを提供します。
- summary: ドキュメントの概要を複数のタグとともに返します。 これにより、応答の言語、要約の単語数、タグの数など、いくつかのカスタマイズが可能です。
- classify: ドキュメントに最も一致するリストから用語を返します。 分類するドキュメントに加えて、入力として用語のリストが必要です。
- prompt: ドキュメントの Retrieval-augmented generation (RAG) を使用してカスタムユーザープロンプトに応答し、応答の範囲を制限します。
- describe: 入力画像の説明テキストを返します。
GenAI Stackサービスの実装は、ドキュメントテキストをNeo4j VectorDBのチャンクにロードし、埋め込みによるQAチェーンを改善し、応答の幻覚を防ぎます。 画像は、ビジュアルエンコーダ(LlaVA)を備えたLLMを使用して処理され、説明が生成されます(図 4)。 Docker GenAI Stackでは、異なる目標に対して複数のLLMを使用できることに注意してください。
はじめ
開始するには、次の点を確認してください。
- 20 GB の RAM が割り当てられた最新バージョンの Docker Desktop がインストールされていることを確認します。
- Java 17 と Maven 3がインストールされていることを確認します。9.
- Ollama がローカルで実行されていることを確認します。
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) を使用してプラットフォームをテストできます。
- リポジトリサービス: http://localhost:8080/alfresco
- UI: http://localhost:8080/share
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 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 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にアップロードされる新しいドキュメントの機能強化
この 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) を使用して確認できます。
- リポジトリサービス: http://localhost:8080/alfresco
- UI: http://localhost:8080/share
要約
次に、新しいドキュメントをアップロードし、ドキュメントに「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を使えば、文書分析の強化やコンテンツ分類の自動化、検索機能の革新など、可能性は無限大です。
このプロセスの一部について不明な点がある場合は、すべての手順をライブで示す次のビデオをご覧ください。
さらに詳しく
- 「Introducing a New GenAI Stack: Streamline AI/ML Integration Made Easy」をお読みください。
- Docker Newsletter を購読してください。
- Docker デスクトップの最新リリースを入手します。
- 質問がありますか? Docker コミュニティがお手伝いします。
- ドッカーは初めてですか? 始めましょう。