今回は【Python】ChatGPTにLangChainでウェブサイトの内容を学習させる方法について紹介したいと思います
前提
CHATGPTは汎用的な質問には強いですがエンタメや流行の話には最新のデータが逐次反映されているわけではないので、良い回答を得ることが難しいです。というわけで今回はCHATGPTが疎い芸能人の知識について学習させてみます
例に使用しているのは歌手の「あのちゃん」です。まずあのちゃんについて普通のCHATGPTに質問すると以下のような感じになります
前準備
まず今回の作業に必要なライブラリをインストールします
pip install langchain==0.0.145
pip install openai==0.27.8
pip install chromadb==0.3.26
pip install tiktoken==0.4.0
pip install unstructured==0.7.10
また、以下のように環境変数にOPEN AIのAPIキーを設定します
import os #APIキーの登録 os.environ["OPENAI_API_KEY"] = "..."
※OPEN AIのAPI鍵の取得方法などについては下記参照
関連記事:PythonでChatGPTとAPI経由で会話するサンプルコード
コード
import openai
# AIに送るメッセージ
msg = "あのちゃんのプロフィールと経歴を詳細に説明してください"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": msg},
],
)
# 出力結果をプリント
print(response.choices[0]["message"]["content"].strip())
回答
申し訳ありませんが、”あのちゃん”という具体的な人物のプロフィールや経歴について詳細な情報を提供することはできません。正確な情報をお探しの場合は、具体的な名前や背景、活動分野など、より具体的な情報をご提供いただくことで、より具体的な回答をすることができます。
こんな感じでデフォルトのCHATGPTではあまり要領を得た回答を得ることができません
ChatGPTにLangChainでウェブサイトの内容を学習させる
というわけで本題なのですが、LangChainでウェブサイトの内容を学習させてみま。学習に使用しているURLには「あのちゃん」の経歴やプロフィールが記載されています
from langchain.document_loaders import UnstructuredURLLoader
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.indexes import VectorstoreIndexCreator
from langchain.text_splitter import CharacterTextSplitter
urls = [
"https://yumeijinhensachi.com/archives/2202723",
"https://jimmys-room.com/archives/2569",
"https://ja.wikipedia.org/wiki/%E3%81%82%E3%81%AE"
]
loader = UnstructuredURLLoader(urls=urls)
print(loader.load())
text_splitter = CharacterTextSplitter(
separator = "\n",
chunk_size = 300,
chunk_overlap = 0,
length_function = len,
)
index = VectorstoreIndexCreator(
vectorstore_cls=Chroma,
embedding=OpenAIEmbeddings(),
text_splitter=text_splitter,
).from_loaders([loader])
query = "あのちゃんのプロフィールと経歴を詳細に説明してください"
answer = index.query(query)
print(answer)
回答
あのちゃんは、9月4日生まれの165cmのA型の女性モデル・女優・タレントです。出身地は千葉県柏市で、小学校は不明ですが、中学校は柏市立酒井根中学校、高校は柏日体高校(中退)です。高校を中退した理由は不明ですが、普段の話し方や行動から「障害持ち」だと噂されていますが、実際は障害ではなく精神的に弱い部分があるのではないかと考えられます。
こんな感じで記事の内容を学習して回答が詳細になっていることがわかります
関連記事:【Python】ChatGPT+LangChainで、PDFドキュメントの内容をモデルに追加学習させる


コメント