基於Cloudflare Worker 代理程式存取OpenAI/AzureOpenAI API 的服務,目前支援企業微信應用程式、微信公眾號接入
有三種方式
快速编辑
,在本專案release 下載打包好的js 文件,複製內容到編輯器中,儲存设置
,選左側变量
,頁面下拉至KV 命名空间绑定
,编辑变量
點擊後的表單中添加綁定第二部創建的命名空間,左側變數名稱必須填KV
环境变量
,根據要接入的服務閱讀後面章節在介面進行配置触发器
中新增自訂網域,將網域新增至Worker。可參考使用Cloudflare Workers 解決OpenAI 和ChatGPT 的API 無法存取的問題注意: wrangler
執行部署時會列印相關訊息,如果wrangler.toml
配置的環境變數和KV ID 等。這些可以從Github Actions 執行日誌中看到
wrangler.toml
中kv_namespaces
id
填入建立的命名空間的id 進行綁定Settings
- Secrets and variables
- Actions
添加以下Secretswrangler.toml
中[vars]
下的各項,整個文件內容填入Deploy
這個Action 完成部署需要了解Git、Node.Js 基本使用
wranger
是Cloudflare 官方命令列客戶端, npx wrangler login
登入後即可透過命令列進行Worker 部署KV
,然後檔案wrangler.toml
中kv_namespaces
id
填入建立的命名空間的id 進行綁定wrangler.toml
中[vars]
下的各項wrangler.toml
改名為wrangler.prod.toml
,可使用指令npm run deploy
部署到Worker對比微信,更推薦使用企業微信。優點有:1. 企業微信應用的可見範圍受控,不像公眾號一樣完全公開;2. 個人微信加入企業後可在個人微信中透過公司進入應用,只需點擊2 次,而進入訂閱號需要更多的點擊次數;3. 支援企業微信群機器人告警
註冊企業微信,資訊隨便填,無需認證
企業微信管理後台-我的企業-企業資訊頁面確認自己的企業ID(corpid)
應用程式管理-建立應用,可以查看AgentId 和Secret,接收訊息-設定API接收中隨機產生Token,EncodingAESKey,此時還不需要儲存
Worker 設定應用所需的環境變數。可以透過介面操作配置,請參閱上面的Cloudflare 介面部署第三步。可透過設定檔配置,請參閱Github Action 部署第三步與本機命令列部署第三步
變數名 | 內容描述 | 備註 |
---|---|---|
WEWORK_ID_LIST | 允許存取的應用程式ID 列表,多個則以英文逗號分隔 | ID 是你自訂的,建議由10 位以內的數字字母組成 |
WEWORK_${ID}_APPID | 企業微信的corpid | 將${ID} 替換成你自訂的ID |
WEWORK_${ID}_TOKEN | 應用的Token | 將${ID} 替換成你自訂的ID |
WEWORK_${ID}_AES_KEY | 應用的EncodingAESKey | 將${ID} 替換成你自訂的ID |
WEWORK_${ID}_ADMIN_USER_ID_LIST | admin 用戶名單,多個則以英文逗號分隔 | 可以暫時先不配,等後面知道自己的用戶ID 後再配置 |
根據網域名稱和自訂的ID 得出第三步驟中的伺服器位址(URL)並進行配置,格式為https://${域名}/openai/wework/${ID}
。如網域名稱為xxx.com
,自訂的ID 為id123
,則伺服器位址(URL)為https://xxx.com/openai/wework/id123
。雖然提示为保障企业数据安全,需配置备案主体与当前企业主体相同或有关联关系的域名
,但實測發現Cloudflare 綁定自己的域名也可以通過驗證,不確定具體規則是什麼
用戶可透過我的企業-微信插件-邀請關注掃碼加入企業,在個人微信進入公司使用應用程式。注意在企業微信設定-新訊息通知-僅在企業微信中接收訊息中關掉應用訊息,否則個人微信中會收不到回覆訊息
註冊微信公眾號,一般是個人訂閱號,資質驗證門檻低
公用號碼管理平台-設定與開發-基本設定頁面確認自己的開發者ID(AppID),產生令牌(Token),訊息加解密金鑰(EncodingAESKey)(若開啟安全模式或相容模式才需要),此時還不需要啟用伺服器配置
Worker 設定微信公眾號所需的環境變數。可以透過介面操作配置,請參閱上面的Cloudflare 介面部署第三步。可透過設定檔配置,請參閱Github Action 部署第三步與本機命令列部署第三步
變數名 | 內容描述 | 備註 |
---|---|---|
WECHAT_ID_LIST | 允許存取的公眾號ID 列表,多個則以英文逗號分隔 | ID 是你自訂的,建議由10 位以內的數字字母組成 |
WECHAT_${ID}_APPID | 公眾號碼的開發者ID(AppID) | 將${ID} 替換成你自訂的ID |
WECHAT_${ID}_TOKEN | 公眾號的令牌(Token) | 將${ID} 替換成你自訂的ID |
WECHAT_${ID}_AES_KEY | 公眾號的訊息加解密金鑰(EncodingAESKey) | 將${ID} 替換成你自訂的ID,開啟安全模式或相容模式時才需要 |
WECHAT_ADMIN_USER_ID_LIST | admin 用戶名單,多個則以英文逗號分隔 | 可以暫時先不配,等後面知道自己的用戶ID 後再配置 |
WECHAT_ADMIN_OPENAI_KEY | admin 用戶的OpenAI Key | 可選,預設會使用WECHAT_GUEST_OPENAI_KEY ,優先權高於OpenAI 的配置 |
WECHAT_GUEST_OPENAI_KEY | 遊客的OpenAI Key | 可選,可隨意使用,優先權高於OpenAI 的配置,謹慎配置! |
根據網域名稱和自訂的ID 得出第二步驟中伺服器配置的伺服器位址(URL)並進行配置,格式為https://${域名}/openai/wechat/${ID}
。如網域名稱為xxx.com
,自訂的ID 為id123
,則伺服器位址(URL)為https://xxx.com/openai/wechat/id123
訊息加解密方式一般選明文,啟用伺服器配置,驗證存取成功後即可使用
輸入使用時可忽略大小寫
命令 | 可用角色 | 說明 |
---|---|---|
/help | 遊客,用戶 | 取得命令說明資訊 |
/setOpenAiType | 遊客,用戶 | 設定使用openAi 還是azureOpenAi,預設使用openAi |
/bindKey | 遊客,用戶 | 綁定OpenAI api key,格式如/bindKey xxx。如已綁定key,則會覆蓋。綁定後先用/testKey 指令測試是否正常可用 |
/unbindKey | 使用者 | 解綁OpenAI api key |
/bindAzureKey | 遊客,用戶 | 綁定AzureOpenAI key,格式如/bindAzureKey yourResourceName:yourDeploymentName:yourApiKey。如已綁定key,則會覆蓋。綁定後先用/testKey 指令測試是否正常可用 |
/unbindAzureKey | 使用者 | 解綁AzureOpenAI api key |
/testKey | 使用者 | 呼叫OpenAI/AzureOpenAI 列出模型接口,測試api key 是否正常綁定可用,不消耗用量 |
/setChatType | 用戶,試用者 | 切換對話模式,可選'單聊'和'串聊',預設'單聊'。 '單聊'只處理目前的輸入,'串聊'會帶上歷史聊天記錄請求OpenAI,消耗更多用量 |
/newChat | 用戶,試用者 | 清除先前的串聊歷史記錄,開始新的串聊 |
/retry | 用戶,試用者 | 根據msgId 取得對應回答,回答只會保留3 分鐘。保留時間可透過ANSWER_EXPIRES_MINUTES 配置 |
.. | 用戶,試用者 | 重試上一個延遲的回答 |
。 。 | 用戶,試用者 | 重試上一個延遲的回答 |
/bindSessionKey | 遊客,用戶 | 綁定OpenAI session key,可查看用量頁面對https://api.openai.com/v1/usage 的請求頭獲得,每次重新登陸原來的session key 會失效,需要重新綁定 |
/unbindSessionKey | 使用者 | 解綁OpenAI session key |
/usage | 使用者 | 獲取本月用量信息,可能有5 分鐘左右的延遲,需要綁定OpenAI api key 或session key |
/freeUsage | 使用者 | 獲取免費用量信息,可能有5 分鐘左右的延遲,需要綁定OpenAI session key |
/system | 用戶,管理員 | 查看當前一些系統配置信息,如當前OpenAI 模型,當前用戶ID 等 |
/faq | 遊客,用戶 | 一些常見問題 |
/adminAuth | 遊客,用戶 | 隱藏指令,透過token 認證成為管理員,避免每個平台配置admin 使用者ID 的麻煩。需要先設定ADMIN_AUTH_TOKEN |
/testAlarm | 管理員 | 隱藏命令,測試發送警告訊息。需要先配置ALARM_URL |
/feedback | 遊客,用戶 | 用戶向開發者發送回饋。需要先設定FEEDBACK_URL |
配置名 | 預設值 | 說明 |
---|---|---|
CHAT_MODEL | gpt-3.5-turbo | OpenAI 的模式名稱 |
OPEN_AI_API_PREFIX | https://api.openai.com/v1 | OpenAI 的通用API 前綴 |
GUEST_KEY | 可選,遊客的預設openai key,可隨意使用,跨平台起效,謹慎配置! | |
ADMIN_KEY | 可選,admin 用戶的預設openai key,跨平台起效 | |
OPEN_AI_USAGE | https://api.openai.com/dashboard/billing/usage | OpenAI 的用量位址 |
OPEN_AI_FREE_USAGE | https://api.openai.com/dashboard/billing/credit_grants | OpenAI 的免費用量位址 |
OPEN_AI_API_TIMEOUT_MS | 30000 | OpenAI API 請求超時,毫秒 |
OPEN_AI_API_KEY_OCCUPYING_DURATION | 0 | OpenAI API key 使用間隔,單位秒,用於限流,大於0 時開啟。用kv 實現限流只能說勉強能用 |
OPEN_AI_API_CHAT_EXTRA_PARAMS | OpenAI API chat 額外的全域參數,JSON 字串,可用參數 | |
MIN_CHAT_RESPONSE_TOKEN_NUM | 500 | OpenAI 回覆的最小token 數 |
MAX_HISTORY_LENGTH | 20 | 串聊最大歷史記錄長度 |
ANSWER_EXPIRES_MINUTES | 3 | 提問/回答的保存時長,分鐘 |
SYSTEM_INIT_MESSAGE | You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible. Knowledge cutoff: 2021-09-01. Current is 2023 | 發給OpenAI 的預設第一個系統訊息,可用來調整模型 |
WELCOME_MESSAGE | 歡迎使用,可輸入/help 查看目前可用指令 | 用戶關注應用程式時發出的歡迎訊息 |
AZURE_API_PREFIX | https://RESOURCENAME.openai.azure.com/openai | Azure OpenAI 透過請求前綴 |
AZURE_CHAT_API_VERSION | 2023-03-15-preview | 聊天介面API 版本 |
AZURE_LIST_MODEL_API_VERSION | 2022-12-01 | 列舉模型介面API 版本 |
AZURE_GUEST_KEY | 可選,遊客的預設azure openai key,可隨意使用,跨平台起效,謹慎配置! | |
AZURE_ADMIN_KEY | 可選,admin 用戶的預設azure openai key,跨平台起效 |
配置名 | 預設值 | 說明 |
---|---|---|
DEBUG_MODE | false | 調試模式,會列印更多日誌 |
ECHO_MODE | false | echo 模式,直接傳回收到的訊息 |
ALARM_URL | 警告URL,目前支援企業微信群機器人、自訂地址,對自訂地址會POST { "msg": "xxxx" } JSON 數據 | |
FEEDBACK_URL | 使用者回饋URL,目前支援企業微信群機器人、自訂位址,對自訂位址會POST { "msg": "xxxx" } JSON 數據 | |
ADMIN_AUTH_TOKEN | 認證為admin 的token,應有足夠的長度和複雜性,謹慎配置和保存! |