【デジタルツイン×生成AIによる製造業DX!】AWS IoT TwinMaker Samples のクッキー工場バージョン3(CookieFactoryV3)を試してみた 〜その4 AI アシスタント動作および仕様確認編〜

【デジタルツイン×生成AIによる製造業DX!】AWS IoT TwinMaker Samples のクッキー工場バージョン3(CookieFactoryV3)を試してみた 〜その4 AI アシスタント動作および仕様確認編〜

Clock Icon2024.11.06

こんにちは、製造ビジネステクノロジー部の若槻です。

昨年公開された下記の AWS 公式ブログでは、AWS IoT TwinMakerAmazon Bedrock を使用して製造業向けの生成 AI アシスタントを構築する方法が紹介されています。

https://aws.amazon.com/blogs/iot/building-an-ai-assistant-for-smart-manufacturing-with-aws-iot-twinmaker-and-amazon-bedrock/

上記を参考に AWS IoT TwinMaker Samples のクッキー工場バージョン 3 (CookieFactoryV3) のデジタルツインに AI によるアシスタント (AI Assitant Module) を追加する実装を下記の 3 つの記事に渡ってこれまで紹介してきました。

https://dev.classmethod.jp/articles/aws-iot-twinmaker-samples-cookie-factory-v3-building/
https://dev.classmethod.jp/articles/aws-iot-twinmaker-samples-cookie-factory-v3-dashboard/
https://dev.classmethod.jp/articles/aws-iot-twinmaker-samples-cookie-factory-v3-ai-assistant-settings/

今回は、上記の続編として、CookieFactoryV3 に追加した AI Assitant Module の動作および仕様確認について紹介します。

試してみた

前述の 3 つの記事で紹介している手順が完了していることを前提とします。

基盤モデルへのアクセスの追加

AI Assitant Module で使用される Amazon Bedrock の基盤モデルは assistant/app/lib/llm.py で定義されています。

https://github.com/aws-samples/aws-iot-twinmaker-samples/blob/main/src/workspaces/cookiefactoryv3/assistant/app/lib/llm.py#L22-L25

既定では以下の 3 つのモデルが使用されています。

  • anthropic.claude-instant-v1
  • anthropic.claude-v2
  • amazon.titan-embed-text-v1

これらの基盤モデルを AI Assitant Module が使用できるように、Bedrock のマネジメントコンソールからモデルへのアクセスを追加しておきます。

https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html

モデルの使い分けについては後述の仕様確認で説明します。

Pipenv 環境の起動

次のコマンドを実行して Pipenv の仮想環境を起動します。

pipenv shell

これにより Pipfile で定義されている LangChain などの Python パッケージがインストールされた環境に入ります。

AWS CLI での認証の構成

AI Assitant Module が Amazon Bedrock へアクセスする際に使用する認証情報を AWS CLI で構成しておきます。

https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-authentication.html

環境変数の指定

export AWS_REGION=us-east-1
export WORKSPACE_ID=CookieFactoryV3

AI Assitant Module の起動

認証を構成したセッションで assistant/run.sh を実行します。

./run.sh

すると AI Assitant Module が起動し、デフォルトのブラウザでチャット UI(localhost:8000)が開きます。

AI Assitant Module はバックグラウンドで起動し続けるので、このチャット UI は閉じても問題ありません。

ダッシュボードの起動

次のコマンドを実行してダッシュボードアプリケーションを起動します。

cd ../dashboard
npm run dev

ブラウザで localhost:8443 を開き、ロールとロケーションを選択したら、CookieFactoryV3 のダッシュボードが表示されます。

問題イベントのシミュレーションの開始

CookieFactoryV3 では生産工程の問題イベントをシミュレートすることができます。イベントは固定の内容が app.config.template.tsx で定義されています。(実際にはこれがコピーされて作成された app.config.tsx が使われる)

https://github.com/aws-samples/aws-iot-twinmaker-samples/blob/main/src/workspaces/cookiefactoryv3/dashboard/src/app.config.template.tsx#L54-L60

ナビゲーションバーの[Run event simulation]ボタンをクリックして、イベントをトリガーします。

イベントが開始されます。[Acknowledge]ボタンをクリックしてイベントを確認します。

するとダッシュボード右側に AI アシスタントパネルが開きます。現在発生している問題について診断を行うかどうかを尋ねられます。[Run Issue Diagnosis]をクリックして診断を開始します。

