PDFについて回答してくれるAI / AIアプリ開発入門 その4 #chatgpt #langchain #streamlit

PDFについて回答してくれるAIアプリをLangChain+Streamlitで作る この記事の内容 PDFをアップロードし、その内容に対して質問できるAIアプリの構築方法を紹介します LangChain・Streamlit・PyPDF2・Qdrant(ベクターDB)を組み合わせた実装手順を解説します テキストをエンベディング(ベクトル化)してベクターDBに保存する仕組みを説明します LangChainのRetrievalQAを使ってPDFの内容を参照した質問応答を実現する方法を紹介します ローカル環境からクラウド(Qdrant Cloud)への移行手順もカバーします PDFに質問できるAIアプリとは 大量のPDFドキュメントを読み込んで、その内容に対してチャットで質問できるアプリを作ります。ChatGPTは2021年9月までのデータで学習されているため、独自のPDFに書かれた情報については直接答えることができません。 そこで、PDFのテキストをデータベースに格納し、質問に関連する内容を取り出してプロンプトに埋め込むという手法を使います。プロンプトの中に情報を与えることで、ChatGPTがその内容をもとに回答を生成できるようになります。 全体の処理フロー アプリの処理は大きく「保存フェーズ」と「質問応答フェーズ」に分かれます。 保存フェーズ(PDFアップロード時) StreamlitのUIでPDFをアップロード PyPDF2でPDFのテキストを読み取る LangChainのRecursiveCharacterTextSplitterでテキストをチャンクに分割 OpenAI Embeddings APIで各チャンクをベクトル化(エンベディング) QdrantベクターDBにエンベディングを保存 質問応答フェーズ(ユーザーが質問したとき) 質問文をOpenAI Embeddings APIでベクトル化 ベクターDBから類似度の高いチャンクを検索 取得した関連テキストをプロンプトに埋め込む ChatGPTに回答を生成させて表示 必要なライブラリのインストール 以下のライブラリを事前にインストールしておきます。 pip install pypdf2 pip install qdrant-client pip install langchain pip install streamlit pip install openai pip install tiktoken ページ切り替えの実装 Streamlitでは、サイドバーのセレクトボックスを使ってページを切り替えることができます。 import streamlit as st selection = st.sidebar.selectbox("ページを選択", ["PDFアップロード", "質問"]) if selection == "PDFアップロード": show_upload_page() elif selection == "質問": show_qa_page() PDFのアップロードとテキスト分割 StreamlitのファイルアップローダーとPyPDF2を組み合わせて、PDFを読み込みテキストを抽出します。 ...

September 6, 2023 · 2 min · 胡田昌彦

Youtube動画から全自動で(要約ではない)ブログエントリ作成 / AIアプリ開発入門 その3 #chatgpt #langchain #streamlit

