-
Notifications
You must be signed in to change notification settings - Fork 0
/
keiojp.py
64 lines (50 loc) · 2.16 KB
/
keiojp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import os
import platform
import openai
import chromadb
import langchain
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.document_loaders import PyPDFLoader
import tiktoken
from langchain.text_splitter import RecursiveCharacterTextSplitter
# keiojp.py
chat_history = []
def process_message(message):
# メッセージを処理し、返信するテキストを生成します
query = message
response_text = pdf_qa({"question": query, "chat_history": chat_history})
return response_text["answer"]
# PDFファイルをロードする
loader = PyPDFLoader("data/main/submit.pdf")
# PDFからページを抽出し、指定したchunk_sizeでテキストを分割する
pages = (loader.load_and_split(text_splitter=RecursiveCharacterTextSplitter(
chunk_size=500, # テキストのチャンクサイズ
chunk_overlap=20, # チャンク間のオーバーラップサイズ
length_function=len, # テキストの長さを計算する関数
)))
# OpenAI APIキーを設定する
openai.apy_key = os.environ["OPENAI_API_KEY"]
# GPT-3.5-turboモデルを使用したチャットモデルを作成する
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
# OpenAI Embeddingsを作成する
embeddings = OpenAIEmbeddings()
# ページの内容をもとにChroma VectorStoreを作成する
vectorstore = Chroma.from_documents(pages, embedding=embeddings, persist_directory="./database")
# VectorStoreを永続化する
vectorstore.persist()
# GPT-3.5-turboとVectorStoreを使って会話型検索チェーンを作成する
pdf_qa = ConversationalRetrievalChain.from_llm(llm, vectorstore.as_retriever(), return_source_documents=False)
"""
# 質問を設定する
query = "卒業条件は何単位ですか?"
# チャット履歴を初期化する
chat_history = []
# 質問とチャット履歴を使って回答を取得する
result = pdf_qa({"question": query, "chat_history": chat_history})
# 回答を表示する
print(result["answer"])
"""