コードでの外部LLMの作成¶
DataRobot Notebooksでの使用向けに設計されたこのセクションでは、DataRobot Pythonクライアントを使用して外部LLMを構築および検証する方法の概要を説明します。DataRobotでは、このノートブックをダウンロードして、目的のプラットフォームで使用するためにアップロードすることをお勧めします。
注:セルフマネージドAIプラットフォームでは、app.datarobot.com
を参照するコードサンプルは、インスタンスに適したURLに変更する必要があります。
セットアップ¶
次の手順は、DataRobotプラットフォームと外部LLMを連携するために必要な設定の概要を示します。
次の機能フラグが有効になっていることを確認します。これらの機能を有効にする方法については、DataRobotの担当者または管理者にお問い合わせください。
- Notebooksでファイルシステム管理を有効にする
- プロキシモデルを有効にする
- すべてのカスタムモデルでパブリックネットワークへのアクセスを有効にする
- カスタムモデルでランタイムパラメーターの挿入を有効化
- 生成モデルの監視サポートを有効にする
- Enable Custom Inference Models
DataRobotの資格情報管理ツールで、新しい資格情報を作成します。
- これは「APIトークン」タイプの資格情報として設定します。
- 表示名を
OPENAI_API_KEY
として設定します。 - OpenAI APIキーをトークンフィールドに配置します。
ノートブック環境変数(
OPENAI_API_BASE
、OPENAI_API_KEY
、OPENAI_API_VERSION
、およびOPENAI_DEPLOYMENT_NAME
)を追加し、Azure OpenAI資格情報で値を設定します。ノートブックのセッションタイムアウトを180分に設定します。
ライブラリのインストール¶
次のライブラリをインストールします。
!pip install "langchain==0.0.244" \
"openai==0.27.8" \
"datarobotx==0.1.25"
import datarobot as dr
import datarobotx as drx
from datarobot.models.genai.custom_model_llm_validation import CustomModelLLMValidation
DataRobotに接続する¶
PythonクライアントからDataRobotに接続するためのさまざまなオプションの詳細をご確認ください。
endpoint = "https://app.datarobot.com/api/v2"
token="<ADD_VALUE_HERE>"
dr.Client(endpoint=endpoint, token=token)
drx.Context(token=token, endpoint=endpoint)
テキスト生成カスタムモデルをデプロイするためのフックの定義¶
次のセルは、テキスト生成カスタムモデルのデプロイに使用するメソッドを定義します。これらのメソッドには、カスタムモデルの読み込みとスコアリング用のモデルの使用が含まれます。
import os
import pandas as pd
OPENAI_API_BASE = os.environ.get('OPENAI_API_BASE', "<ADD_VALUE_HERE>")
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "<ADD_VALUE_HERE>")
OPENAI_API_TYPE = os.environ.get('OPENAI_API_TYPE', "azure")
OPENAI_API_VERSION = os.environ.get('OPENAI_API_VERSION', "<ADD_VALUE_HERE>")
OPENAI_DEPLOYMENT_NAME = os.environ.get('OPENAI_DEPLOYMENT_NAME', "<ADD_VALUE_HERE>")
PROMPT_COLUMN_NAME = "prompt"
COMPLETION_COLUMN_NAME = "completion"
ERROR_COLUMN_NAME = "error"
def load_model(*args, **kwargs):
"""Custom model hook for loading our LLM."""
import os
from langchain.chat_models import AzureChatOpenAI
try:
import datarobot_drum as drum
api_key = drum.RuntimeParameters.get("OPENAI_API_KEY")["apiToken"]
except Exception:
api_key = os.environ.get('OPENAI_API_KEY', '<ADD_VALUE_HERE>')
llm = AzureChatOpenAI(
deployment_name=OPENAI_DEPLOYMENT_NAME,
openai_api_type=OPENAI_API_TYPE,
openai_api_base=OPENAI_API_BASE,
openai_api_version=OPENAI_API_VERSION,
openai_api_key=api_key,
model_name=OPENAI_DEPLOYMENT_NAME,
temperature=0.4,
verbose=True,
max_retries=0,
request_timeout=20
)
return llm
def score(data: pd.DataFrame, model, **kwargs):
"""Custom model hook for making predictions with our llm.
When requesting predictions from the deployment,
pass a pandas DataFrame with the PROMPT_COLUMN_NAME column:
datarobot-user-models (DRUM) handles loading the model and calling
this function with the appropriate parameters.
"""
import pandas as pd
llm = model
completions = []
errors = []
prompts = data[PROMPT_COLUMN_NAME].tolist()
for prompt in prompts:
completion = None
error = None
try:
completion = llm.predict(prompt)
except Exception as e:
error = f"{e.__class__.__name__}: {str(e)}"
completions.append(completion)
errors.append(error)
return pd.DataFrame({PROMPT_COLUMN_NAME: prompts, COMPLETION_COLUMN_NAME: completions, ERROR_COLUMN_NAME: errors})
ローカルでフックをテストする¶
デプロイに進む前に、以下のセルを使用して、カスタムモデルフックが正しく機能することを確認します。
import pandas as pd
# Test the hooks locally
score(
pd.DataFrame(
{
PROMPT_COLUMN_NAME: ["What is a large language model (LLM)?"],
}
),
load_model()
)
LLMのデプロイ¶
以下のセルでは、次のことを行う便利なメソッドを使用しています。
- テキスト生成外部モデル(LLM)をDataRobotにデプロイします。
- 予測に使用できるオブジェクトを返す。
この例では、事前構築済みの環境を使用します。
また、environment_id
を指定して、既存のカスタムモデル環境を代わりに使用することで、カスタムモデルフックの反復サイクルを短くすることもできます。
モデルワークショップからアカウントの既存の事前構築済み環境を参照してください。
deployment = drx.deploy(
model=None,
name="External Azure OpenAI LLM",
hooks={
"score": score,
"load_model": load_model
},
runtime_parameters=["OPENAI_API_KEY"],
extra_requirements=["langchain==0.0.244", "openai==0.27.8"],
environment_id=dr.ExecutionEnvironment.list("Python 3.9 GenAI")[0].id,
target_type="TextGeneration",
target=COMPLETION_COLUMN_NAME
)
デプロイのテスト¶
デプロイがプロンプトに回答を正常に提供できるかどうかをテストします。
deployment.predict(
pd.DataFrame({
PROMPT_COLUMN_NAME: [
"Give me some context on large language models and their applications?",
"What is AutoML?"
],
})
)
外部LLMの検証¶
これらのメソッドは、外部LLMを実行して検証します。
この例では、ユースケースと検証を関連付け、そのユースケース内にベクターデータベースを作成します。
use_case_id
を設定して既存のユースケースを指定するか、その名前で新しいユースケースを作成します。
use_case_id = "<ADD_VALUE_HERE>"
use_case = dr.UseCase.get(use_case_id)
# UNCOMMENT if you wish to create a new UseCase
#use_case = dr.UseCase.create()
CustomModelLLMValidation.create
は外部LLMの検証を実行します。デプロイIDを入力する必要があります。
external_llm_validation = CustomModelLLMValidation.create(
prompt_column_name=PROMPT_COLUMN_NAME,
target_column_name=COMPLETION_COLUMN_NAME,
deployment_id=deployment.dr_deployment.id,
name="My External LLM",
use_case=use_case,
wait_for_completion=True
)
assert external_llm_validation.validation_status == "PASSED"
print(f"External LLM Validation ID: {external_llm_validation.id}")
これで、この外部LLMを GenAI E2E基本ステップ(LLMブループリントの作成など)で使用できるようになりました。