Stand Up and Shout!

勉強したことや、思いついたことを気ままに記述します

ChatGPT/LangChainによるチャットシステム構築

2023年10月18日に『ChatGPT/LangChainによるチャットシステム構築[実践]入門』が出版されました。

ChatGPTのAPIとLangChainで大規模言語モデルをシステムに組み込む知識を実践形式で学べます。

目次を俯瞰

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