SHARE

目次

目次

SHARE

人工知能(AI)と機械学習

「RAGアプリ構築ガイド:LangChain × サーバーレス」吉田 真吾

「RAGアプリ構築ガイド:LangChain × サーバーレス」吉田 真吾

LangChainとフルサーバーレスを活用したRAGアプリ構築の基本から、実践的ハンズオンまでを包括的に解説。LLMアプリ開発の新たな可能性を探求します。

この記事は、2023年11月21日開催 『ChatGPT/LangChainによるチャットシステム構築[実践]入門』共同著者 吉田 真吾 氏による講演を再編集し記事化したものです。

本書『ChatGPT、LangChainによるチャットシステム構築[実践]入門』は、LangChainとサーバーレス環境を活用して、効率的かつ安全にRAGアプリケーションを構築する方法に焦点を当てています。本記事では、AWS Cloud9 を使用した3つのハンズオンを通じて、LLMアプリケーションの基本的な構築手法や、サーバーレスの特徴とメリット、セキュリティリスクへの対処方法について解説します。

LLMアプリ開発の鍵「LangChain」とは

LangChain は、LLM を使ったアプリケーション開発を専門とする OSS です。LangChain の最大のメリットは、複雑な LLM 操作を抽象化できる点にあります。この抽象化により、開発者は様々なメモリーサービスやローカルツールを同じインターフェースを通して効率的に活用できるようになります。LangChain をマスターすることで、RAG のような先進的な技術への理解が深まり、より豊かなアプリケーション開発が可能になります。

LangChainを学ぶことで、RAGを含む高度なLLM技術の理解が深まります。そのため、まずは『LLMアプリ開発の鍵:LangChain超入門』を読んで基礎知識を築きましょう。

まず、LangChainでRAGを学ぼう

LangChainは、RAGやチャットボットのような技術を低コストかつ比較的簡単に実装できますが、1トランザクションあたりの価値はそれほど高くありません。一方、今後のトレンドは、AIエージェント、AIコパイロット、AITuberなどのような、実装の難易度やコストが高くても、1トランザクションあたりの価値が高い領域へとシフトしていくと考えられます。LLM関連の基礎技術を迅速に習得することで、現実離れした期待をせず、合理的かつ効果的なアプローチでLLMと向き合うことができます。

RAG(検索拡張生成)の基礎を解説

RAG(検索拡張生成) は、最新のデータや特定の知識を LLM に組み込むために使用されるプロセスで、LangChain の中で特に重要な役割を担います。

GPT-3.5 や GPT-4 は 2023 年 4 月までの公開情報を基にしていますが、より新しい情報やプライベートなデータの活用が必要な場合があります。その際、プロンプトに文脈(context)を追加することが考えられます。しかし、GPT の API はトークン数に最大値の制限があるため、多くの情報を含めることには制約があります。この課題を解決するために、RAG(Retrieval Augmented Generation)という手法を用います。この手法では、文書をベクトル化して Vector Stores に保存し、入力に関連する文章を検索します。検索された文書はプロンプトに組み込まれ、その内容を踏まえた上で LLM が回答を生成します

引用元:LLMアプリ開発の鍵:LangChain超入門

上記のように、モデル自体は最新データを保持していません。

そのため RAG では、ベクターデータを埋め込みデータとして取得し、それを基に関連する情報を検索します。ユーザーからの質問に対して類似するデータを特定し、その情報を基に ChatGPT が適切な回答の文章を生成する仕組みを持っています。

サイダス社の事例。自社の規定情報を用いて質問に対する回答を生成しています。この手法は、コスト効率の良さから現在、非常に注目されています。

RAGをサーバーレスで構築すべき理由

これまで AWSサーバーレスヒーローや、サーバーレスコミュニティの主催者として10年間ほど、サーバーレスにコミットしてきました。サーバーレスは、コスト効率が高くメンテナンスも容易で、優れたアプリケーションが実現可能なため、大変おすすめの手法です。

サーバーレスの特徴とメリット

サーバーレスには、以下のような特徴があります。

  1. サーバーを意識する必要がない
    インフラの管理から解放され、開発に集中できます。
  2. イベントドリブンなスケール
    アプリケーションはイベントに基づいて自動的にスケールします。
  3. イベント単位の課金
    実際に使用した分だけの課金が可能です。

クラウドネイティブの観点では IaaS・PaaS・SaaSのパラダイムシフトを代表する技術と言えます。このようなプラットフォームの考え方だけでなく、Software Excellence の観点においてもメリットがあります。

  • マイクロサービス指向
    • 小規模で自律的なシステム
    • 1つの目的にフィットしている
  •  リアクティブなアーキテクチャ
    • リクエストルーティング機能(バインド / トリガ / ファンアウト)/ ランタイム / 状態管理 / 永続ストレージを「分離」することでコードをメンテナンスしやすい状態に維持し、生産性を向上する
  •  認証・認可にもとづくリソースアクセス
    • サービス間のアクセスは認証サービスから取得した委任トークンを用いて認可される(SAML / OpenID Connect)
  •  DRY
    • 競争力を得られない汎用機能のアウトソース

サーバーレスの現実

しかし現実にはまだ追いついていない部分もあるため、厳密なサーバーレスにこだわらず柔軟なアプローチが必要です。サーバーレスのメリットを活用する一方で、現実的な見方を忘れないようにしましょう。

AWS Cloud9で実践的な3つのハンズオンを体験