Hi, I'm the AI assistant of the Cookie Factory. I'm here to help you diagnose and resolve issues with the cookie production line.

There is an ongoing event #98765. Do you want to run an initial diagnosis of the issue?

するとアシスタントは診断結果として問題の概要と原因の候補をいくつか提示します。また問題が発生していると考えられる機器へ 3D ビューアー上で遷移するボタンが表示されるのでクリックします。

Initial Diagnosis
Summary of the issue
An alarm triggered at 3:21 PM on Nov. 2nd, indicating an anomaly in cookie shape on the production line where more than 11 deformed cookies were produced within a 5 minute period.

Potential root causes

  • Issues with cookie dough extruder: Worn parts could be causing uneven dough flow resulting in misshapen cookies.
  • Problems with conveyor belt: An uneven or slipping conveyor belt could cause cookies to deform before entering the oven.
  • Oven temperature fluctuations: Inconsistent oven temperatures across belts/zones may result in uneven baking and cookie deformation.
  • Dough ingredient inconsistencies: Variations in dough ingredient ratios/qualities could impact the shape-retaining properties of the dough.
  • Improper dough mixing: Inadequate or too vigorous mixing could develop structural flaws in the dough affecting cookie shape.

The line operators may want to inspect the extruder, conveyor belt and oven conditions/recordings to identify potential issues causing the deformed cookies. It may also help to check dough ingredients and mixing processes. Resolving mechanical or process problems should help reduce deformed cookie counts.

すると 3D ビューアーでフォーカスが移動しました。Cookie Inspector で問題が発生しているようです。このナビゲーション機能によりユーザーは問題の発生箇所を視覚的に確認することができます。

さて、ここまでのアシスタントの返答ですが、実は Bedrock のモデルにより生成されたものではなく、動作イメージとしてデモ用にあらかじめ用意された定型文となります。実際の生成 AI モデルが利用された返答は、ユーザーによる入力に対して行われます。

ユーザーの入力に対する AI アシスタントの応答

ここからは実際にいくつかのユーザー入力に対する生成 AI による応答を確認してみます。今回実装した AI Assitant Module は日本語と英語のどちらにも対応しています。

その1

機器の問題の修正方法などドメイン固有の質問をすると、検索拡張生成 (RAG) パターンにより埋め込まれたマニュアルを参照して回答が行われます。

  • 入力
how to fix the temperature fluctuation issue in the freezer tunnel
冷凍トンネルの温度変動問題を修正する方法
  • 出力

冷凍トンネルの温度変動問題を修正する方法は、以下の点を確認することです。温度センサーの定期的な校正と正確な測定を確保する必要があります[1]。ドアシールに漏れや損傷がないかを調べ、必要に応じて交換する必要があります[1]。冷媒の漏れや量が少ない場合は補給または修理する必要があります[1]。コンプレッサが正しく機能しているかを確認します[1]。解凍サイクルが製造元の推奨事項に従って機能しているか、長時間の温度上昇を引き起こしていないかを確認する必要があります[1]。製品の過負荷は温度変動を引き起こす可能性があるため、冷凍トンネルに製品を過負荷にしないようにする必要があります[1]。

その2

さらに冷凍トンネルについて尋ねると、複数の冷凍トンネルのうちどれかを選択するように求められ、選択に応じて回答が行われます。冷凍トンネルの情報の取得は TwinMaker Knowledge Graph をクエリして行われます。

  • 入力
focus the 3D viewer to the freezer tunnel
3D ビューアーを冷凍トンネルにフォーカスしてください
  • 出力

I've found these matching entities:

No Name Id
1 FREEZER_TUNNEL FREEZER_TUNNEL_2f21726d-64f9-4e92-86e2-b8d1bb3e54d7
2 FREEZER_TUNNEL FREEZER_TUNNEL_c726a21e-8fd4-4210-b71e-0ef9acc59d97
3 FREEZER_TUNNEL FREEZER_TUNNEL_e12e0733-f5df-4604-8f10-417f49e6d298
4 INSPECTOR_POST_FREEZER_TUNNEL INSPECTOR_POST_FREEZER_TUNNEL_999d8796-55f1-4791-af53-fc210038686f

  • 入力
1
  • 出力

I've pointed you to the FREEZER_TUNNEL_2f21726d-64f9-4e92-86e2-b8d1bb3e54d7 in the 3D Viewer.

今回のデモでは実際にフォーカスされませんが、実際のアプリケーションでは 3D ビューアー上で選択された冷凍トンネルが表示されます。

