背景
Azure ML Studio の Notebooks で LangChain を試してみようとしたところ、
サンプルコードがそのままでは動かないってのがあったので、修正点について備忘録
概要
- LangChain で、OpenAI 系が、Azure 用に分離したので、その対応が必要
- OpenAI Python API ライブラリ 1.x への移行
LangChain 移行例
例なので、実際はここに表現している変更点以外もあるので、
usage example を確認しつつ行おう。
LLMs: OpenAI ⇒ AzureOpenAI
変更前
from langchain.llms import OpenAI
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_KEY"] = "..."
os.environ["OPENAI_API_BASE"] = "https://<your-endpoint>.openai.azure.com/"
llm = OpenAI(
model_name='<model name>',
model_kwargs={"deployment_id":"<deployment name>"}
)
変更後
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "..."
os.environ["OPENAI_API_KEY"] = "..."
# Import Azure OpenAI
from langchain.llms import AzureOpenAI
# Create an instance of Azure OpenAI
# Replace the deployment name with your own
llm = AzureOpenAI(
deployment_name="td2",
model_name="gpt-3.5-turbo-instruct",
)
Chat models: ChatOpenAI ⇒ AzureChatOpenAI
変更前
from langchain.chat_models import ChatOpenAI
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_KEY"] = "..."
os.environ["OPENAI_API_BASE"] = "https://<your-endpoint>.openai.azure.com/"
chat = ChatOpenAI(
model_name='gpt-35-turbo',
model_kwargs={"deployment_id":"your-deployment-name"}
)
変更後
from langchain.chat_models import AzureChatOpenAI
os.environ["AZURE_OPENAI_API_KEY"] = "..."
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://<your-endpoint>.openai.azure.com/"
model = AzureChatOpenAI(
openai_api_version="2023-05-15",
azure_deployment="your-deployment-name",
)
embeddings: OpenAIEmbeddings ⇒ AzureOpenAIEmbeddings
これに関しては、LangChain 公式でも、まだ記載が古いので間違えやすそう
変更前
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_KEY"] = "..."
os.environ["OPENAI_API_BASE"] = "https://<your-endpoint>.openai.azure.com/"
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(
model='text-embedding-ada-002',
deployment="test-embedding-ada"
)
変更後
os.environ["AZURE_OPENAI_API_KEY"] = "..."
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://<your-endpoint>.openai.azure.com/"
from langchain.embeddings import AzureOpenAIEmbeddings
embeddings = AzureOpenAIEmbeddings(
azure_deployment="<your-embeddings-deployment-name>",
openai_api_version="2023-05-15",
)
openai Python 0.28 ⇒ 1.x
Azure ML Notebooks で openai を install すると最新バージョンである 1.x 系となる。
で、そうなると呼び出し方も色々と変わるので、それぞれ確認しながらやるしかなさそう
まぁ、そうはいっても使い方に大きな変更はなさそうなので、
Qiita 上のサンプルも簡単に動かせる感じです。
以下、変更例の一部
変更前
import openai
completion = openai.ChatCompletion.create(
engine=deployment,
変更後
from openai import AzureOpenAI
client = AzureOpenAI(
api_version=api_version,
azure_endpoint=endpoint,
azure_ad_token_provider=token_provider,
)
completion = client.chat.completions.create(
model=deployment, # 引数名変更
ってことで、Microsoft さんの情報を確認しながら移行しましょう。
あとがき
環境変数といい、引数名といい統一されていないので、
これらの統合も今後来るんだろうなぁ・・という気はするので、
そのうちまた破壊的変更になりますな
とはいえ、LangChain 触ると、開発してる人達はほんとに素晴らしいなぁと感じますね。