我們如何方便地獲取 OpenAI 服務?
我們這一節介紹如何最方便的獲得 OpenAI 的服務,其中會介紹除 OpenAI 官方 API 外幾種常見獲取 llm 服務的方式,以及如何在 langchain 中使用。
如果你能獲得穩定的官方 API,那可以跳過本章的大部分內容。
Azure OpenAI
Azure OpenAI 的優勢是跟 OpenAI 同源,并且國內付款比較容易。
正常注冊 microsoft 賬號,并注冊登錄 azure link。這里注冊 azure 的時候,需要手機號驗證碼,國內正常 +86 手機即可。還需要一張信用卡,在不開啟付費業務的情況下不會有支出。
我為了這個教程新注冊了一個 azure 賬號,會送 200 刀的的額度幫助大家上手,這個額度是有期限的。具體大家注冊時候的活動不確定,但看起來是個長期的活動。
進入 azure 首頁后,搜索 OpenAI:
CleanShot 2024-04-23 at 22.11.05@2x.png
然后我們創建一個 Azure OpenAI 的服務:
CleanShot 2024-04-23 at 22.12.10@2x.png
目前 OpenAI 的業務需要申請才能使用,第一次打開這個界面會提醒填寫表單進行申請:
CleanShot 2024-04-23 at 22.13.36@2x.png
按照表單內容填寫公司相關的信息即可,郵箱一定使用公司的郵箱,使用個人郵箱會被直接拒絕,一般需要等待幾天即可。
我們假設大家已經通過申請。
第一個 tab 基本信息,就按照其說明正常填寫,這里需要注意兩個點:
- 名稱。這也會成為之后我們 openai 服務的 endpoint 的前綴
- 區域。因為每個區域的 GPU 數量是不一樣的,所以提供的模型和算力限制都不一樣,再考慮上延遲,一般選擇日本區域比較好。一個賬號可以在多個區域有服務,所以如果日本的 GPU 資源緊張,可以試試加拿大/澳大利亞等區域。每個區域新模型上線的節奏也不同,比如最新的 Vision 版本可能只有部分區域有,大家可以根據需要查詢官方文檔。
網絡和 Tags 這兩個 Tab 大家按需填寫就行,一版不用做修改,然后創建資源即可。
等待部署完成后,打開部署的服務,左上角打碼部分就是你部署的名稱,然后我們點擊 模型部署 => 管理部署,跳轉到 Azure OpenAI Studio 去管理模型。
CleanShot 2024-04-23 at 22.24.17@2x.png
Azure OpenAI 與 OpenAI API 有些不同,在 Azure 中,你需要先創建一個模型的部署,然后才能在 API 中使用部署名稱去調用對應的部署,我們先創建一個 gpt4 的模型:
CleanShot 2024-04-23 at 22.27.06@2x.png
CleanShot 2024-04-23 at 22.27.50@2x.png
這里模型的版本根據你服務部署所在的區域有關,并且不同模型的 API 定價不同,你可以根據需要去創建特定的模型版本。
CleanShot 2024-04-23 at 22.28.00@2x.png
創建之后,你就可以在聊天界面去測試這個部署:
CleanShot 2024-04-23 at 22.30.10@2x.png
這個界面已提供了非常豐富的參數和 prompt 功能,可以直接用來調試模型的參數和 prompt。
然后,我們看如何在 langchain 中通過設置環境變量使用 azure openAI,首先創建一個 .env 文件,注意,一定要把 .env 文件加到 .gitignore 中,一定不能將此文件上傳至任何公開平臺。
然后,設置其中的幾個屬性:
AZURE_OPENAI_API_KEY=abc
AZURE_OPENAI_API_VERSION=abc
AZURE_OPENAI_API_DEPLOYMENT_NAME=abc
AZURE_OPENAI_API_INSTANCE_NAME=abc
AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME=abc- AZURE_OPENAI_API_KEY 是你部署的服務的 Key,可以在下圖中的 密鑰和終結點中找到。
- AZURE_OPENAI_API_VERSION 是使用的 API 版本,目前最新的穩定版是
2024-02-01,本小冊大多使用的是2023-07-01-preview,建議學習小冊時可以繼續使用2023-07-01-preview。 - AZURE_OPENAI_API_DEPLOYMENT_NAME 是你部署的模型實例的名稱,我們上面剛創建了一個 gpt4 的實例叫做 gpt-4。
- AZURE_OPENAI_API_INSTANCE_NAME 是你部署服務的名稱,也就是下面截圖左上角打碼部分的名稱。
- AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME 是你用于 embedding 的模型實例名稱。創建步驟跟創建 gpt4 模型的部署一致。
CleanShot 2024-04-24 at 16.53.36@2x.png
把這些環境變量設置好后,langchain 運行時會自動讀取,所以我們創建 OpenAI 的服務時就可以直接:
import { ChatOpenAI } from "@langchain/openai";
import { OpenAIEmbeddings } from "@langchain/openai";
const chatModel = new ChatOpenAI();
const embeddings = new OpenAIEmbeddings()第三方 OpenAI 服務
另一種,就是經過中轉的第三方 OpenAI 服務,這類平臺比較多,我們不做推薦,只講解一下如何在 langchain 中使用。
首先是在 .env 聲明 key:
OPENAI_API_KEY=abc然后在創建 ChatOpenAI 時,指定 baseUrl:
import { ChatOpenAI } from "@langchain/openai";
import { HumanMessage } from "@langchain/core/messages";
const chatModel = new ChatOpenAI({
configuration: {
baseURL: "xxx",
}
});
await chatModel.invoke([
new HumanMessage("Tell me a joke")
])本地大模型
如果你是 win 平臺,顯卡顯存大于 6G,mac 平臺 M 系芯片 + 16G 內存基本就足夠運行 7B 大小的模型。雖然推理速度較慢,但可以應付一些本地的測試。
在 mac 平臺下,我推薦用 ollma,使用起來非常簡單,下載好模型后,點開這個 app 后,就會自動在 http://localhost:11434 host 一個 llm 的服務。
如果是 win 平臺,可以嘗試一下 LM Studio,其提供的模型更多,可玩性也更強一些。
目前我本地使用的還是 llama2,最新的已經到了 llama3,大家可以在這 github 找到目前支持的模型,llama 和 Mistral 家族的模型效果都很棒。
然后,我們就可以在 langchian 中使用這些本地模型:
import { Ollama } from "@langchain/community/llms/ollama";
const ollama = new Ollama({
baseUrl: "http://localhost:11434",
model: "llama2",
});
const res = await ollama.invoke("講個笑話")如果你使用的是 deno,需要在 deno.json 中加入這一行依賴別名:
{
"imports":{
...
"@langchain/community/": "npm:/@langchain/community/",
...
}
}大家可以直接用 ollama 來代替小冊中出現的 llm 模型,當然其效果肯定不如 gpt3.5 和 gpt4 強。但如果你不容易獲得 openAI 的 API,使用本地模型進行學習和測試,也是一個省錢和方便的方案。
加載環境變量
首先是在 nodejs 中,我們使用 dotenv/config 這個第三方庫:
yarn add dotenv/config然后,在需要使用環境變量的 js 文件中:
import "dotenv/config";即可,.env 中的環境變量就會被注入到 process.env 中。
在 Deno 中稍有不同,因為 langchain 是為 nodejs 設計,所以讀取環境變量時會默認從 process.env 中進行讀取,所以我一般會這樣 hack 一下:
import { load } from "https://deno.land/std@0.223.0/dotenv/mod.ts";
const env = await load();
const process = {
env
}即,從 .env 文件加載出來所有的環境變量后,再自己創建一個全局的 process.env 方便 langchain 進行讀取。
小結
本節介紹了如果沒辦法使用 OpenAI 官方的 API 有哪些合適的方式去獲取 OpneAI 的服務,并在 Langchain 中使用。
一般是推薦大家嘗試 Azure OpenAI,其定價和模型跟 OpenAI 一致,且方便國內用戶付款,缺點可能是需要進行申請才能使用。 在本地進行簡單測試,或者簡單任務可以使用 llama3,其效果已經非常不錯了。 如果要是用第三方提供的 OpenAI API 服務,就需要注意價格和風險。



