その3

ある種類の機器の情報をリストするように尋ねた場合も、情報の取得が TwinMaker Knowledge Graph から行われます。

  • 入力
list all cookie lines
すべてのクッキー製造ラインをリストしてください
  • 出力

0 COOKIE_LINE_1 [COOKIE_LINE_1_70cde09c-2c2b-4aa2-9fc3-a91ff659e8f3]
1 COOKIE_LINE_2 [COOKIE_LINE_2_31be44be-6df3-4312-bd8f-84a9282f5029]
2 COOKIE_LINE [COOKIE_LINE_5ce9f1d5-61b0-433f-a850-53fa7ca27aa1]

その4

機器のマニュアルが見つかった場合は、S3 バケットなどに保管されているマニュアルのリンクが返されます。

  • 入力
find SOPs to fix temperature fluctuation in freezer tunnel
冷凍トンネルの温度変動を修正するための SOP を見つけてください

※ SOP とは「Standard Operating Procedures」の略で、標準作業手順書のこと。

  • 出力

冷凍トンネルの温度変動を修正するためのSOPは、知識ベースから以下の部分に記載があります[1]。温度変動に対処するための手順として、温度センサーの定期的な校正、ドアシールの点検、冷媒レベルのチェック、コンプレッサーの点検、解凍サイクルの確認、製品の過剰な積載による影響などが挙げられています。

リンクからアクセスしたドキュメントです。今回のデモアプリで返されるドキュメントはローカルに保管されたものとなります。

仕様確認

全体システム構成

デモの全体システム構成は次のようになります。

Building an AI Assistant for Smart Manufacturing with AWS IoT TwinMaker and Amazon Bedrock | The Internet of Things on AWS – Official Blog より引用

AI Assitant Module は Amazon Bedrock の生成 AI モデルを LLM として使用し、またユーザーのドメイン固有の質問に回答できるように、AWS IoT TwinMaker の Knowledge Graph 機能と S3 バケットに保管されているユーザー提供のドキュメントを追加のコンテキストとして使用します。

LLM エージェントとして使用している LangChain によりローカルに Vector Database ファイルが作成されます。

AI Assitant Module の内部仕様

AI Assitant Module の内部では、ユーザー入力が複数の LLM チェーンの間でルーティングされて、最終的なユーザー出力が生成されます。

Building an AI Assistant for Smart Manufacturing with AWS IoT TwinMaker and Amazon Bedrock | The Internet of Things on AWS – Official Blog より引用

MultiRouteChain はオーケストレーションを行うチェーンです。ユーザーの入力はまず LLMRouteChain に送信され、そこで LangChain によって解析されてどのサブチェーンにルーティングするかが決定されます。

GraphQueryChain は自然言語を IoT TwinMaker Knowledge Graph に変換する LLM チェーンです。IoT TwinMaker では 3D モデルに対応させる形で建物や機器の関係性を表すグラフが構築されており、このグラフをクエリすることでユーザーの入力に対する回答を生成します。前述のその 2 やその 3 の例がこれに該当します。

DomainQAChain は RAG パターンを使用してユーザーの質問に回答する LLM チェーンです。ユーザーが提供するドキュメント内の情報を使用して、ドメイン固有の質問に回答したり、ドキュメントの場所を示すリンクを生成します。前述のその 1 とその 4 がの例がこれに該当します。

GeneralQAChainGraphQueryChain および DomainQAChain に合致しない一般的な質問に回答する LLM チェーンです。

また LLM チェーンによってコストパフォーマンスや適性のある基盤モデルが使用されるようになっています。例えば DomainQAChain では RAG を使用した回答ができるように Titan Embeddings が使用され、GraphQueryChain では低価格でより高速に回答可能な Claude Instant が使用されます。

トラブルシュート

./run.sh 実行時に AccessDeniedException が発生する

assistant/run.sh 実行時に次のような AccessDeniedException が発生する場合。

