0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft AzureAdvent Calendar 2023

Day 1

Azure OpenAI で LangChain を使う場合、"Azure"用に。openai==0.28 ⇒1.0 の移行はMS-Learnで

Last updated at Posted at 2023-12-21

背景

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 公式でも、まだ記載が古いので間違えやすそう

image.png

変更前
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 さんの情報を確認しながら移行しましょう。

あとがき

環境変数といい、引数名といい統一されていないので、
これらの統合も今後来るんだろうなぁ・・という気はするので、
そのうちまた破壊的変更になりますな :sweat:

とはいえ、LangChain 触ると、開発してる人達はほんとに素晴らしいなぁと感じますね。 :laughing:

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?