エンジニア選書シリーズChatGPT/LangChainによるチャットシステム構築[実践]入門

[表紙]ChatGPT/LangChainによるチャットシステム構築[実践]入門

紙版発売
電子版発売

B5変形判/280ページ

定価3,300円(本体3,000円+税10%)

ISBN 978-4-297-13839-4

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

本書は,ChatGPTのAPIとLangChainを使って,大規模言語モデル(LLM)を本番レベルのシステムに組み込むための知識をステップバイステップで学習し,手を動かしながら実践できる書籍です。

生成AIが登場し,APIやフレームワークのエコシステムが充実してきたことによって,これまで機械学習やプログラミングの十分な知識が必要だったことに対してアプリケーション開発者が挑戦しやすくなりました。LLMの性質を活かしたサービスや業務システム構築の基礎を理解し,LLMのモデルやワークフローを抽象化して取り扱ううえで,LangChainというフレームワークが非常に便利です。本書でOpenAI APIやLangChainをしっかり学ぶことで,生成AI関連の知識を体系的にイメージできるようになります。

本書ではまず,OpenAI APIとLangChainについて解説します。ChatGPTのようなしくみを業務システムなどに組み込むためには,単にLLMに1つ入力して1つ出力を得るような実装ではなく,複数のタスクを一連のワークフロー処理として実現する必要があります。また,ChatGPTが知識を持たない専門知識を答えてほしいとか,意図した形式で応答が欲しいなど,実用性を高める必要も出てきます。これらを実現するためのLangChainのつかいかたをわかりやすく解説します。

後半では,ステートレスなOpenAI APIに記憶を持たせたり,必要に応じてWeb検索などを行うエージェント処理,さらにそれらチャット形式の処理を,ステップバイステップでWebアプリやSlackアプリとして実装します。

さらに,LLMアプリを本番稼働させるうえで必要となる,ユーザー体験,セキュリティ,コンプライアンスへの準拠などのためのヒントや注意点も解説します。

こんな方におすすめ

  • ChatGPTのようなチャットベースのアプリケーション開発を行いたいエンジニア

目次

第1章 大規模言語モデル(LLM)を使ったアプリケーションを開発したい!

  • 1.1 ChatGPTにふれてみよう
  • 1.2 プロンプトの工夫でできること
    • 日々の仕事で使ってみよう
  • 1.3 プログラミングで使ってみよう
  • 1.4 ChatGPTを使うときに気をつけること
  • 1.5 ChatGPTの有料プランでできること
    • GPT-4
    • Plugins
    • Advanced Data Analysis
    • OpenAIのChatGPT以外のサービス
  • 1.6 大規模言語モデル(LLM)のビジネスへの活用
  • 1.7 LLMを活用したビジネスやアプリケーションの事例紹介
    • 株式会社サイダスの事例:CYDAS PEOPLE Copilot Chat
    • PingCAP株式会社の事例:Chat2Query
    • Alexaスキルの事例(個人開発):helloGPT
    • 株式会社ソラコムの事例:SORACOM Harvest Data Intelligence
  • 1.8 LLMを使ったアプリケーション開発で気をつけること
  • 1.9 本書で扱う技術について
    • LangChain
    • クラウドサービス(とくにサーバーレス)
    • Slackアプリでコラボレーションを促進しよう
    • まとめ

第2章 プロンプトエンジニアリング

  • 2.1 なぜいきなりプロンプトエンジニアリング?
    • ChatGPTのプロンプトエンジニアリング
    • アプリケーション開発におけるプロンプトエンジニアリング
    • プロンプトエンジニアリングってあやしくない?
    • COLUMN ファインチューニングとプロンプトエンジニアリング
  • 2.2 プロンプトエンジニアリングとは
  • 2.3 プロンプトの構成要素の基本
    • 題材:レシピ生成AIアプリ
    • プロンプトのテンプレート化
    • 命令と入力データの分離
    • 文脈を与える
    • 出力形式を指定する
    • プロンプトの構成要素のまとめ
  • 2.4 Prompt Engineering Guideから:ChatGPTの無限の可能性を引き出す
    • Zero-shotプロンプティング
    • Few-shotプロンプティング
    • Zero-shot Chain of Thoughtプロンプティング
    • まとめ

