[AI] LlamaIndexによるGPT-3.5専門ボット化 CSV, PDF対応

[M1 Mac, Monterey 12.6.3, Python 3.10.4]

専門チャットボット生成スクリプトについて取り込むファイルタイプとしてCSVとPDFに対応させました。

SimpleCSVReaderのインスタンス化をし忘れていて少し手間取りました。クラスのインスタンス化は言語によってやり方が微妙に違うので要注意です。C++やJavaのようにnewを使わないので見落としがち。

import os, logging, sys
from pathlib import Path
from llama_index import download_loader,LLMPredictor, GPTSimpleVectorIndex, ServiceContext
from langchain import OpenAI

# APIキーを環境変数から取得
apiKey = os.getenv("CHATGPT_API_KEY")
os.environ["OPENAI_API_KEY"] = apiKey

# ログレベルの設定(DEBUG)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

# インデックスの作成および保存
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="text-embedding-ada-002"))
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)

print("ファイルパスを入力して下さい")
file_path = input()
file_path2 = file_path.replace("'", "") # 拡張子判定用
file_path3 = Path(file_path2) # loader用

if file_path2.endswith('.csv'):
	SimpleCSVReader = download_loader("SimpleCSVReader")
	loader = SimpleCSVReader()
elif file_path2.endswith('.pdf'):
	PDFReader = download_loader("PDFReader")
	loader = PDFReader()
else:
	print('ファイルがcsv,pdfではありません')
	sys.exit()

nodes = loader.load_data(file=file_path3)

index = GPTSimpleVectorIndex.from_documents(nodes, service_context=service_context)
index.save_to_disk('index.json')

# インデックスの読込
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="text-davinci-003", max_tokens=3500))
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)

index = GPTSimpleVectorIndex.load_from_disk(save_path="index.json", service_context=service_context)

# 質問(Ctrl+cで終了)
while True :
  print("質問を入力して下さい")
  question = input()
  
  print(index.query(question))