與編碼代理整合

透過 Azure Databricks 編碼代理整合,你可以透過 Unity AI Gateway 中的模型服務,路由來自 Cursor、Gemini CLI 和 Codex CLI 等編碼代理的流量。 此系統提供速率限制、使用追蹤及推論表,所有控制皆在模型服務、使用者或群組層級設定。

Features

  • 存取:直接存取各種編碼工具與模型,全部集中於一張發票之下。
  • 可觀察性:一個統一的儀表板,追蹤所有程式工具的使用、支出與指標。
  • 統一治理:管理員可透過 Unity AI Gateway 在模型服務、使用者或群組層級管理模型權限與速率限制。

Requirements

設定

最快的入門方式是使用 ucode,這是 Azure Databricks 提供的 CLI,可透過單一指令安裝、驗證身分,並為受支援的程式碼代理設定 Unity AI Gateway。

ucode (Unity AI Gateway Coding CLI)是針對 Unity AI Gateway 執行編碼代理的單一入口點。 它會處理 OAuth,撰寫每個代理的設定檔,並將流量路由你註冊的任何 LLM 或 MCP 伺服器。 支援代理:

要查看所有支援的編碼代理,請執行 ucode --help

步驟 1:安裝 ucode

uv tool install git+https://github.com/databricks/ucode

需要 Python 3.12 或更新版本,且需具備 uv

步驟二:建立編碼代理程式

執行你想要的代理程式。 首次啟動時,ucode 會自動提示你輸入Azure Databricks工作區的 URL,並自動驗證並寫入代理的設定檔。 後續的發射會直接交給代理人。

ucode codex      # OpenAI Codex
ucode gemini     # Gemini CLI
ucode opencode   # OpenCode
ucode copilot    # GitHub Copilot CLI
ucode pi         # Pi

ucode 將代理人名稱後的旗標傳遞給底層工具,例如:

ucode codex --full-auto

要同時配置多個編碼代理,請執行:

ucode configure

若要向支援 MCP 的代理程式註冊 Azure Databricks MCP 伺服器(Unity Catalog 函式、AI Search、SQL 倉儲,以及探索到的外部連線):

ucode configure mcp

要查看過去 7 天的 Unity AI Gateway 使用摘要:

ucode usage

如需完整的指令參考資料,請執行:

ucode --help

Dashboard

在透過 Unity AI Gateway 追蹤程式代理使用後,你可以在內建儀表板中查看並監控你的指標。

若要開啟儀表板,請在 Unity AI Gateway 頁面的右上角按一下 Govern,然後按一下 Usage Dashboard。 內建的使用情況儀表板包含一個 Coding Agents 分頁,其中提供用於顯示編碼工具使用情況的圖表。

編碼代理儀表板

手動設定

如果您偏好自行設定代理,請遵循以下說明:

游標 IDE

要設定游標以使用Unity AI Gateway中的模型服務:

步驟 1:設定基礎 URL 與 API 金鑰

  1. 打開游標並導覽到 設定>、游標設定、模型>>API 金鑰

  2. 啟用 Override OpenAI 基礎網址 並輸入網址:

    https://<workspace-url>/ai-gateway/cursor/v1
    

    <workspace-url> 替換成你的 Azure Databricks 工作區網址。

  3. 將你的 Azure Databricks 個人存取權杖貼到 OpenAI API 金鑰 欄位。

步驟二:新增自訂模型

  1. 在游標設定中點擊 + 新增自訂模型
  2. 新增你的型號服務名稱(例如 system.ai.claude-opus-4-6),並啟用切換開關。

Note

目前僅支援 Azure Databricks 提供的模型服務。

步驟三:測試整合

  1. 開啟提問模式 Cmd+L(macOS)或 Ctrl+L(Windows/Linux),然後選擇你的型號。
  2. 傳達訊息。 所有請求現在都經過 Azure Databricks 路由。

Codex CLI

步驟 1:安裝或更新 Codex CLI

安裝或更新至 Codex CLI 版本 0.118 或更新:

npm install -g @openai/codex@latest

步驟 2:建立或更新 Codex 設定檔

請於以下 ~/.codex/config.toml處建立或編輯Codex配置檔:

profile = "default"

[profiles.default]
model_provider = "Databricks"

[model_providers.Databricks]
name = "Databricks :re[ai-gateway]"
base_url = "<workspace-url>/ai-gateway/codex/v1"
wire_api = "responses"

[model_providers.Databricks.auth]
command = "sh"
args = ["-c", "databricks auth token --host <workspace-url> --output json | jq -r '.access_token'"]
timeout_ms = 5000
refresh_interval_ms = 1800000

<workspace-url> 替換成你的 Azure Databricks 工作區網址。

步驟 3:驗證你的工作區

Note

這個動作只需要做一次。 你不需要每次啟動 Codex 都重新認證。