Traceback (most recent call last):
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/bin/chainlit", line 8, in <module>
    sys.exit(cli())
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/chainlit/cli/__init__.py", line 153, in chainlit_run
    run_chainlit(target)
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/chainlit/cli/__init__.py", line 47, in run_chainlit
    load_module(config.run.module_name)
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/chainlit/config.py", line 247, in load_module
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "app/bedrock.py", line 21, in <module>
    from lib.router import LLMRouterChain, MultiRouteChain, create_routes
  File "/Users/wakatsuki.ryuta/projects/aws-samples/aws-iot-twinmaker-samples/src/workspaces/cookiefactoryv3/assistant/app/lib/router.py", line 20, in <module>
    from .tools.view import ViewChain
  File "/Users/wakatsuki.ryuta/projects/aws-samples/aws-iot-twinmaker-samples/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py", line 21, in <module>
    from ..llm import get_bedrock_text, get_processed_prompt_template
  File "/Users/wakatsuki.ryuta/projects/aws-samples/aws-iot-twinmaker-samples/src/workspaces/cookiefactoryv3/assistant/app/lib/llm.py", line 76, in <module>
    response = bedrock.list_foundation_models()
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/botocore/client.py", line 535, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/Users/wakatsuki.ryuta/.local/share/virtualenvs/assistant-DNaGx-nM/lib/python3.9/site-packages/botocore/client.py", line 980, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the ListFoundationModels operation: User: arn:aws:iam::XXXXXXXXXXXX:user/cm-wakatsuki.ryuta is not authorized to perform: bedrock:ListFoundationModels with an explicit deny in an identity-based policy

Bedrock から基盤モデルが取得できていないというエラーです。AWS CLI での認証が正常に行われていない可能性があります。私の場合は「AWS CLI での認証の構成」の対応で解決しました。

./run.sh 実行時に ModuleNotFoundError が発生する

assistant/run.sh 実行時に次のような ModuleNotFoundError が発生する場合。

/opt/homebrew/lib/python3.11/site-packages/langchain/__init__.py:29: UserWarning: Importing PromptTemplate from langchain root module is no longer supported. Please use langchain.prompts.PromptTemplate instead.
  warnings.warn(
Traceback (most recent call last):
  File "/opt/homebrew/bin/chainlit", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/chainlit/cli/__init__.py", line 154, in chainlit_run
    run_chainlit(target)
  File "/opt/homebrew/lib/python3.11/site-packages/chainlit/cli/__init__.py", line 55, in run_chainlit
    load_module(config.run.module_name)
  File "/opt/homebrew/lib/python3.11/site-packages/chainlit/config.py", line 282, in load_module
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/Users/wakatsuki.ryuta/projects/aws-samples/aws-iot-twinmaker-samples/src/workspaces/cookiefactoryv3/assistant/app/bedrock.py", line 21, in <module>
    from lib.router import LLMRouterChain, MultiRouteChain, create_routes
  File "/Users/wakatsuki.ryuta/projects/aws-samples/aws-iot-twinmaker-samples/src/workspaces/cookiefactoryv3/assistant/app/lib/router.py", line 20, in <module>
    from .tools.view import ViewChain
  File "/Users/wakatsuki.ryuta/projects/aws-samples/aws-iot-twinmaker-samples/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py", line 19, in <module>
    from tabulate import tabulate
ModuleNotFoundError: No module named 'tabulate'

LangChain が依存する tabulate パッケージがインストールされていないためです。私の場合は「Pipenv 環境を起動」手順の実施を忘れていたため、実施することで解決しました。

チャットの応答が ExpiredTokenException となる

チャットへの入力に対する応答として下記エラーが返ってくるようになった場合。

An error occurred (ExpiredTokenException) when calling the ExecuteQuery operation: The security token included in the request is expired

これは AI Assitant Module が Amazon Bedrock へのアクセスに使用する認証情報が期限切れになったためです。

私の場合は下記の対応で解決しました。

  1. cd assistant && ./stop.sh で AI Assitant Module を停止します。
  2. AWS CLI で認証情報を再構成します。
  3. ./run.sh で AI Assitant Module を再起動します。

おわりに

前回から期間が空いてしまいましたが、当シリーズを何とか完遂させることができました。

「デジタルツイン」と「生成 AI」という 2 つの技術トレンドを組み合わせたアプリケーションのデモを簡単に試せるのは熱いですね。ちなみに今回のデモは下記ブログで紹介されている通り、AWS re:Invent 2023 の Expo でデモ展示もされていました。

https://blog.soracom.com/ja-jp/2023/12/15/report-of-aws-reinvent-2023/

このようなソリューションが製造現場に導入されることにより、工場などのデジタルツインによる可視化と AI アシスタントによる自然言語での対話 UI が組み合わさることにより、熟練でない作業者でもより簡単に製造現場の状況の把握や問題への洞察が可能になり、製造業の生産性の向上につながるのではないでしょうか。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.