ChatGPT、LangChainによるチャットシステム構築[実践]入門』は、AWS Cloud9 を使用して、実際の実装に取り組みます。AWS Cloud9 は、オンラインの開発環境プラットフォームで、オンプレミス環境にもデプロイ可能です。本書では、環境に依存する動作の不安定さを最小化するために採用しています。AWS Cloud9 を使用する最大の理由は、異なるローカル環境による影響を排除し、統一されたハンズオン体験を提供することです。さらに、AWS Cloud9はAWSにログインして使用するため、保護された環境での作業が可能です。

AWS Cloud9 メリット AWS Cloud9 デメリット
  • 環境差異がなく、一貫した開発体験を提供
  • IAM(Identity and Access Management)によるセキュリティとアクセス管理
  • インターネット接続が必須
  • オンラインエディタの使用感に慣れが必要

AWS Cloud9 について詳しくはこちらを御覧ください。

AWS Cloud9 とは:https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/welcome.html

1. 履歴ベースの外部検索応答ができるWebアプリの実装

本書の第6章は、Streamlit Cloud を使用して、AIエージェントが外部情報を検索して応答する Webアプリケーションを実装します。Streamlit Cloud は Pythonライブラリとして使用でき、わずかなコードでフロントエンドの生成を行うことができるため、非常に便利です。例えば、’langchain-streamlit-app’ とコードを指定するだけで、H1(見出し)を生成でき、フロントエンドの詳細な部分の作成を省略できます。

実装は、LangChain の Agentツールを使用し、DuckDuckGo と Wikipedia をロードします。つまり、質問内容が DuckDuckGo や Wikipedia で答えられるかどうかを自動で判断し、適切な回答を提供するシステムを構築します。AWS Cloud9 でのコーディング後、コードを GitHub にアップロードし、Streamlit Cloud に設定を施せば、リポジトリから自動的に Streamlit Cloud にデプロイされるため、push操作を行うだけでアプリケーションが Streamlit Cloud 上にホストされます。

2. 社内文書に対応した Slackアプリの開発

本書の第7章と第8章では、社内文書に基づいて質問に答える Slackアプリケーションの実装について解説します。このアプリケーションは、アップロードされた文書を使用して、Slack上の質問に自動的に応答します。

LLM を組み込んだチャットアプリケーションを写経しながら実装できる「ChatGPT/LangChain によるチャットシステム構築[実践]入門」を読んだ https://kakakakakku.hatenablog.com/entry/2023/10/16/085525

開発プロセスでは、AWS Cloud9 上でSlackアプリをソケットモードで開発し、完成したソースコードを AWS Lambda にデプロイします。このデプロイにより、Slackからの接続は Lambda へ切り替えられます。本章はステップバイステップで進められ、Slackの制限や特性について詳しく解説しているため、Slackアプリケーションの特徴や、社内文書を利用した応答システムの実装について深く理解することが可能になります。

3. セキュリティリスクへの対応

本書の9章では、セキュリティリスクと AI規制に関するトピックを取り上げています。今回は、特に注目すべきポイントを2つ紹介します。

1. OWASP Top 10 for LLM

「OWASP Top 10 for LLM」は、LLMアプリケーションに固有のセキュリティリスクと、その対策を提供するガイドラインです。このガイドラインでは、特にエージェントの暴走を防止するための脆弱性の排除に注目しています。

LLMアプリケーションを既存のシステムに拡張として組み込む場合、アプリケーションに存在する脆弱性が既存システムにもセキュリティリスクをもたらす可能性があります。そのため、既存システムのセキュリティ対策と同じく、LLMアプリケーションに対しても高レベルのセキュリティ対応が求められます。

このガイドラインに従い、LLMアプリケーションのセキュリティリスクを最小限に抑え、安全なシステムの構築を目指すことが重要です。

2. エージェントを暴走させない

今回のハンズオンでは、DuckDuckGo と Wikipedia を有効化し、外部検索に限定したエージェントの動作を実装しています。これにより、エージェントが不要な動きをすることは防がれています。しかし、AIエージェントは本来、目的に向かってステップバイステップで行動を推論し決定するため、自律性が高くなります。この自律性は、エージェントに広範な権限を与えることになり、予期しない危険な動きや暴走を引き起こすリスクがあります。AIエージェントのトレンドが今後も続くと考えられる中で、エージェントが意図した動きの範囲内でのみ行動するように、実装と設定に細心の注意を払う必要があります。

OWASP Top 10 for Large Language Model Applications https://owasp.org/www-project-top-10-for-large-language-model-applications/

書籍の紹介

2024年は、LLM の分野がさらに活況を呈する年になると予想されます。技術の進展に伴い、新しいアプローチや応用が現れるでしょう。ぜひ、この入門書を通じて、LangChainやRAGなどの基本概念から先進技術に至るまで幅広く学んでみてください。

Forkwellキャリア相談

フォークウェルプレス編集部

Follow

記事一覧へ

本サイト掲載の全て記事は、フォークウェル編集部が監修しています。編集部では、企画・執筆・編集・入稿の全工程をチェックしています。

吉田 真吾
株式会社セクションナイン

代表取締役CEO

株式会社セクションナイン 代表取締役CEO ChatGPT Community(JP)、Serverless Community(JP)主催。HCM Suite「CYDAS PEOPLE」の開発・運用。サーバーレステクノロジーのコミュニティ主催を通じて、日本におけるサーバーレスの普及を促進。