Kurz: Vytvoření koncových bodů externího modelu pro dotazování modelů OpenAI
Tento článek obsahuje podrobné pokyny pro konfiguraci a dotazování koncového bodu externího modelu, který slouží modelům OpenAI k dokončení, chatu a vkládání pomocí sady SDK pro nasazení MLflow. Přečtěte si další informace o externích modelech.
Pokud chcete k provedení této úlohy použít uživatelské rozhraní obsluhy, přečtěte si téma Vytvoření externího modelu obsluhující koncový bod.
Požadavky
- Databricks Runtime 13.0 ML nebo novější
- MLflow 2,9 nebo vyšší.
- Klíče rozhraní API OpenAI
- Nainstalujte rozhraní příkazového řádku Databricks verze 0.205 nebo vyšší.
(Volitelné) Krok 0: Uložení klíče rozhraní API OpenAI pomocí rozhraní příkazového řádku tajných kódů Databricks
Klíče rozhraní API můžete zadat buď jako řetězce prostého textu v kroku 3, nebo pomocí tajných kódů Azure Databricks.
Pokud chcete klíč rozhraní API OpenAI uložit jako tajný klíč, můžete použít Rozhraní příkazového řádku pro tajné kódy Databricks (verze 0.205 a vyšší). Rozhraní REST API můžete také použít pro tajné kódy.
Následující kód vytvoří obor tajného kódu s názvem my_openai_secret_scope
a pak v tomto oboru vytvoří tajný klíč openai_api_key
.
databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key
Krok 1: Instalace MLflow s podporou externích modelů
K instalaci verze MLflow s podporou externích modelů použijte následující:
%pip install mlflow[genai]>=2.9.0
Krok 2: Vytvoření a správa koncového bodu externího modelu
Důležité
Příklady kódu v této části ukazují použití sady CRUD SDK pro nasazení MLflow ve verzi Public Preview .
Pokud chcete vytvořit koncový bod externího modelu pro rozsáhlý jazykový model (LLM), použijte create_endpoint()
metodu ze sady SDK pro nasazení MLflow. V uživatelském rozhraní obsluhy můžete také vytvořit koncové body externího modelu.
Následující fragment kódu vytvoří koncový bod dokončení pro OpenAI gpt-3.5-turbo-instruct
, jak je uvedeno v served_entities
části konfigurace. V případě koncového bodu nezapomeňte name
vyplnit jedinečné hodnoty pro každé pole a openai_api_key
s jejich jedinečnými hodnotami.
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
}
}
}]
}
)
Následující fragment kódu ukazuje, jak můžete zadat klíč rozhraní OpenAI API jako řetězec prostého textu pro alternativní způsob vytvoření stejného koncového bodu dokončení jako výše.
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_key_plaintext": "sk-yourApiKey"
}
}
}]
}
)
Pokud používáte Azure OpenAI, můžete také zadat název nasazení Azure OpenAI, adresu URL koncového bodu a verzi rozhraní API v openai_config
části konfigurace.
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [
{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_type": "azure",
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}",
"openai_api_base": "https://my-azure-openai-endpoint.openai.azure.com",
"openai_deployment_name": "my-gpt-35-turbo-deployment",
"openai_api_version": "2023-05-15"
},
},
}
],
},
)
Pokud chcete aktualizovat koncový bod, použijte update_endpoint()
. Následující fragment kódu ukazuje, jak aktualizovat limity rychlosti koncového bodu na 20 volání za minutu na uživatele.
client.update_endpoint(
endpoint="openai-completions-endpoint",
config={
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 20
}
],
},
)
Krok 3: Odeslání požadavků do koncového bodu externího modelu
Důležité
Příklady kódu v této části ukazují použití metody sady predict()
SDK pro nasazení MLflow.
Žádosti o chat, dokončování a vkládání můžete odesílat do koncového bodu externího modelu pomocí metody sady predict()
SDK pro nasazení MLflow.
Následující příkaz odešle žádost hostované gpt-3.5-turbo-instruct
platformou OpenAI.
completions_response = client.predict(
endpoint="openai-completions-endpoint",
inputs={
"prompt": "What is the capital of France?",
"temperature": 0.1,
"max_tokens": 10,
"n": 2
}
)
completions_response == {
"id": "cmpl-8QW0hdtUesKmhB3a1Vel6X25j2MDJ",
"object": "text_completion",
"created": 1701330267,
"model": "gpt-3.5-turbo-instruct",
"choices": [
{
"text": "The capital of France is Paris.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
},
{
"text": "Paris is the capital of France",
"index": 1,
"finish_reason": "stop",
"logprobs": None
},
],
"usage": {
"prompt_tokens": 7,
"completion_tokens": 16,
"total_tokens": 23
}
}
Krok 4: Porovnání modelů od jiného poskytovatele
Obsluha modelů podporuje mnoho externích poskytovatelů modelů, včetně Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI a dalších. LlMs můžete porovnat mezi poskytovateli, což vám pomůže optimalizovat přesnost, rychlost a náklady vašich aplikací pomocí AI Playgroundu.
Následující příklad vytvoří koncový bod pro Anthropic claude-2
a porovná jeho odpověď na otázku, která používá OpenAI gpt-3.5-turbo-instruct
. Obě odpovědi mají stejný standardní formát, což usnadňuje jejich porovnání.
Vytvoření koncového bodu pro Anthropic claude-2
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="anthropic-completions-endpoint",
config={
"served_entities": [
{
"name": "claude-completions",
"external_model": {
"name": "claude-2",
"provider": "anthropic",
"task": "llm/v1/completions",
"anthropic_config": {
"anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
},
},
}
],
},
)
Porovnání odpovědí z každého koncového bodu
openai_response = client.predict(
endpoint="openai-completions-endpoint",
inputs={
"prompt": "How is Pi calculated? Be very concise."
}
)
anthropic_response = client.predict(
endpoint="anthropic-completions-endpoint",
inputs={
"prompt": "How is Pi calculated? Be very concise."
}
)
openai_response["choices"] == [
{
"text": "Pi is calculated by dividing the circumference of a circle by its diameter."
" This constant ratio of 3.14159... is then used to represent the relationship"
" between a circle's circumference and its diameter, regardless of the size of the"
" circle.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
}
]
anthropic_response["choices"] == [
{
"text": "Pi is calculated by approximating the ratio of a circle's circumference to"
" its diameter. Common approximation methods include infinite series, infinite"
" products, and computing the perimeters of polygons with more and more sides"
" inscribed in or around a circle.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
}
]