使用 Azure OpenAI 打造自己的 ChatGPT

一.前言

當今的人工智能技術正在不斷髮展,越來越多的企業和個人開始探索人工智能在各個領域中的應用。其中,在自然語言處理領域,OpenAI 的 GPT 系列模型成爲了研究熱點。OpenAI 公司的 ChatGPT 帶起了一波 AI 應用的浪潮,一些科技公司都在努力跟進,比如百度的文心一言,Google 的 Bard 以及 Notion AI。就目前體驗來說還是 OpenAI ChatGPT 表現最好。

作爲 OpenAI 公司的大股東,Microsoft 當然是使用其服務的一等公民,陸續推出了 GitHub Copilot、New Bing、Office 365 Copilot 和 Github Copilot X 等等。目前 Microsoft Azure 是獨一家的提供 OpenAI 雲服務的雲廠商,Azure OpenAI 提供的 API 服務使得構建和部署自己的 ChatGPT 成爲了可能。

二.對比

Azure OpenAI 和 OpenAI 官方提供的服務基本是一致的,但是目前前者還是處於預覽版的狀態,一些功能還沒有完全開放。

注意:需要使用 Azure 國際版,點此進行申請

優點:

  • 不受地域限制,國內可以直接調用。
  • 可以自己上傳訓練數據進行訓練(據說很貴)。
  • Azure 多語言 SDK 支持。

缺點:

  • 部分功能未開放,但 ChatGPT 的功能是沒問題的。
  • 和 OpenAI 官方的 API 標準有差異,無法直接用一些只支持 OpenAI 官方API 的開源項目。

Azure OpenAI 也已經支持 GPT-4 了,需要單獨進行申請,博主的申請還沒通過本文暫時以 GPT-3.5 進行演示。

三.使用 Auzre OpenAI

1.創建服務

進入 Azure 後,直接搜索 "Azure OpenAI"。

image-20230330103819049

選擇你已經申請通過的訂閱進行創建。

image-20230330103929103

如果該訂閱沒有啓動則不能創建。

2.創建模型部署

在資源管理->模型部署 選擇需要的模型進行創建,每個模型只能創建1個部署。

image-20230330104600507

2.Azure OpenAI Studio

模型創建完成以後,我們可以直接使用 Azure OpenAI Studio 來進行快速的測試。

image-20230330104111648

ChatGPT 測試。

image-20230330104238578

上傳自己的數據集。

image-20230330104733421

四.API 調用

在 資源管理->密鑰和終結點 可以獲取 API 地址以及調用密鑰。

image-20230330104847592

查看 API 文檔

image-20230330105131925

使用 POSTMAN 進行調用測試。

image-20230330105302854

五.打造自己的 ChatGPT

1.Azure OpenAI Proxy

打造自己的 ChatGPT 推薦直接使用 https://github.com/Chanzhaoyu/chatgpt-web 這個項目。

image-20230324163357406

前面我們說到 API 調用是有差異的,此項目目前還沒用直接支持 Azure OpenAI。我嘗試修改過這個項目,可以調用了但是有個問題,無法正常的自動結束對話,跟了代碼發現有 Bug:

https://github.com/Chanzhaoyu/chatgpt-web -> https://github.com/transitive-bullshit/chatgpt-api -> https://github.com/rexxars/eventsource-parser

最終在 eventsource-parser 這個 package 裏,無法適應 Azure OpenAI 返回的結果,做過對比發現 Azure OpenAI 返回的調用最後少了一個換行 \n

最終我便想了個方法,自己實現一個 Proxy 轉換 OpenAI 官方 API 標準到 Azure OpenAI 標準,這樣就能讓 Azure OpenAI 直接對接到任何支持 OpenAI 的任何項目中,並且可以順便修復上面所說的差異,讓 chatgpt-web 直接使用 Azure OpenAI。

項目地址:https://github.com/stulzq/azure-openai-proxy 希望大家點點 star。

2.搭建

最快的方式當然是使用 Docker,以下是 docker compose 腳本:

version: '3'

services:
  chatgpt-web:
    image: chenzhaoyu94/chatgpt-web
    ports:
      - 3002:3002
    environment:
      OPENAI_API_KEY: <Auzre OpenAI API Key>
      OPENAI_API_BASE_URL: http://azure-openai:8080
      AUTH_SECRET_KEY: ""
      MAX_REQUEST_PER_HOUR: 1000
      TIMEOUT_MS: 60000
    depends_on:
      - azure-openai
    links:
      - azure-openai
    networks:
      - chatgpt-ns

  azure-openai:
    image: stulzq/azure-openai-proxy
    ports:
      - 8080:8080
    environment:
      AZURE_OPENAI_ENDPOINT: <Auzre OpenAI API Endpoint>
      AZURE_OPENAI_MODEL_MAPPER: <Auzre OpenAI API Deployment Mapper>
      AZURE_OPENAI_API_VER: 2023-03-15-preview
    networks:
      - chatgpt-ns

networks:
  chatgpt-ns:
    driver: bridge

啓動有 3 個環境變量需要配置:

變量名 說明
OPENAI_API_KEY Azure 密鑰和終結點 裏提供的 Key
AZURE_OPENAI_ENDPOINT Azure 密鑰和終結點 裏提供的終結點
AZURE_OPENAI_MODEL_MAPPER Azure 部署模型名稱映射到 OpenAI 官方模型名稱

特別說明一下 AZURE_OPENAI_MODEL_MAPPER使用 OpenAI 官方標準發起的請求裏包含的模型名稱是固定的,在這裏可以查詢,而在 Azure OpenAI 模型部署時是可以自定義名稱的,請求 Azure yes需要提供這個部署模型的名稱,所以建立了一個映射關係。

比如我在 Azure 部署了一個 gpt-3.5-turbo模型,我設置的部署名稱爲:xc-gpt-35,此時我的設置:

AZURE_OPENAI_MODEL_MAPPER: gpt-3.5-turbo=xc-gpt-35

image-20230330111358140

六.結束

Azure OpenAI 平臺爲開發人員提供了一個強大的工具,可以輕鬆地創建和訓練 ChatGPT 模型。隨着 ChatGPT 技術的不斷髮展,它將在越來越多的應用場景中發揮重要作用,爲人們提供更加智能和個性化的服務和體驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章