NISHIO Hirokazu[日本語][English]

TTTCをAzure OpenAIで使う

諸般の事情でTalk to the CityをOpenAIのAPIではなくAzure OpenAI Serviceでやることになった

Talk to the City ScatterはLangChainのChatOpenAIをハードコードしている extraction.py

llm = ChatOpenAI(model_name=model, temperature=0.0)

そこでAzure OpenAIで使うためにはここを書き換える必要がある

元々のコードではfrom langchain.chat_models import ChatOpenAIとimportしている 素直に考えるとfrom langchain.chat_models import AzureChatOpenAIにしたらすんなり動きそうだと思うよね

  • LangChainは下部レイヤーを抽象化するためにミドルレイヤーとして挟まってるという期待
  • だけどなんだかうまく動かなかった
    • 原因は特定できていないのでここが問題ではない可能性もある 最終的にfrom langchain_openai import AzureChatOpenAIにしたら動いた

修正箇所としてはこんな感じ py

# llm = ChatOpenAI(model_name=model, temperature=0.0)
llm = AzureChatOpenAI(
    model_name=model, 
    temperature=0.0,
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
    openai_api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    openai_api_version=os.getenv("AZURE_OPENAI_API_VERSION"))

パラメータが増えたのでdotenvで.envを読んでる py

import dotenv
import os
dotenv.load_dotenv()

.envに書くAZURE_OPENAI_ENDPOINTなどの情報は「リソース」を作成して「モデル」をデプロイすればわかる image image image

AZURE_OPENAI_API_VERSIONが必要かと思って書いたけど、AZURE_OPENAI_ENDPOINTのquery parameterに積まれてるから省略してもいいのかもしれない

あと、これでいいかと思いきやEmbeddingだけモデルが別なのでそちらの作業もする必要がある from langchain_openai import AzureOpenAIEmbeddings py

embeds = AzureOpenAIEmbeddings(
    model="text-embedding-3-large",
    openai_api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    openai_api_version=os.getenv("AZURE_OPENAI_API_VERSION")
).embed_documents(args)

なんでこっちはAZURE_OPENAI_ENDPOINTがないんだっけ

  • AZURE_EMBEDDING_ENDPOINTをダイレクトに環境変数から読んでるのか
    • .envAZURE_EMBEDDING_ENDPOINT=https://<resource>.openai.azure.com/openai/deployments/text-embedding-3-large/embeddings?api-version=2023-05-15とか書いてる

社内TTTC


(C)NISHIO Hirokazu / Converted from Markdown (ja)
Source: [GitHub] / [Scrapbox]