プロンプト・チェーンは、大規模言語モデル(LLM)を使用して高度なワークフローを構築する際の基本的な概念です。複数のプロンプトを論理的なシーケンスで結び付け、あるプロンプトのアウトプットが次のプロンプトのインプットとして機能するようにします。このモジュール式アプローチは、多段階テキスト処理、要約、質問応答などの複雑なタスクの解決に強力です。
LangChainは、このようなワークフローの作成を簡素化するために設計された多用途フレームワークです。IBM GraniteモデルやOpenAIのGPT(Generative Pre-trained Transformer)モデルなどのLLMを管理し、カスタムプロンプトを定義し、それらを再利用可能なチェーンに接続するためのツールを提供します。LangChainでは、プロンプト管理の複雑さを抽象化することで、開発者はLLMとのやり取りをオーケストレーションするのではなく、問題の解決に集中できるようになります。
このチュートリアルでは、次のことを行います。
LangChainでは、チャットボットアプリケーションでモジュール式ワークフローを構築するための強力なフレームワークを提供します。構造化プロンプト、動的チェーン、高度なLLM統合を組み合わせることで、開発者はRAG技術を活用し、JSONなどの構造化されたアウトプットを提供するスケーラブルで適応性のあるパイプラインを作成できます。LangChainがプロンプト・チェーンを効果的に処理する方法は次のとおりです。
プロンプトの抽象化:LangChainでは、from_templateを活用して各ステップの構造化された入出力ワークフローを設計し、複雑なチャットボット・オペレーションを簡単に処理できるようにします。
LLM統合:このフレームワークでは、IBM Granite、OpenAI、Hugging FaceなどのさまざまなLLMとシームレスに統合されており、カスタマイズされたタスクに合わせてファイン・チューニングすることができます。
チェーン管理:LangChainのSequentialChainとSimpleSequentialChainがチャットボットパイプライン用のモジュール式ワークフローを可能にし、StroutputparserがJSONなどの構造化されたアウトプットを実現します。
動的なワークフロー:LangChainでは、ConditionalChainやシステムメッセージテンプレートなどのツールを使用して、動的コンテンツ生成のためのRAG(検索拡張生成)の原則に沿った適応型ワークフローをサポートします。
このチュートリアルが終わるまでに、LangChainを使用して幅広い用途向けのモジュール式で拡張可能なワークフローを構築する方法をしっかり理解できるようになります。
プロンプト・チェーンを使用すると、あるステップからのアウトプットが次のステップに渡されるワークフローを設計できます。さまざまなタイプのチェーンが、単純な逐次タスクからより複雑で動的なプロセスまで、多様なワークフローをサポートします。プロンプト・チェーンの種類を簡単に説明します。
シーケンシャル・チェーン:最も単純なタイプのチェーンで、アウトプットがインプットとして次のプロンプトに直接渡されます。このオプションは、直線的な進行のタスクに最適です。[1]
分岐チェーン:分岐チェーンでは、一つのアウトプットが複数の並列ワークフローに分割されます。分岐ごとにアウトプットを個別に処理します。[2]
反復チェーン:反復チェーンでは、指定された条件が満たされるまでプロンプトまたはチェーンを繰り返し実行します。このオプションはアウトプットを洗練させるのに役立ちます。[3]
階層的チェーン:このタイプでは、大規模なタスクを小さなサブタスクに分解し、階層的に実行します。下位レベルのアウトプットは、上位レベルのタスクにフィードされます。[4]
条件付きチェーン:条件付きチェーンでは、前のプロンプトのアウトプットに基づいて次のステップを動的に選択します。ワークフロー内での意思決定を可能にします。
マルチモーダル・チェーン:マルチモーダル・チェーンでは、さまざまなデータタイプ(テキスト、画像、音声など)を処理するプロンプトを統合します。複数のモダリティーを組み合わせる用途に適しています。[2]
動的チェーン:動的チェーンは、リアルタイムアウトプットや変化する条件に基づいてワークフローを適応させます。これにより、プロンプト・チェーンに柔軟性が加わります。[5]
再帰的チェーン:再帰的チェーンでは、大規模なインプットを個々の処理のために小さなチャンクに分割し、その結果を結合します。長いドキュメントやデータセットの処理に役立ちます。[6]
リバース・チェーン:リバース・チェーンでは、期待されるアウトプットから始まり、それを達成するために必要なインプットやステップを決定します。問題解決とデバッグに最適です。[5]
各タイプのチェーンは固有のユースケースに対応しているため、タスクの複雑さと要件に基づいて適切なチェーンを選択することが不可欠です。
このワークフローでは、チャット・モデルとプロンプト・エンジニアリングを使用して顧客からのフィードバックを処理し、スケーラブルなテキスト処理パイプラインを構築します。本チュートリアルの次のステージでは、生成AIを活用したシーケンシャル、分岐、反復チェーンの手法を紹介します。
キーワードの抽出(シーケンシャル・チェーン)
センチメントサマリーの生成(分岐チェーン)
センチメントサマリーの改善(反復チェーン)
最終アウトプット
このアプローチでは、Pythonのシーケンシャル、分岐、反復チェーンが、チャット・モデルとプロンプト・エンジニアリングと組み合わせられます。キーワードの抽出、センチメント分析、改善に生成AIを活用し、顧客からのフィードバックを確実に処理します。
watsonx.aiプロジェクトを作成するにはIBM Cloudアカウントが必要です。
いくつかあるツールの中から選択することもできますが、このチュートリアルでは、Jupyter Notebookを使用してIBMアカウントを設定する方法について説明します。
このステップでは、このチュートリアルのコードをコピーできるノートブック環境を開きます。あるいは、このノートブックをローカル・システムにダウンロードし、watsonx.aiプロジェクトにアセットとしてアップロードすることもできます。さらにGraniteのチュートリアルを表示するには、IBM Graniteコミュニティをご覧ください。このチュートリアルは、GitHubでも公開されています。
LangChainフレームワークとwatsonxLLMを連携させるには、ライブラリーが必要です。まず、必要なパッケージをインストールしましょう。
注:古いバージョンの「pip」を使用している場合は、コマンド「pip install --upgrade pip」を使用してアップグレードできます。この手順は、古いバージョンと互換性がない可能性がある最新のパッケージを簡単にインストールするのに役立ちます。ただし、既に最新バージョンを使用している場合、または最近パッケージをアップグレードした場合は、このコマンドをスキップできます。
このコード・ブロックでは、LangChainとIBM Watson LLMを使用してLLMアプリケーションを構築および管理するために不可欠なPythonライブラリーとツールをインポートします。
osモジュールは、プロジェクトの認証情報やAPIキーなどの環境変数にアクセスするために使用されます。
WatsonxLLMはlangchain_ibmのモジュールで、生成AIモデルからアウトプットを生成するためのIBM Watson LLMを統合します。
PromptTemplateは、プロンプトの再利用可能なテンプレートを作成するのに役立ち、プロンプト・エンジニアリングにおけるインプット構造と柔軟性を確保します。
LLMChainは、個々のタスクチェーンを構築する一方で
SequencialChainは、複数のステップを単一のワークフローにリンクし、「getpass」は画面上に公開することなく、機密情報(APIキーなど)を安全に取得します。
このコードでIBM Watson Machine Learning(WML)APIにアクセスするための認証情報を設定し、PROJECT_IDが正しく構成されていることを確認します。
このコードでは、アプリケーションで使用するためにIBM Watson LLMを初期化します。
このステップでは、Watson LLMがワークフローで応答を生成できるように準備します。
このコードでは、テキスト処理ワークフローの3つの段階でプロンプト・テンプレートを定義します。
これらのPromptTemplateインスタンスにより、LLMアプリケーションの再利用可能で構造化されたプロンプト・エンジニアリングが可能になります。
このコードでは、プロンプトを初期化されたIBM Watson LLMに接続して各段階に一意のアウトプットを割り当てるチェーンを定義します。
これらのLLMChainインスタンスでは、モジュール式タスクの実行を可能にし、段階的なLLMアプリケーションのワークフローを容易にします。
このコードでは、以前に定義したチェーンがシーケンシャルワークフローに結合され、テキスト入力の段階的なプロセスが可能になります。SequentialChainでは、keyword_chain、sentiment_chain、refine_chainを定義された順序でリンクし、あるチェーンのアウトプットが次のチェーンのインプットとして機能するようにします。ワークフローはテキストを最初のインプットとして受け入れるように構成されており、最終アウトプットである改善されたセンチメントサマリーは、キー「refined_summary」に保管されます。これにより、LLMアプリケーションの合理化された効率的な実行が可能になり、一貫性のあるモジュール式処理パイプラインが実現します。
このコード・ブロックでは、ワークフロー全体を実行します。まず、feedback_textとして定義された複数行のフィードバック文字列があり、アプリに関する肯定的なユーザー・コメントと否定的なユーザー・コメントの両方が含まれています。workflow.runメソッドでは、入力されたインプットを使用し、シーケンシャル・チェーン(キーワード抽出、センチメント分析、改善)を通じてフィードバックを処理します。そして、改善されたセンチメントサマリーが最終成果として直接印刷されます。
アウトプット
改善されたセンチメントサマリー:
アプリの機能や、時折有用なカスタマー・サポートは高く評価しているものの、アプリのクラッシュが繰り返され、カスタマー・サポートの応答時間も遅いため、ユーザーの感情は主に否定的です。ユーザー満足度を高めるために、開発チームはアプリのクラッシュの解決とカスタマー・サポートの対応の迅速化に重点を置く必要があります。
改善されたセンチメントサマリーは、フィードバックの簡潔かつ明確な評価です。アプリの機能に対するユーザーの評価を強調していますが、頻繁なクラッシュやカスタマー・サポートの遅さに対する不満を表し、ワークフローがクリティカルな洞察を効果的に抽出できることを反映しています。
LLMアプリケーションに適したチェーン・タイプを選択するには、効率と一貫性を確保するための重要な要素を評価します。
タスクの複雑さ:複数のステップを含むタスクには実行可能なワークフローを使用します。few-shotのサンプルやchatprompttemplateは、さまざまなプロンプトを必要とする複雑なタスクを構造化するのに役立つことがあります。
依存関係:あるステップからのアウトプットが次のプロンプトのプレースホルダーである場合は、シーケンシャル・チェーンを使用します。アウトプット・パーサーは、アウトプットを構造化されたインプットにスムーズに移行できるようにします。
適応性:LangChainエージェントが関与するような動的なワークフローの場合、反復チェーンによりパラメーターと次のプロンプトをリアルタイムに調整できます。
データのモダリティー:さまざまなデータ・タイプに対応したワークフローを選択します。テキストおよびベクトル・データの埋め込みメソッド、またはLangChain Expression Languageを使用して、柔軟性の高いオペレーションを実現します。
これらの要素を考慮することで、一貫したチェーン・ワークフローを備えた堅牢で適応性のあるLLMアプリケーションを構築できます。
プロンプト・チェーンは、高度な自然言語処理(NLP)ワークフローを構築するための多用途な手法です。このチュートリアルでは、さまざまなチェーン・タイプを検討し、複数のチェーン・アプローチを統合する一般的なサンプルを示しました。これらの方法を実験することで、実際のアプリケーションに対する言語モデルの可能性を最大限に引き出すことができます。
[1] Roegiest, A., & Chitta, R. (2024). Answering Questions in Stages: Prompt Chaining for Contract QA.
[2] Ge, J., Luo, H., Qian, S., Gan, Y., Fu, J., & Zhang, S. (2023). Chain of Thought Prompt Tuning in Vision Language Models.
[3] Sun, S., Yuan, R., Cao, Z., Li, W., & Liu, P. (2024). Prompt Chaining or Stepwise Prompt? Refinement in Text Summarization. , 7551-7558. https://arxiv.org/abs/2406.00507.
[4] Huang, Q., Zhu, J., Li, Z., Xing, Z., Wang, C., & Xu, X. (2023). PCR-Chain: Partial Code Reuse Assisted by Hierarchical Chaining of Prompts on Frozen Copilot. 2023 IEEE/ACM 45th International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), 1-5. https://ieeexplore.ieee.org/document/10172550.
[5] Wu, T., Jiang, E., Donsbach, A., Gray, J., Molina, A., Terry, M., & Cai, C. (2022). PromptChainer: Chaining Large Language Model Prompts through Visual Programming. CHI Conference on Human Factors in Computing Systems Extended Abstracts. https://dl.acm.org/doi/10.1145/3491101.3519729.
[6] Trautmann, D. (2023). Large Language Model Prompt Chaining for Long Legal Document Classification. ArXiv, abs/2308.04138. https://arxiv.org/abs/2308.04138.