個人的に毎回悩むので、LangChainでOpenAI系モデルを使用する方法まとめ

2024/4/2時点の情報

```bash
pip install langchain=="0.1.14" langchain-openai=="0.1.1"
```

## ChatOpenAI

* パラメーターで渡す場合

    ```python
    from langchain_openai import ChatOpenAI
    
    openai_api_key = "sk-*****"
    
    chat = ChatOpenAI(openai_api_key=openai_api_key)
    
    chat.invoke("hello")
    ```

* 環境変数を使用する場合

    ```python
    import os
    os.environ["OPENAI_API_KEY"] = "sk-*****"
    ```    

    ```python
    from langchain_openai import ChatOpenAI
    
    chat = ChatOpenAI()
    
    chat.invoke("hello")
    ```

## OpenAIEmbeddings

* パラメーターで渡す場合
 
    ```python
    from langchain_openai import OpenAIEmbeddings
    
    openai_api_key = "sk-*****"
    
    embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
    
    embeddings.embed_documents(["Hello"])
    embeddings.embed_query("Hello")
    ```

* 環境変数を使用する場合

    ```python
    import os
    os.environ["OPENAI_API_KEY"] = "sk-*****"
    ```    

    ```python
    from langchain_openai import OpenAIEmbeddings
    
    embeddings = OpenAIEmbeddings()
    
    embeddings.embed_documents(["Hello"])
    embeddings.embed_query("Hello")
    ```

## AzureChatOpenAI

* パラメーターで渡す場合

    ```python
    from langchain_openai import AzureChatOpenAI
    
    api_key = "*****"
    api_version = "2023-05-15"
    azure_endpoint = "https://*****.openai.azure.com"
    azure_deployment = "*****"
    
    chat = AzureChatOpenAI(
        api_key=api_key,
        api_version=api_version,
        azure_endpoint=azure_endpoint,
        azure_deployment=azure_deployment,
    )
    
    chat.invoke("hello")
    ```

* 環境変数を使用する場合（azure_deploymentは環境変数で指定できない？）
    
    ```python
    import os
    os.environ["AZURE_OPENAI_API_KEY"] = "*****"
    os.environ["OPENAI_API_VERSION"] = "2023-05-15"
    os.environ["AZURE_OPENAI_ENDPOINT"] = "https://*****.openai.azure.com"
    ```    

    ```python
    from langchain_openai import AzureChatOpenAI
    
    azure_deployment = "*****"
    
    chat = AzureChatOpenAI(azure_deployment=azure_deployment)
    
    chat.invoke("hello")
    ```

## AzureOpenAIEmbeddings

* パラメーターで渡す場合

    ```python
    from langchain_openai import AzureOpenAIEmbeddings
    
    api_key = "*****"
    azure_endpoint = "https://*****.openai.azure.com"
    azure_deployment = "*****"
    
    embeddings = AzureOpenAIEmbeddings(
        api_key=api_key, azure_endpoint=azure_endpoint, azure_deployment=azure_deployment
    )
    
    embeddings.embed_documents(["Hello"])
    embeddings.embed_query("Hello")
    ```

* 環境変数を使用する場合（azure_deploymentは環境変数で指定できない？）

    ```python
    import os
    
    os.environ["AZURE_OPENAI_API_KEY"] = "*****"
    os.environ["AZURE_OPENAI_ENDPOINT"] = "https://*****.openai.azure.com"
    ```    

    ```python
    from langchain_openai import AzureOpenAIEmbeddings
    
    azure_deployment = "*****"
    
    embeddings = AzureOpenAIEmbeddings(azure_deployment=azure_deployment)
    
    embeddings.embed_documents(["Hello"])
    embeddings.embed_query("Hello")
    ```


## 公式ドキュメント

https://python.langchain.com/docs/integrations/chat/openai

https://python.langchain.com/docs/integrations/text_embedding/openai

https://python.langchain.com/docs/integrations/chat/azure_chat_openai

https://python.langchain.com/docs/integrations/text_embedding/azureopenai