第3章 ChatGPTをAPIから利用するために

  • 3.1 OpenAIの文書生成モデル
    • ChatGPTにおける「モデル」
    • OpenAIのAPIで使える文書生成モデル
    • モデルのスナップショット
  • 3.2 ChatGPTのAPIの基本
    • Chat Completions API
    • Chat Completions APIの料金
    • 発生した料金の確認
  • 3.3 入出力の長さの制限や課金に影響する「トークン」
    • トークン
    • Tokenizerとtiktokenの紹介
    • 日本語のトークン数について
  • 3.4 Chat Completions APIにふれる環境の準備
    • Google Colabとは
    • Google Colabのノートブック作成
    • OpenAIのAPIキーの準備
  • 3.5 Chat Completions APIをさわってみる
    • OpenAIのライブラリ
    • Chat Completions APIの呼び出し
    • 会話履歴を踏まえた応答を得る
    • ストリーミングで応答を得る
    • 基本的なパラメータ
    • COLUMN Completions API
  • 3.6 Function calling
    • Function callingの概要
    • Function callingのサンプルコード
    • パラメータ「function_call」
    • Function callingを応用したJSONの生成
    • まとめ

第4章  LangChainの基礎

  • 4.1 LangChainの概要
    • LangChainのユースケース
    • なぜLangChainを学ぶのか
    • LangChainのモジュール
    • LangChainのインストール
    • COLUMN langchain_experimental
  • 4.2 Language models
    • LLMs
    • Chat models
    • Callbackを使ったストリーミング
    • Language modelsのまとめ
  • 4.3 Prompts
    • PromptTemplate
    • ChatPromptTemplate
    • Example selectors
    • Promptsのまとめ
  • 4.4 Output parsers
    • Output parsersの概要
    • PydanticOutputParserを使ったPythonオブジェクトの取得
    • Output parsersのまとめ
  • 4.5 Chains
    • LLMChain―PromptTemplate・Language model・OutputParserをつなぐ
    • SimpleSequentialChain―ChainとChainをつなぐ
    • Chainsのまとめ
    • COLUMN Chainの内部の動きを確認するには
  • 4.6 Memory
    • ConversationBufferMemory
    • さらに便利なMemory
    • Memoryの保存先
    • Memoryのまとめ
    • COLUMN Chat modelsでMemoryを使う場合の注意

第5章 LangChainの活用

  • 5.1 Data connection
    • RAG(Retrieval Augmented Generation)
    • Data connectionの概要
    • Document loaders
    • Document transformers
    • Text embedding models
    • Vector stores
    • Retrievers
    • RetrievalQA(Chain)
    • Data connectionのまとめ
    • COLUMN RetrievalQAにおけるchain_type
  • 5.2 Agents
    • Agentsの概要
    • Agentsの使用例
    • Agentsの仕組み―ReActという考え方
    • Tools
    • Toolkits
    • Function callingを使うOpenAI Functions Agent
    • 一度に複数ツールを使うOpenAI Multi Functions Agent
    • Agentsのまとめ
    • COLUMN Function callingを応用したOurputParser・Extraction・Tagging
    • まとめ
    • COLUMN Evaluation

第6章 外部検索,履歴を踏まえた応答をするWebアプリの実装

  • 6.1 第6章で実装するアプリケーション
    • 実装するアプリケーションの構成
    • 本書での開発の仕方
    • AWS Cloud9の概要
    • Streamlitの概要
    • 完成版のソースコード
  • 6.2 Cloud9を起動して開発環境を構築する
    • Cloud9環境を作成する
    • GitHubリポジトリを作成する
    • Cloud9とGitHubの連携
    • Python環境を構築する
  • 6.3 StreamlitのHello World
  • 6.4 ユーザーの入力を受け付ける
  • 6.5 入力内容と応答を画面に表示する
  • 6.6 会話履歴を表示する
  • 6.7 LangChainを使ってOpenAIのChat Completions APIを実行する
  • 6.8 Agentを使って必要に応じて外部情報を検索させる
  • 6.9 チャットの会話履歴をふまえて応答する
  • 6.10 Streamlit Community Cloudにデプロイする
    • 依存パッケージの一覧を作成
    • ソースコードをGitHubにアップロードする
    • Streamlit Community Cloudにデプロイする
    • 他のユーザーを招待する
    • まとめ

