目次
第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のサインアップ
- 索引