AI 代理外掛程式實現了基於 OpenAI API 契約的 AI 代理功能。目前支援 OpenAI、Azure OpenAI、月之暗面(Moonshot)和通義千問等 AI 服務提供者。
請只對處理 AI 流量的路由開啟該外掛程式,該外掛程式對於非OpenAI API 介面標準的請求會返回 404。
請求路徑尾碼匹配
/v1/chat/completions時,對應文生文情境,會使用 OpenAI 的文生文協議解析請求 Body,再轉換為對應 LLM 廠商的文生文協議。請求路徑尾碼匹配
/v1/embeddings時,對應文本向量情境,會使用 OpenAI 的文本向量協議解析請求 Body,再轉換為對應 LLM 廠商的文本向量協議。
運行屬性
外掛程式執行階段:預設階段外掛程式執行優先順序:100。
配置欄位
基本配置
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| object | 必填 | - | 配置目標 AI 服務提供者的資訊。 |
provider的配置欄位說明如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - | AI 服務提供者名稱。 |
| array of string | 非必填 | - | 用於在訪問 AI 服務時進行認證的令牌。如果配置了多個 token,外掛程式會在請求時隨機進行選擇。部分服務提供者只支援配置一個 token。 |
| number | 非必填 | - | 訪問 AI 服務的逾時時間。單位為毫秒,預設值為 120000,即 2 分鐘。 |
| map of string | 非必填 | - | AI 模型映射表,用於將請求中的模型名稱映射為服務提供者支援模型名稱。
|
| string | 非必填 | - | 外掛程式對外提供的 API 介面契約。目前支援以下取值:openai(預設值,使用 OpenAI 的介面契約)、original(使用目標服務提供者的原始介面契約)。 |
| object | 非必填 | - | 配置 AI 對話上下文資訊。 |
| array of customSetting | 非必填 | - | 為AI請求指定覆蓋或者填充參數。 |
context的配置欄位說明如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - | 儲存 AI 對話內容相關的檔案 URL。僅支援純文字類型的檔案內容。 |
| string | 必填 | - | URL 所對應的 Higress 後端服務完整名稱。 |
| number | 必填 | - | URL 所對應的 Higress 後端服務訪問連接埠。 |
customSettings的配置欄位說明如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - | 想要設定的參數的名稱,例如 |
| string/int/float/bool | 必填 | - | 想要設定的參數的值,例如0。 |
| string | 非必填 | "auto" | 參數設定的模式,可以設定為"auto"或者"raw",如果為"auto"則會自動根據協議對參數名做改寫,如果為"raw"則不會有任何改寫和限制檢查。 |
| bool | 非必填 | true | 如果為false則只在使用者沒有設定這個參數時填充參數,否則會直接覆蓋使用者原有的參數設定。 |
customSettings會遵循如下表格,根據name和協議來替換對應的欄位,使用者需要填寫表格中settingName列中存在的值。例如使用者將name設定為max_tokens,在openai協議中會替換max_tokens,在gemini中會替換maxOutputTokens。none表示該協議不支援此參數。如果name不在此表格中或者對應協議不支援此參數,同時沒有設定raw模式,則配置不會生效。
settingName | openai | baidu | spark | qwen | gemini | hunyuan | claude | minimax |
max_tokens | max_tokens | max_output_tokens | max_tokens | max_tokens | maxOutputTokens | none | max_tokens | tokens_to_generate |
temperature | temperature | temperature | temperature | temperature | temperature | Temperature | temperature | temperature |
top_p | top_p | top_p | none | top_p | topP | TopP | top_p | top_p |
top_k | none | none | top_k | none | topK | none | top_k | none |
seed | seed | none | none | seed | none | none | none | none |
如果啟用了raw模式,customSetting會直接用輸入的name和value去變更要求中的JSON內容,而不對參數名稱做任何限制和修改。 對於大多數協議,customSetting都會在JSON內容的根路徑修改或者填充參數。對於qwen協議,ai-proxy會在JSON的parameters子路徑下做配置。對於gemini協議,則會在generation_config子路徑下做配置。
供應商特有配置
OpenAI
OpenAI 所對應的 type 為 openai。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 非必填 | - | 基於OpenAI協議的自訂後端URL,例如: |
| object | 非必填 | - | 預先定義OpenAI響應需滿足的Json Schema, 注意目前僅特定的幾種模型支援該用法。 |
Azure OpenAI
Azure OpenAI 所對應的 type 為 azure。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - | Azure OpenAI 服務的 URL,須包含 |
Azure OpenAI 只支援配置一個 API Token。
月之暗面(Moonshot)
月之暗面所對應的 type 為 moonshot。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 非必填 | - | 通過檔案介面上傳至月之暗面的檔案 ID,其內容將被用作AI 對話的上下文。不可與 |
通義千問(Qwen)
通義千問所對應的 type 為 qwen。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| boolean | 非必填 | - | 是否啟用通義千問內建的互連網搜尋功能。 |
| array of string | 非必填 | - | 通過檔案介面上傳至Dashscope的檔案 ID,其內容將被用作AI 對話的上下文。不可與 |
百川智能 (Baichuan AI)
百川智能所對應的 type 為 baichuan 。它並無特有的配置欄位。
零一萬物(Yi)
零一萬物所對應的 type 為 yi。它並無特有的配置欄位。
智譜AI(Zhipu AI)
智譜AI所對應的 type 為 zhipuai。它並無特有的配置欄位。
DeepSeek(DeepSeek)
DeepSeek所對應的 type 為 deepseek。它並無特有的配置欄位。
Groq
Groq 所對應的 type 為 groq。它並無特有的配置欄位。
文心一言(Baidu)
文心一言所對應的 type 為 baidu。它並無特有的配置欄位。
360智腦
360智腦所對應的type為ai360。它並無特有的配置欄位。
Mistral
Mistral 所對應的type為mistral。它並無特有的配置欄位。
MiniMax
MiniMax所對應的 type 為 minimax。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 當使用 | - | 當使用 |
Anthropic Claude
Anthropic Claude 所對應的 type 為 claude。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 可選 | - | Claude 服務的 API 版本,預設為 2023-06-01。 |
Ollama
Ollama 所對應的 type 為 ollama。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - | Ollama 伺服器的主機地址。 |
| number | 必填 | - | Ollama 伺服器的連接埠號碼,預設為11434。 |
混元
混元所對應的 type 為 hunyuan。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - | 混元用於v3版本認證的id。 |
| string | 必填 | - | 混元用於v3版本認證的key。 |
階躍星辰 (Stepfun)
階躍星辰所對應的 type 為 stepfun。它並無特有的配置欄位。
Cloudflare Workers AI
Cloudflare Workers AI 所對應的type為cloudflare。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - |
星火 (Spark)
星火所對應的type為spark。它並無特有的配置欄位。
訊飛星火認知大模型的apiTokens欄位值為APIKey:APISecret。即填入自己的APIKey與APISecret,並以:分隔。
Gemini
Gemini 所對應的type為gemini。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| map of string | 非必填 | - | Gemini AI內容過濾和安全層級設定。參考Safety settings |
DeepL
DeepL 所對應的type為deepl。它特有的配置欄位如下:
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
| string | 必填 | - | DeepL 翻譯服務需要的目標語種 |
Cohere
Cohere 所對應的type為cohere。它並無特有的配置欄位。
用法樣本
使用 OpenAI 協議代理 Azure OpenAI 服務
使用最基本的 Azure OpenAI 服務,不配置任何上下文。
配置資訊
provider:
type: azure
apiTokens:
- "YOUR_AZURE_OPENAI_API_TOKEN"
azureServiceUrl: "https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2024-02-15-preview",使用 OpenAI 協議代理通義千問服務
使用通義千問服務,並配置從 OpenAI 大模型到通義千問的模型映射關係。
配置資訊
provider:
type: qwen
apiTokens:
- "YOUR_QWEN_API_TOKEN"
modelMapping:
'gpt-3': "qwen-turbo"
'gpt-35-turbo': "qwen-plus"
'gpt-4-turbo': "qwen-max"
'gpt-4-*': "qwen-max"
'gpt-4o': "qwen-vl-plus"
'text-embedding-v1': 'text-embedding-v1'
'*': "qwen-turbo"使用original協議代理阿里雲百鍊智能體應用
配置資訊
provider:
type: qwen
apiTokens:
- "YOUR_DASHSCOPE_API_TOKEN"
protocol: original使用 OpenAI 協議代理豆包大模型服務
配置資訊
provider:
type: doubao
apiTokens:
- YOUR_DOUBAO_API_KEY
modelMapping:
'*': YOUR_DOUBAO_ENDPOINT
timeout: 1200000使用月之暗面配合其原生的檔案上下文
提前上傳檔案至月之暗面,以檔案內容作為上下文使用其 AI 服務。
配置資訊
provider:
type: moonshot
apiTokens:
- "YOUR_MOONSHOT_API_TOKEN"
moonshotFileId: "YOUR_MOONSHOT_FILE_ID",
modelMapping:
'*': "moonshot-v1-32k"使用 OpenAI 協議代理 Groq 服務
配置資訊
provider:
type: groq
apiTokens:
- "YOUR_GROQ_API_TOKEN"使用 OpenAI 協議代理 Claude 服務
配置資訊
provider:
type: claude
apiTokens:
- "YOUR_CLAUDE_API_TOKEN"
version: "2023-06-01"使用 OpenAI 協議代理混元服務
配置資訊
provider:
type: "hunyuan"
hunyuanAuthKey: "<YOUR AUTH KEY>"
apiTokens:
- ""
hunyuanAuthId: "<YOUR AUTH ID>"
timeout: 1200000
modelMapping:
"*": "hunyuan-lite"使用 OpenAI 協議代理百度文心一言服務
配置資訊
provider:
type: baidu
apiTokens:
- "YOUR_BAIDU_API_TOKEN"
modelMapping:
'gpt-3': "ERNIE-4.0"
'*': "ERNIE-4.0"使用 OpenAI 協議代理MiniMax服務
配置資訊
provider:
type: minimax
apiTokens:
- "YOUR_MINIMAX_API_TOKEN"
modelMapping:
"gpt-3": "abab6.5g-chat"
"gpt-4": "abab6.5-chat"
"*": "abab6.5g-chat"
minimaxGroupId: "YOUR_MINIMAX_GROUP_ID"使用 OpenAI 協議代理360智腦服務
配置資訊
provider:
type: ai360
apiTokens:
- "YOUR_MINIMAX_API_TOKEN"
modelMapping:
"gpt-4o": "360gpt-turbo-responsibility-8k"
"gpt-4": "360gpt2-pro"
"gpt-3.5": "360gpt-turbo"
"text-embedding-3-small": "embedding_s1_v1.2"
"*": "360gpt-pro"使用 OpenAI 協議代理 Cloudflare Workers AI 服務
配置資訊
provider:
type: cloudflare
apiTokens:
- "YOUR_WORKERS_AI_API_TOKEN"
cloudflareAccountId: "YOUR_CLOUDFLARE_ACCOUNT_ID"
modelMapping:
"*": "@cf/meta/llama-3-8b-instruct"使用 OpenAI 協議代理Spark服務
配置資訊
provider:
type: spark
apiTokens:
- "APIKey:APISecret"
modelMapping:
"gpt-4o": "generalv3.5"
"gpt-4": "generalv3"
"*": "general"使用 OpenAI 協議代理 gemini 服務
配置資訊
provider:
type: gemini
apiTokens:
- "YOUR_GEMINI_API_TOKEN"
modelMapping:
"*": "gemini-pro"
geminiSafetySetting:
"HARM_CATEGORY_SEXUALLY_EXPLICIT" :"BLOCK_NONE"
"HARM_CATEGORY_HATE_SPEECH" :"BLOCK_NONE"
"HARM_CATEGORY_HARASSMENT" :"BLOCK_NONE"
"HARM_CATEGORY_DANGEROUS_CONTENT" :"BLOCK_NONE"使用 OpenAI 協議代理 DeepL 文本翻譯服務
配置資訊
provider:
type: deepl
apiTokens:
- "YOUR_DEEPL_API_TOKEN"
targetLang: "ZH"請求樣本
此處model表示 DeepL 的服務類型,只能填Free或Pro。content中設定需要翻譯的文本;在role: system的content中可以包含可能影響翻譯但本身不會被翻譯的上下文,例如翻譯產品名稱時,可以將產品描述作為上下文傳遞,這種額外的上下文可能會提高翻譯的品質。
{
"model": "Free",
"messages": [
{
"role": "system",
"content": "money"
},
{
"content": "sit by the bank"
},
{
"content": "a bank in China"
}
]
}響應樣本
{
"choices": [
{
"index": 0,
"message": { "name": "EN", "role": "assistant", "content": "坐莊" }
},
{
"index": 1,
"message": { "name": "EN", "role": "assistant", "content": "中國銀行" }
}
],
"created": 1722747752,
"model": "Free",
"object": "chat.completion",
"usage": {}
}