初めに
git を使用している関係上、API キーや DB のURLを直書きしてしまうと、push 時に取り消される (あたりまえ) ため、最近は環境変数ファイルを用意しています。
普段であれば、Docker を立ち上げる際に指定するのですが、作業環境で流動的に env ファイルを使いたいなんてこともあります (openai API key とか)。
なので今回は、dotenv を利用して、環境変数を指定することにしました。
公式 git
結論
python-dotenv
はインストール済みとする
main.py
from dotenv import load_dotenv
from os.path import join, dirname, abspath
dir_path = dirname(abspath("__file__"))
dotenv_path = join(dir_path, '.env')
load_dotenv(dotenv_path, verbose=True)
解説
たまに下記のような説明も散見される、が、Jupyterなどでは動作しないことがある
# dir_path = dirname(abspath("__file__"))
dir_path = dirname(__file__)
print(dir_path)
しかし、エラー
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-8-755a91d3a9c3> in <module>()
3 > NameError: name '__file__' is not defined
4 '''
----> 5 print(dirname(__file__))
NameError: name '__file__' is not defined
回避方法を検索すると、__file__
を "
で囲めと書いてあるので試す
# dir_path = dirname(abspath("__file__"))
dir_path = dirname("__file__")
print(dir_path)
# ''
何故か値が入っていない。
対話型モード (ipynb) だと、上手く動作しないらしい。
更に検索を重ねること1時間、ようやく答えにたどり着く
dir_path = dirname(abspath("__file__"))
print(dir_path)
# '/your/path'
abspath
とすることで、ようやく path が表示できた。
めでたしめでたし
手順
python-dotenvのインストール
> pip install python-dotenv
環境変数ファイルを main.py と同じディレクトリに置く
階層構造イメージ
.
|-- python
| |-- .env
| |-- main.py
環境変数ファイル
.env
OPENAI_API_KEY=[ここにAPIキーを入れる]
OPENAI_RESOURCE_ENDPOINT=https://[your].openai.azure.com/
OPENAI_API_TYPE=azure
OPENAI_API_VERSION=2023-07-01-preview #これは参考までに
OPENAI_DEPLOYMENT_NAME=[ここにモデルネームを入れる]
Python 実行ファイル
main.py
from dotenv import load_dotenv
from os.path import join, dirname, abspath
# langchain の読込み
from langchain.chat_models import AzureChatOpenAI
from langchain.schema import HumanMessage
from langchain.callbacks import get_openai_callback
dir_path = dirname(abspath("__file__"))
dotenv_path = join(dir_path, '.env')
load_dotenv(dotenv_path, verbose=True)
# GPT settings
API_KEY = os.getenv("OPENAI_API_KEY")
BASE_URL = os.getenv("OPENAI_RESOURCE_ENDPOINT")
API_TYPE = os.getenv("OPENAI_API_TYPE")
API_VERSION = os.getenv("OPENAI_API_VERSION")
DEPLOYMENT_NAME = os.getenv("OPENAI_DEPLOYMENT_NAME")
model = AzureChatOpenAI(
openai_api_base=BASE_URL,
openai_api_version=API_VERSION,
deployment_name=DEPLOYMENT_NAME,
openai_api_key=API_KEY,
openai_api_type=API_TYPE,
temperature=0.0
)
model("こんにちは")
# こんにちは。私はAIアシスタントです。何かお手伝いできますか?
あとは実行して Chat-GPT が使えることを確認すればOKです。
参考文献