YouTube動画の字幕から全自動でブログ記事を生成する方法 ── AIアプリ開発入門 その3 この記事の内容 YouTube動画の長時間字幕テキストを、要約ではなく「ブログ記事」として書き起こすAIアプリを作成した手順を紹介します LangChain・ChatGPT・Streamlitを使った既存アプリをベースに、わずかな変更で実現しています 変更箇所はサマリー生成の関数をブログ変換用に書き換えるだけと非常にシンプルです 実際に約50分のYouTube動画を入力し、ブログエントリーへの変換結果を確認しています 数百本の動画ストックを自動でブログ化するユースケースへの応用も紹介しています はじめに 前回まで「作りながら学ぶAIアプリ開発」のシリーズを第8章まで進め、長時間のYouTube動画を要約するアプリを作りました。 しかし実際に使ってみると、「要約」よりも「そのまま読めるブログ文章」にしてほしいというニーズが生まれました。そこで今回は、既存のアプリを少し変更して、YouTube動画の字幕テキストをブログエントリー形式に変換するアプリを作成しました。 アプリの概要 今回作成したアプリは「YouTubeToブログ」と名付けています。YouTubeの動画URLを入力すると、字幕(トランスクリプト)を取得し、それをブログ記事らしい文章に整形して出力します。 試しに約49分39秒のAD入門動画を入力したところ、以下のような動作を確認しました。 注意事項などのメッセージをヘッダーに表示 動画タイトルをもとにブログらしいタイトルを生成 字幕テキストをブログエントリー形式に整形して出力 元の字幕テキストは改行もなく、ひたすら話し言葉が続く状態です。それがブログとして読める形に変換されるため、可読性が大きく向上しています。 変更点:サマリー関数からブログ変換関数へ 既存のアプリからの変更はわずかで、主に以下の1箇所です。 元のコードはサマリー生成ロジックになっていましたが、今回はその関数を**format_transcription** という名前に変更し、中身を書き換えました。 変更後のロジックのポイントは次のとおりです。 # 変更前:summarize() を呼んでいた箇所を # 変更後:format_transcription() に置き換え # HumanMessageでプロンプトを渡し、 # LLMに字幕テキストをブログ文章に変換させる 具体的には、以下のような処理になっています。 字幕(トランスクリプト)のテキストを1ページ(チャンク)ずつ取り出す 各チャンクに対して、HumanMessage 形式のプロンプトをLLMに渡す プロンプトには「字幕テキストなので文字起こしに失敗している部分を日本語として直しつつ変換してください」という指示を含める 変換結果を順番に連結して、最終的なブログ記事として出力する 以前はプレイリスト対応などの複雑な処理も入っていましたが、今回はシンプルに1本の動画を対象として動作するように整理しています。 実装のポイント 字幕テキストの扱い 字幕テキスト(ドキュメントの各ページコンテンツ)をそのままLLMに渡し、ブログ文章として整形させています。「文字起こしの誤りを日本語として修正しながら変換する」という指示をプロンプトに加えることで、精度を高めています。 結果の連結 各チャンクの変換結果を単純に束ねるだけで、ブログ記事全体が完成します。複雑な後処理は不要です。 実行時間 長時間動画を処理するため、実行にはそれなりの時間がかかります。リアルタイムに結果が流れてくるストリーミング形式で表示される設計となっています。 活用シナリオ このアプリを使うと、過去に投稿した数百本のYouTube動画をまとめてブログ化することができます。 動画ごとにURLを渡してブログ記事を自動生成 生成した記事をブログやノートツールに貼り付け 手作業では膨大な時間がかかる作業を、大幅に効率化できます。 ソースコードについて 今回のソースコードは公開されていませんが、変更箇所は非常に限られており、前回(第8章)のコードの画面を見ながら同様に実装することが可能です。 まとめ 今回は、YouTube動画の字幕テキストをブログ記事として書き起こすAIアプリを作成しました。 既存の要約アプリから変更したのは、ほぼ1つの関数のみ HumanMessage でシンプルなプロンプトを渡すだけで実現できる 字幕特有の誤りを修正しながら変換する指示をプロンプトに含めるのがポイント 数百本規模の動画をまとめてブログ化するような大規模な活用も視野に入る LangChainとChatGPTを組み合わせることで、このような実用的なツールが少ない変更量で構築できます。次回は「作りながら学ぶAIアプリ開発」の第9章・第10章を進めていく予定です。

September 4, 2023 · 1 min · 胡田昌彦

AIアプリ開発入門 その2 Webサイト要約, Youtube動画要約 #chatgpt #langchain #streamlit