首先,確保你安裝了 Azure Databricks CLI。 如需指示,請參閱 安裝或更新 Databricks CLI

然後驗證:

databricks auth login --host <workspace-url>

<workspace-url> 替換成你的 Azure Databricks 工作區網址。

步驟四:開始編寫法典

codex

要更改模型,請使用 /model

Gemini CLI

步驟 1:安裝最新版本的 Gemini CLI

npm install -g @google/gemini-cli@nightly

步驟 2:設定環境變數

建立一個檔案 ~/.gemini/.env 並新增以下設定。 更多細節請參閱 Gemini CLI 認證文件

GEMINI_MODEL=databricks-gemini-2-5-flash
GOOGLE_GEMINI_BASE_URL=https://<workspace-url>/ai-gateway/gemini
GEMINI_API_KEY_AUTH_MECHANISM="bearer"
GEMINI_API_KEY=<databricks_pat_token>

<workspace-url> 換成你的 Azure Databricks workspace 網址,<databricks_pat_token> 換成你的個人存取權杖。

使用帶有編碼代理的開源模型

Azure Databricks 支援整合開放原始碼(OSS)模型,例如 glm-5-2,與編碼代理程式。

除了 上述要求 外,你的工作空間還必須能存取目標 OSS 模型。

OpenCode

按照 ucode中的說明設定 ,然後選擇 system.ai.glm-5-2 作為你的模型。

手動設定

或者,你也可以依照 OpenCode 文件中描述安裝 OpenCode,然後建立或編輯 ~/.config/opencode/opencode.json

{
  "$schema": "https://opencode.ai/config.json",
  "model": "databricks-oss/<open source model service name>",
  "provider": {
    "databricks-oss": {
      "npm": "@ai-sdk/openai",
      "options": {
        "baseURL": "<workspace-url>/ai-gateway/mlflow/v1",
        "apiKey": "<databricks_pat_token>"
      },
      "models": {
        "<open source model service name>": {}
      }
    }
  }
}

取代下列項目:

  • <workspace-url> 以及你的 Azure Databricks workspace 網址。
  • <databricks_pat_token> 用你的個人存取權憑證。
  • <開放原始碼 model service name> 搭配目標 OSS 模型服務,例如 system.ai.glm-5-2

接著開始 OpenCode:

opencode

法典

Codex 透過 Codex 支援的 開放回應 API 連接開源模型。

依照 ucode 中的說明設定 ,然後執行:

ucode codex --model <open source model service name>

例如,要使用 GLM 5.2 搭配 Codex,執行:

ucode codex --model system.ai.glm-5-2
手動設定

或者,您也可以依照 Codex CLI 的說明安裝 Codex CLI,然後建立或編輯 ~/.codex/config.toml

model = "<open source model service name>"
model_provider = "Databricks"

[model_providers.Databricks]
name = "Databricks :re[ai-gateway]"
base_url = "<workspace-url>/ai-gateway/codex/v1"
wire_api = "responses"

[model_providers.Databricks.auth]
command = "sh"
args = ["-c", "databricks auth token --host <workspace-url> --output json | jq -r '.access_token'"]
# Re-run the token command periodically so long sessions don't fail when the
# short-lived Databricks token expires.
timeout_ms = 5000
refresh_interval_ms = 1800000

<workspace-url> 取代為你的 Azure Databricks 工作區 URL,並將 <開放原始碼 model service name> 取代為目標 OSS 模型服務,例如 system.ai.glm-5-2

然後啟動 Codex:

codex

設定 OpenTelemetry 資料蒐集

Azure Databricks 支援將 OpenTelemetry 指標與日誌從編碼代理匯出至 Unity Catalog 管理的 Delta 表格。 所有指標皆為使用 OpenTelemetry 標準指標協定匯出的時間序列資料,日誌則使用 OpenTelemetry 日誌協定匯出。

Requirements

步驟 1:在 Unity 目錄中建立 OpenTelemetry 表格

建立 Unity Catalog 管理的表格,預先配置 OpenTelemetry 的指標和日誌架構。

指標表

