前言
本文是ChatGPT&Midjounery私有部署系列的第三篇,前兩篇請閱讀:
本文將詳細介紹Midjounery私有部署最核心的開源項目:Midjounery-Proxy的詳細配置和使用。
閱讀本文你將了解到:
- Midjounery-Proxy是什么,為什么需要它
- 部署所需的核心參數有哪些,怎么獲取
- 如何在調用MJ之前自動把中文指令翻譯為英文指令
- 部署的docker腳本示例
- 完整參數列表
Midjounery-Proxy是什么,為什么需要它
通過之前的介紹,你應該知道了Mijounery的強大,作為目前最優秀AI繪畫產品之一,在國內面臨難訪問、貴,并且無法用接口方式調用的問題。
那么Midjounery-Proxy就是為解決這個問題而誕生的。它可以代理 MidJourney 的discord頻道,實現api形式調用AI繪圖。支持以下功能

項目地址:https://github.com/novicezk/midjourney-proxy
核心參數有哪些,如何獲取
要部署該項目,必不可少的參數有如下幾個
參數 | 描述 |
mj.discord.guild-id | discord服務器ID |
mj.discord.channel-id | discord頻道ID |
mj.discord.user-token | discord用戶Token |
mj.discord.session-id | discord用戶SessionId |
注:
1. discord是一個社區平臺,midjounery一個基于 Discord 機器人的應用程序。類似于AppStore之于App
2. 這些參數都必須登錄discord平臺獲取,所以要魔法
如何獲取以上參數:
1. 注冊discord 和 MidJourney,在discord上創建自己的頻道,這部分可以參考 :https://docs.midjourney.com/docs/quick-start
2.把midjounery機器人拉入你的頻道
2.1 在你的服務器右鍵,依次點擊【服務器設置】->【APP目錄】

2.2 搜索midjounery,并點擊【添加至服務器】,一路繼續


2.3 在服務器中輸入/imagine,如果出現下圖表明可以正常使用

3. 獲取服務器ID和頻道ID

4. 獲取用戶sessionId
進入頻道,打開network,發送/imagine作圖指令,找到 interactions 的請求,這里的 session_id 即用戶sessionId,后續設置到 mj.discord.session-id

5.獲取用戶Token
進入頻道,打開network,刷新頁面,找到 messages 的請求,這里的 authorization 即用戶Token,后續設置到 mj.discord.user-token

如何自動將提示詞翻譯成英文
1. gpt翻譯
設置參數:
mj.translate-way=gpt
mj.openai.gpt-api-key=******
最好需要二次開發,對promot優化,目前效果如下:

2. 百度翻譯
參數:
mj.translate-way=baidu
mj.openai.gpt-api-key=******
百度翻譯的就比較中規中矩
百度獲取api和密鑰:https://fanyi-api.baidu.com/,點控制臺按提示步驟操作

啟動容器腳本示例
-- gpt翻譯
docker run -d --name midjourney-proxy \
-p 8081:8080 \
-e mj.discord.guild-id= \
-e mj.discord.channel-id= \
-e mj.discord.user-token= \
-e mj.discord.session-id= \
-e mj.translate-way=gpt \
-e mj.openai.gpt-api-key= \
-e mj.queue.timeout-minutes=10 \
--restart=always \
novicezk/midjourney-proxy:2.3.5
-- 百度翻譯
docker run -d --name midjourney-proxy \
-p 8080:8080 \
-e mj.discord.guild-id= \
-e mj.discord.channel-id= \
-e mj.discord.user-token= \
-e mj.discord.session-id= \
-e mj.translate-way=baidu \
-e mj.baidu-translate.appid= \
-e mj.baidu-translate.app-secret= \
-e mj.queue.timeout-minutes=10 \
--restart=always \
novicezk/midjourney-proxy:2.3.5
測試一下:ip:8080/mj/doc.html,看到如下頁面表示成功

完整配置
變量名 | 非空 | 描述 |
mj.discord.guild-id | 是 | discord服務器ID |
mj.discord.channel-id | 是 | discord頻道ID |
mj.discord.user-token | 是 | discord用戶Token |
mj.discord.session-id | 否 | discord用戶SessionId,建議從interactions請求中復制替換掉 |
mj.discord.user-agent | 否 | 調用discord接口、連接wss時的user-agent,建議從瀏覽器network復制 |
mj.discord.user-wss | 否 | 是否使用user-token連接wss,默認啟用 |
mj.discord.bot-token | 否 | 自定義機器人Token,user-wss=false時必填 |
mj.api-secret | 否 | 接口密鑰,為空不啟用鑒權;調用接口時需要加請求頭 mj-api-secret |
mj.include-task-extended | 否 | 接口是否返回任務擴展屬性,默認false |
mj.notify-hook | 否 | 全局的任務狀態變更回調地址 |
mj.notify-notify-pool-size | 否 | 通知回調線程池大小,默認10 |
mj.task-store.type | 否 | 任務存儲方式,默認in_memory(內存\重啟后丟失),可選redis |
mj.task-store.timeout | 否 | 任務過期時間,過期后刪除,默認30天 |
mj.queue.core-size | 否 | 并發數,默認為3 |
mj.queue.queue-size | 否 | 等待隊列,默認長度10 |
mj.queue.timeout-minutes | 否 | 任務超時時間,默認為5分鐘 |
mj.proxy.host | 否 | 代理host,全局代理不生效時設置 |
mj.proxy.port | 否 | 代理port,全局代理不生效時設置 |
mj.ng-discord.server | 否 | https://discord.com?反代地址 |
mj.ng-discord.cdn | 否 | https://cdn.discordapp.com?反代地址 |
mj.ng-discord.wss | 否 | wss://gateway.discord.gg 反代地址 |
mj.translate-way | 否 | 中文prompt翻譯方式,可選null(默認)、baidu、gpt |
mj.baidu-translate.appid | 否 | 百度翻譯的appid |
mj.baidu-translate.app-secret | 否 | 百度翻譯的app-secret |
mj.openai.gpt-api-url | 否 | 自定義gpt的接口地址,默認不需要配置 |
mj.openai.gpt-api-key | 否 | gpt的api-key |
mj.openai.timeout | 否 | openai調用的超時時間,默認30秒 |
mj.openai.model | 否 | openai的模型,默認gpt-3.5-turbo |
mj.openai.max-tokens | 否 | 返回結果的最大分詞數,默認2048 |
mj.openai.temperature | 否 | 相似度(0-2.0),默認0 |
spring.redis | 否 | 任務存儲方式設置為redis,需配置redis相關屬性 |
參考:
- 獲取百度翻譯官方接口API與密鑰并授權至軟件或插件的方法 – 知乎 (http://zhihu.com)
- midjourney-proxy/docs/discord-params.md at main · novicezk/midjourney-proxy · GitHub