AIアプリ開発入門 その2:Webサイト要約・YouTube動画要約アプリを作る この記事の内容 Streamlit Community CloudへのAIアプリのデプロイ方法を学びます BeautifulSoupとChatGPT APIを使ったWebサイト要約アプリの仕組みを解説します LangChainのDocument LoaderとLoad Summarize Chainを使ったYouTube動画要約アプリを作ります 長い動画・文章に対応するためのMapReduceチェーンとテキストスプリッターの使い方を学びます GPT-3.5 Turbo 16Kモデルの活用とAPIコストの目安を紹介します AIアプリをWebにデプロイする(Streamlit Community Cloud) ローカルで開発したStreamlitアプリをWeb上に公開する方法として、Streamlit Community Cloudがあります。Streamlit製のアプリケーションを簡単にWeb上で公開・共有できるサービスで、無料プランも用意されています。 デプロイの基本的な手順は以下のとおりです。 Streamlit Community Cloudにアカウント登録する コードと依存関係をGitHubリポジトリにプッシュする 設定ファイルを修正し、アプリ設定をカスタマイズする デプロイを実行する コードを更新するたびに自動的にアプリが更新される仕組みも備わっています。ただし、本番利用には向かないため、PoC(概念実証)やデモ用途として活用するのが現実的です。なお、プライベートリポジトリへの閲覧権限を要求される点は注意が必要です。 Webサイト要約アプリを作る アプリの概要 WebサイトのURLを入力すると、そのページの内容を取得し、ChatGPT APIを使って要約してくれるアプリです。学習目的のため、クラスへの切り出しやファイル分割はあえて行わず、134行程度のシンプルな構成になっています。 アプリの処理フローは次のとおりです。 U R L → → → → を 入 g プ C 要 力 e ロ h 約 t ン a 結 C プ t 果 o ト G を n を P 表 t 組 T 示 e み n 立 A t て P ( る I ) ( へ で 先 リ W 頭 ク e 1 エ b 0 ス ペ 0 ト ー 0 ジ 文 の 字 コ を ン 使 テ 用 ン ) ツ を 取 得 Webページのコンテンツ取得 ページの取得にはgetContent()関数を使います。内部ではBeautifulSoupを利用しており、<main>タグや<article>タグなど本文に相当する要素があればそれを取得し、なければページ全体を返す仕組みになっています。 ...

September 1, 2023 · 2 min · 胡田昌彦

AIアプリ開発入門 その1 AIチャットアプリ #chatgpt #langchain #streamlit

AIアプリ開発入門 その1 — LangChain & Streamlitで作るAIチャットアプリ この記事の内容 PythonとLangChain、StreamlitでChatGPTクローンを構築する手順を解説します OpenAI APIキーの設定方法(Windows環境)を紹介します Streamlitの基本的なウィジェットとセッション状態管理の仕組みを学びます LangChainを通じたChatGPT APIの呼び出し方と、Temperatureパラメーターの意味を理解します サイドバーやコスト表示など、チャットアプリの作り込み方法も紹介します 概要:今回学ぶ教材について 今回は「作りながら学ぶAIアプリ開発入門 — LangChain & Streamlit(Streamlit)によるChatGPT API徹底活用」という教材をベースに、実際に手を動かしながらAIアプリ開発を学んでいきます。この教材はWeb上で無料公開されており、本文はすべて読むことができます。 教材の構成は以下のようになっています。 環境準備 最初のチャットアプリを作成 アプリの作り込み Streamlit Cloudへのデプロイ YouTube動画の要約 PDFへの質問応答 使用する技術スタックは以下のとおりです。 言語:Python フレームワーク:Streamlit(フロントエンド) AIライブラリ:LangChain API:OpenAI ChatGPT API データストア:ベクターデータベース 前提知識として、Pythonの基礎とGitHubリポジトリの基本的な操作が必要です。 環境準備:OpenAI APIキーの設定 APIキーの取得 まずOpenAIのサイトにアクセスし、新しいシークレットキーを作成します。キー名は用途がわかるようにkey_for_studyのような名前をつけておくとよいでしょう。 Windows環境での環境変数設定(PowerShell) PowerShellで一時的に環境変数を設定するには以下のコマンドを使います。 $env:OPENAI_API_KEY = "ここにAPIキーを入力" 設定を確認するには次のコマンドを実行します。 $env:OPENAI_API_KEY ただし、この方法はそのターミナルセッションにのみ有効な一時的な設定です。すべてのプロセスで使えるように永続化したい場合は、Windowsのシステム環境変数に登録します。 Windowsシステム環境変数への登録手順: 「環境変数」で検索し、「システム環境変数の編集」を開く 「環境変数」ボタンをクリック ユーザー環境変数に「新規」でOPENAI_API_KEYを追加し、値にAPIキーを入力する PCを再起動する Streamlitのインストールと起動確認 Streamlitはインストールが非常に簡単です。 pip install streamlit インストール後、以下のコマンドで動作確認できます。 streamlit run <ファイル名>.py StreamlitはWebアプリを作るためのPythonフレームワークです。データの可視化やインタラクティブなUIを非常に少ないコードで作成できるため、AIアプリのフロントエンドとして広く使われています。 LangChainのインストール LangChainは以下のコマンドでインストールします。 pip install langchain LangChainが提供する主な機能は次のとおりです。 ...

August 30, 2023 · 2 min · 胡田昌彦