Bagikan melalui


Tutorial: Membuat titik akhir model eksternal untuk mengkueri model OpenAI

Artikel ini menyediakan instruksi langkah demi langkah untuk mengonfigurasi dan mengkueri titik akhir model eksternal yang melayani model OpenAI untuk penyelesaian, obrolan, dan penyematan menggunakan MLflow Deployments SDK. Pelajari selengkapnya tentang model eksternal.

Jika Anda lebih suka menggunakan Antarmuka Pengguna Penyajian untuk menyelesaikan tugas ini, lihat Buat titik akhir penyajian model eksternal.

Persyaratan

  • Databricks Runtime 13.0 ML atau lebih tinggi.
  • MLflow 2.9 atau lebih tinggi.
  • Kunci API OpenAI.
  • Instal Databricks CLI versi 0.205 atau lebih tinggi.

(Opsional) Langkah 0: Simpan kunci OpenAI API menggunakan Databricks Secrets CLI

Anda dapat menyediakan kunci API Anda baik sebagai string teks biasa di Langkah 3 atau dengan menggunakan Rahasia Azure Databricks.

Untuk menyimpan kunci OpenAI API sebagai rahasia, Anda dapat menggunakan Databricks Secrets CLI (versi 0.205 ke atas). Anda juga dapat menggunakan REST API untuk rahasia.

Berikut ini membuat cakupan rahasia bernama, my_openai_secret_scope, lalu membuat rahasia openai_api_key dalam cakupan tersebut.

databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key

Langkah 1: Instal MLflow dengan dukungan model eksternal

Gunakan yang berikut ini untuk menginstal versi MLflow dengan dukungan model eksternal:

%pip install mlflow[genai]>=2.9.0

Langkah 2: Membuat dan mengelola titik akhir model eksternal

Penting

Contoh kode di bagian ini menunjukkan penggunaan MLflow Deployments CRUD SDK Pratinjau Publik.

Untuk membuat titik akhir model eksternal untuk model bahasa besar (LLM), gunakan create_endpoint() metode dari MLflow Deployments SDK. Anda juga dapat membuat titik akhir model eksternal di Antarmuka Pengguna Penyajian.

Cuplikan kode berikut membuat titik akhir penyelesaian untuk OpenAI gpt-3.5-turbo-instruct, seperti yang ditentukan di bagian served_entities konfigurasi. Untuk titik akhir Anda, pastikan untuk mengisi name dan openai_api_key dengan nilai unik Anda untuk setiap bidang.

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}}"
                }
            }
        }]
    }
)

Cuplikan kode berikut menunjukkan bagaimana Anda dapat menyediakan kunci API OpenAI Anda sebagai string teks biasa untuk cara alternatif untuk membuat titik akhir penyelesaian yang sama seperti di atas.

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"
                }
            }
        }]
    }
)

Jika Anda menggunakan Azure OpenAI, Anda juga dapat menentukan nama penyebaran Azure OpenAI, URL titik akhir, dan versi API di bagian openai_config konfigurasi.

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"
                },
            },
          }
        ],
    },
)

Untuk memperbarui titik akhir, gunakan update_endpoint(). Cuplikan kode berikut menunjukkan cara memperbarui batas tarif titik akhir menjadi 20 panggilan per menit per pengguna.

client.update_endpoint(
    endpoint="openai-completions-endpoint",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 20
            }
        ],
    },
)

Langkah 3: Mengirim permintaan ke titik akhir model eksternal

Penting

Contoh kode di bagian ini menunjukkan penggunaan metode MLflow Deployments SDK predict() .

Anda dapat mengirim permintaan obrolan, hasil penyelesaian, dan penyematan ke titik akhir model eksternal dengan metode predict() dari MLflow Deployments SDK.

Berikut ini mengirimkan permintaan ke gpt-3.5-turbo-instruct dihosting oleh 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
    }
}

Langkah 4: Bandingkan model dari penyedia yang berbeda

Penyajian model mendukung banyak penyedia model eksternal termasuk Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI, dan banyak lagi. Anda dapat membandingkan LLM antar penyedia, membantu mengoptimalkan akurasi, kecepatan, dan biaya aplikasi Anda menggunakan AI Playground.

Contoh berikut membuat titik akhir untuk Antropis claude-2 dan membandingkan responsnya dengan pertanyaan yang menggunakan OpenAI gpt-3.5-turbo-instruct. Kedua respons memiliki format standar yang sama, yang membuatnya mudah dibandingkan.

Membuat titik akhir untuk Claude-2 Anthropic

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}}"
                    },
                },
            }
        ],
    },
)

Membandingkan respons dari setiap titik akhir


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
    }
]

Sumber Daya Tambahan:

Model eksternal dalam Mosaic AI Model Serving.