第7章 ストリーム形式で履歴を踏まえた応答をするSlackアプリの実装

  • 7.1 なぜSlackアプリを作るのか
    • どんな構成にするの?
    • 開発環境
    • GitHubリポジトリのファイル構成
  • 7.2 環境準備
  • 7.3 環境設定ファイルを作成する
  • 7.4 Slackアプリを新規作成する
  • 7.5 ソケットモードを有効化する
  • 7.6 アプリケーションを作成する
  • 7.7 イベントを設定する
  • 7.8 アクションを送信して応答する
  • 7.9 スレッド内で返信する
  • 7.10 OpenAI APIを呼び出す
  • 7.11 ストリーミングで応答する
  • 7.12 会話履歴を保持する
    • Momento Cache とは?
  • 7.13 LazyリスナーでSlackのリトライ前に単純応答を返す
  • 7.14 AWS Lambdaで起動されるハンドラー関数を作成する
  • 7.15 chat.update API制限を回避する
  • 7.16 Slack投稿をリッチにする
  • 7.17 デプロイする
  • 7.18 Socket ModeからAWS Lambdaに切り替える
    • まとめ

第8章 社内文書に答えるSlackアプリの実装

  • 8.1 独自の知識をChatGPTに答えさせる
    • ファインチューニングとRAG(Retrieval Augmented Generation)
    • RAGワークフロー
    • 回答文の生成にLLMが必要か
    • 業務を圧迫する「何かを探している時間」
    • 社内データを整備する
  • 8.2 埋め込み表現(embeddings)とは
  • 8.3 実装するアプリケーションの概要
    • 完成版のソースコード
  • 8.4 開発環境を構築する
    • Cloud9のディスクスペースが不足している場合の拡張方法
  • 8.5 サンプルデータの準備
  • 8.6 Pineconeのセットアップ
    • Pineconeとは
    • Pinecone以外のベクターデータベース
    • Pineconeのサインアップ
  • 8.7 ベクターデータベース(Pinecone)にベクターデータを保存する
    • COLUMN Pythonのパッケージ管理ツールについて
  • 8.8 Pineconeを検索して回答する
  • 8.9 会話履歴も踏まえて質問できるようにする
    • 単純に会話履歴を入れてもうまく動かないケース
    • 会話履歴を踏まえて質問をあらためて作成する
  • 8.10 ConversationalRetrievalChainを使う
    • まとめ

第9章 LLMアプリの本番リリースに向けて

  • 9.1 企業で生成AIを活用していくために
  • 9.2 JDLA発行『生成AIの利用ガイドライン』をもとにした自社ガイドラインの作成
    • 利用する外部サービスのサービス規約をしっかり読む
  • 9.3 サービスの企画・設計段階での課題
    • プロジェクトリスクへの対応
  • 9.4 テスト・評価について
    • LLM部分の評価方法
    • LangSmithによる性能監視
    • COLUMN コンテンツのユースケースによる温度(temperature)の推奨値
  • 9.5 セキュリティ対策について
    • OWASP Top 10 for Large Language Model Applications
    • LangChainコアの脆弱性排除について
  • 9.6 個人データ保護の観点
    • 個人情報保護法に定める本人同意と目的内での利用
    • 個人情報の保護に関する「決定指向」利益モデルと情報的他律からの自由について
  • 9.7 EUが定める禁止AI・ハイリスクAIの取り扱いの動向

付録 Webアプリ,Slackアプリ開発の環境構築

  • A.1 AWSのサインアップ
  • A.2 Cloud9の環境作成
    • Cloud9の料金説明
  • A.3 Cloud9とGitHubの連携
    • GitHubとのSSHの設定
    • Gitのユーザーの設定
    • GitHubでリポジトリを作成してクローン
  • A.4 Cloud9上のPythonの環境構築
    • pyenvのインストール
    • Python3.10のインストール
    • Python3.10を使うための手順
    • 仮想環境について
  • A.5 Momentoのサインアップ
    • 索引

著者プロフィール

吉田真吾(よしだしんご)

株式会社サイダス 取締役CTO / 株式会社セクションナイン 代表取締役CEO ChatGPT Community(JP)主催。HCM Suite「CYDAS PEOPLE」の開発・運用。サーバーレステクノロジーのコミュニティ主催を通じて,日本におけるサーバーレスの普及を促進。『AWSによるサーバーレスアーキテクチャ』(翔泳社)監修,『サーバーレスシングルページアプリケーション』(オライリー)監訳,『AWSエキスパート養成読本』(技術評論社)共著。


大嶋勇樹(おおしまゆうき)

ソフトウェアエンジニア。IT企業からフリーランスエンジニアを経て会社を設立。現在は実務に就き始めたエンジニアのスキルアップをテーマに,勉強会の開催や教材作成の活動を実施。オンラインコースUdemyではベストセラー講座多数。AWSやDocker/Kubernetes,サーバレス技術などを扱う「野生」のクラウドネイティブ人材。最近はLangChain芸人。勉強会コミュニティStudyCo運営。