LoginSignup
2
3

初めに

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です。

参考文献

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3