CREATE TABLE <catalog>.<schema>.<table_prefix>_otel_metrics (
  name STRING,
  description STRING,
  unit STRING,
  metric_type STRING,
  gauge STRUCT<
    start_time_unix_nano: LONG,
    time_unix_nano: LONG,
    value: DOUBLE,
    exemplars: ARRAY<STRUCT<
      time_unix_nano: LONG,
      value: DOUBLE,
      span_id: STRING,
      trace_id: STRING,
      filtered_attributes: MAP<STRING, STRING>
    >>,
    attributes: MAP<STRING, STRING>,
    flags: INT
  >,
  sum STRUCT<
    start_time_unix_nano: LONG,
    time_unix_nano: LONG,
    value: DOUBLE,
    exemplars: ARRAY<STRUCT<
      time_unix_nano: LONG,
      value: DOUBLE,
      span_id: STRING,
      trace_id: STRING,
      filtered_attributes: MAP<STRING, STRING>
    >>,
    attributes: MAP<STRING, STRING>,
    flags: INT,
    aggregation_temporality: STRING,
    is_monotonic: BOOLEAN
  >,
  histogram STRUCT<
    start_time_unix_nano: LONG,
    time_unix_nano: LONG,
    count: LONG,
    sum: DOUBLE,
    bucket_counts: ARRAY<LONG>,
    explicit_bounds: ARRAY<DOUBLE>,
    exemplars: ARRAY<STRUCT<
      time_unix_nano: LONG,
      value: DOUBLE,
      span_id: STRING,
      trace_id: STRING,
      filtered_attributes: MAP<STRING, STRING>
    >>,
    attributes: MAP<STRING, STRING>,
    flags: INT,
    min: DOUBLE,
    max: DOUBLE,
    aggregation_temporality: STRING
  >,
  exponential_histogram STRUCT<
    attributes: MAP<STRING, STRING>,
    start_time_unix_nano: LONG,
    time_unix_nano: LONG,
    count: LONG,
    sum: DOUBLE,
    scale: INT,
    zero_count: LONG,
    positive_bucket: STRUCT<
      offset: INT,
      bucket_counts: ARRAY<LONG>
    >,
    negative_bucket: STRUCT<
      offset: INT,
      bucket_counts: ARRAY<LONG>
    >,
    flags: INT,
    exemplars: ARRAY<STRUCT<
      time_unix_nano: LONG,
      value: DOUBLE,
      span_id: STRING,
      trace_id: STRING,
      filtered_attributes: MAP<STRING, STRING>
    >>,
    min: DOUBLE,
    max: DOUBLE,
    zero_threshold: DOUBLE,
    aggregation_temporality: STRING
  >,
  summary STRUCT<
    start_time_unix_nano: LONG,
    time_unix_nano: LONG,
    count: LONG,
    sum: DOUBLE,
    quantile_values: ARRAY<STRUCT<
      quantile: DOUBLE,
      value: DOUBLE
    >>,
    attributes: MAP<STRING, STRING>,
    flags: INT
  >,
  metadata MAP<STRING, STRING>,
  resource STRUCT<
    attributes: MAP<STRING, STRING>,
    dropped_attributes_count: INT
  >,
  resource_schema_url STRING,
  instrumentation_scope STRUCT<
    name: STRING,
    version: STRING,
    attributes: MAP<STRING, STRING>,
    dropped_attributes_count: INT
  >,
  metric_schema_url STRING
) USING DELTA
TBLPROPERTIES (
  'otel.schemaVersion' = 'v1'
)

日誌表格

CREATE TABLE <catalog>.<schema>.<table_prefix>_otel_logs (
  event_name STRING,
  trace_id STRING,
  span_id STRING,
  time_unix_nano LONG,
  observed_time_unix_nano LONG,
  severity_number STRING,
  severity_text STRING,
  body STRING,
  attributes MAP<STRING, STRING>,
  dropped_attributes_count INT,
  flags INT,
  resource STRUCT<
    attributes: MAP<STRING, STRING>,
    dropped_attributes_count: INT
  >,
  resource_schema_url STRING,
  instrumentation_scope STRUCT<
    name: STRING,
    version: STRING,
    attributes: MAP<STRING, STRING>,
    dropped_attributes_count: INT
  >,
  log_schema_url STRING
) USING DELTA
TBLPROPERTIES (
  'otel.schemaVersion' = 'v1'
)

步驟 2:更新你的代碼代理中的環境變數

在任何啟用 OpenTelemetry 指標支援的編碼代理程式中,請設定以下環境變數。

{
  "OTEL_METRICS_EXPORTER": "otlp",
  "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL": "http/protobuf",
  "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT": "https://<workspace-url>/api/2.0/otel/v1/metrics",
  "OTEL_EXPORTER_OTLP_METRICS_HEADERS": "content-type=application/x-protobuf,Authorization=Bearer <databricks_pat_token>,X-Databricks-UC-Table-Name=<catalog>.<schema>.<table_prefix>_otel_metrics",
  "OTEL_METRIC_EXPORT_INTERVAL": "10000",
  "OTEL_LOGS_EXPORTER": "otlp",
  "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL": "http/protobuf",
  "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT": "https://<workspace-url>/api/2.0/otel/v1/logs",
  "OTEL_EXPORTER_OTLP_LOGS_HEADERS": "content-type=application/x-protobuf,Authorization=Bearer <databricks_pat_token>,X-Databricks-UC-Table-Name=<catalog>.<schema>.<table_prefix>_otel_logs",
  "OTEL_LOGS_EXPORT_INTERVAL": "5000"
}

步驟三:執行你的編碼代理程式。

你的資料應該會在 5 分鐘內傳送到 Unity 目錄資料表。

下一步