はじめに
前回までにConohaVPSに構築したPostgreSQL+pgvector+ChatGPT retrieval pluginをローカルPCからLangChainで試します。
社内文書の検索やQAの無人化などに使えればと考えて検証をしました。
環境について
ConohaVPSのretrieval pluginには自宅のNASを経由してSSHトンネルで接続しています。
Anaconda上にPython 3.11環境を構築し、その上でJupyterNotebookを利用しています。
このあたりの導入については、他のブログなどを参考にしてください。
LangChainを試す
まずは必要になるパッケージを導入します。
!pip install langchain
!pip install langchain-openai
!pip install openai
次にOpenAIのAPIキー、retrieval pluginのBearerトークンを設定します。
import os
os.environ["OPENAI_API_KEY"] = "sk-...(OpenAIのAPIキー)"
from langchain.retrievers import ChatGPTPluginRetriever
retriever = ChatGPTPluginRetriever(
url="http://192.168.0.xxx:8000(retrieval pluginのIP及びポート)",
bearer_token="ey...(Bearerトークン)"
)
RetrivalQAのキーチェーンの作成
langchain.chat_modelsを利用することで使う大規模言語モデルを指定することができます。
利用可能なモデルやパラメータなどは下記URLに記載されています。
https://platform.openai.com/docs/models
https://platform.openai.com/docs/api-reference/chat/create
from langchain_openai import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model_name="gpt-3.5-turbo-0125", temperature=0),
#llm=ChatOpenAI(model_name="gpt-4", temperature=0),
chain_type="stuff",
retriever=retriever
)
検証
簡単なQAを試す
qa.run("SiriLでは天体写真のどのような画像処理が可能ですか?日本語で教えてください。")
上記のような回答が返ってきました。
この結果がドキュメントのどの個所を参照されたかを確認するためにはreturn_source_documents=True
を指定してキーを作成します。
from langchain_openai import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model_name="gpt-3.5-turbo-0125", temperature=0),
#llm=ChatOpenAI(model_name="gpt-4", temperature=0),
chain_type="stuff",
retriever=retriever,
input_key="question", return_source_documents=True
)
再度質問をします。上記設定をするとrunが使えなくなるので下記のような形で問い合わせと結果を確認します。
result=qa("SiriLでは天体写真のどのような画像処理が可能ですか?日本語で教えてください。")
print(result)
参照されたドキュメントの箇所などを確認することができます。
API使用量など
以上です。