↑前回の復習をしていきます。前回参加していない方も大丈夫です。
PDFをディレクトリに配置して、取り込む作業が面倒なので、画面からPDFをアップロードできるようにしましょう。
- chainlit_upload_pdf.py
import os import chainlit as cl from langchain_community.chat_models import ChatOpenAI from langchain_community.document_loaders import PyMuPDFLoader from langchain_community.embeddings import OpenAIEmbeddings from langchain.prompts import PromptTemplate from langchain.schema import HumanMessage from langchain.text_splitter import SpacyTextSplitter from langchain_community.vectorstores import Chroma embeddings = OpenAIEmbeddings( model="text-embedding-ada-002" ) chat = ChatOpenAI(model="gpt-3.5-turbo") prompt = PromptTemplate(template="""文章を元に質問に答えてください。 文章: {document} 質問: {query} """, input_variables=["document", "query"]) text_splitter = SpacyTextSplitter(chunk_size=300, pipeline="ja_core_news_sm") @cl.on_chat_start async def on_chat_start(): files = None while files is None: files = await cl.AskFileMessage( max_size_mb=20, content="PDFを選択してください", accept=["application/pdf"], raise_on_timeout=False, ).send() file = files[0] if not os.path.exists("tmp"): os.mkdir("tmp") documents = PyMuPDFLoader(file.path).load() splitted_documents = text_splitter.split_documents(documents) database = Chroma( embedding_function=embeddings, # 今回はpersist_directoryを指定しないことでデータベースの永続化を行わない ) database.add_documents(splitted_documents) cl.user_session.set( "database", database ) await cl.Message(content=f"`{file.name}`の読み込みが完了しました。質問を入力してください。").send() @cl.on_message async def on_message(input_message): print("入力されたメッセージ: " + input_message.content) database = cl.user_session.get("database") documents = database.similarity_search(input_message.content) documents_string = "" for document in documents: documents_string += f""" ------------------------- {document.page_content} """ result = chat([ HumanMessage(content=prompt.format(document=documents_string, query=input_message.content)) ]) await cl.Message(content=result.content).send()
前回の記事に書いた「prepare_db.py」を実行してDBを作っておく必要があります。
Chainlitアプリを実行し、PDFをアップロードし、PDFの内容について質問可能
chainlit run chainlit_upload_pdf.py -w
使ってみたいPDFをアップロードしてみましょう
なお、パスワード保護されているファイルは使えないはず
IPAが多数のPDFファイルを公開しているので、これらも使ってみましょう。
非機能要件記述とアーキテクチャ記述ガイド
プロジェクトマネジメントの見える化
情報処理システム高信頼化教訓活用ガイドブック(ITサービス編)
情報セキュリティ対策ベンチマークから情報セキュリティ監査へ
経営に活かす IT 投資の最適化 ~ 情報システムを安心して快適に使うために ~
安全なウェブサイト運営にむけて
初めての情報セキュリティ対策
新・5分でできる!情報セキュリティ自社診断
最初は「プロジェクトマネジメントの見える化」をアップロードしてみたいと思います。
PDFに書かれていることがインプットされているかを確認するために、PDFの中身に関する質問をしてみましょう。
なぜ下流工程で問題が顕在化しやすいのでしょうか?
下流工程で問題が顕在化しやすい理由は、それまでの工程に起因する品質不良が下流工程に入り込みやすいためです。また、下流工程では問題が露呈しやすく、対応のための時間や手段が限定されているため、問題が早期に発見されても迅速に対処することが難しい状況にあるからです。そのため、下流工程での品質管理や問題解決には特に注意が必要とされています
定性的見える化アプローチのチェックシートの使い方を教えてください。
定性的見える化アプローチのチェックシートは、プロジェクトマネージャが自己評価を行うためのツールです。上流、中流、下流のそれぞれに対して35、38、40項目が設定されており、自己評価を行う際にそれぞれの項目に対してスコアをつけることで自己チェックを行います。また、専門家チーム(PMO)によるヒアリングシートもあり、上流、中流、下流それぞれに対して74、78、85項目が設定されています。専門家の客観的なチェックを受けることで、マネジメントの過不足を把握し、対策を検討することができます。自己評価と専門家の診断の差を認識し、専門家からの対策案を受け取ることで、プロジェクトの見える化を促進することができます。
色んな質問をしてみたり、様々なPDFをアップロードしてみましょう。
実際に体験してもらったところで、↓RAGなどの技術について過去資料を用いて解説したいと思います。