增加一个Azure配置的Array

This commit is contained in:
binary-husky 2023-10-27 23:29:18 +08:00
parent d0589209cc
commit 103d05d242
4 changed files with 106 additions and 29 deletions

View File

@ -83,8 +83,11 @@ DEFAULT_FN_GROUPS = ['对话', '编程', '学术', '智能体']
# 模型选择是 (注意: LLM_MODEL是默认选中的模型, 它*必须*被包含在AVAIL_LLM_MODELS列表中 )
LLM_MODEL = "gpt-3.5-turbo" # 可选 ↓↓↓
AVAIL_LLM_MODELS = ["gpt-3.5-turbo-16k", "gpt-3.5-turbo", "azure-gpt-3.5", "api2d-gpt-3.5-turbo",
"gpt-4", "gpt-4-32k", "azure-gpt-4", "api2d-gpt-4", "chatglm", "moss", "newbing", "stack-claude"]
AVAIL_LLM_MODELS = [
"gpt-3.5-turbo-16k", "gpt-3.5-turbo", "azure-gpt-3.5", "api2d-gpt-3.5-turbo",
"gpt-4", "gpt-4-32k", "azure-gpt-4", "api2d-gpt-4",
"chatglm", "moss", "newbing", "stack-claude"
]
# P.S. 其他可用的模型还包括 ["qianfan", "llama2", "qwen", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-16k-0613", "gpt-3.5-random"
# "spark", "sparkv2", "sparkv3", "chatglm_onnx", "claude-1-100k", "claude-2", "internlm", "jittorllms_pangualpha", "jittorllms_llama"]
@ -139,17 +142,15 @@ SLACK_CLAUDE_BOT_ID = ''
SLACK_CLAUDE_USER_TOKEN = ''
# 如果需要使用AZURE 详情请见额外文档 docs\use_azure.md
# 如果需要使用AZURE方法一单个azure模型部署详情请见额外文档 docs\use_azure.md
AZURE_ENDPOINT = "https://你亲手写的api名称.openai.azure.com/"
AZURE_URL_VERSION = 'openai/deployments/{v}/chat/completions?api-version=2023-05-15' # {v}作为占位符
AZURE_API_KEY = "填入azure openai api的密钥" # 建议直接在API_KEY处填写该选项即将被弃用
AZURE_ENGINE_DICT = {
'gpt-35-16k': 1024 * 16,
'gpt-4': 1024 * 8
} # 读 docs\use_azure.md key填入你的部署名value请自行计算模型对应最大Token数如3.5 = 4096 = 1024 * 4即可
AVAIL_LLM_MODELS.extend([f"azure-{i}" for i in AZURE_ENGINE_DICT]) # 自动加入模型列表
AZURE_ENGINE = "填入你亲手写的部署名" # 读 docs\use_azure.md
# 如果需要使用AZURE方法二多个azure模型部署+动态切换)详情请见额外文档 docs\use_azure.md
AZURE_CFG_ARRAY = {}
# 使用Newbing (不推荐使用,未来将删除)
NEWBING_STYLE = "creative" # ["creative", "balanced", "precise"]
@ -222,13 +223,16 @@ NUM_CUSTOM_BASIC_BTN = 4
API_ORG不常用
API_URL_REDIRECT不常用
"azure-gpt-3.5" 等azure模型
"azure-gpt-3.5" 等azure模型单个azure模型不需要动态切换
API_KEY
AZURE_ENDPOINT
AZURE_API_KEY
AZURE_ENGINE
API_URL_REDIRECT
"azure-gpt-3.5" 等azure模型多个azure模型需要动态切换
AZURE_CFG_ARRAY
"spark" 星火认知大模型 spark & sparkv2
XFYUN_APPID
XFYUN_API_SECRET

View File

@ -1,3 +1,42 @@
# 微软Azure云接入指南
## 方法一旧方法只能接入一个Azure模型
- 通过以下教程获取AZURE_ENDPOINTAZURE_API_KEYAZURE_ENGINE直接修改 config 配置即可。配置的修改方法见本项目wiki。
## 方法二新方法接入多个Azure模型并支持动态切换
- 在方法一的基础上,注册并获取多组 AZURE_ENDPOINTAZURE_API_KEYAZURE_ENGINE
- 修改config中的AZURE_CFG_ARRAY配置项按照格式填入多个Azure模型的配置如下所示
```
AZURE_CFG_ARRAY = {
"azure-gpt-3.5": # 第一个模型azure模型必须以"azure-"开头
{
"AZURE_ENDPOINT": "https://你亲手写的api名称.openai.azure.com/",
"AZURE_API_KEY": "cccccccccccccccccccccccccccccccc",
"AZURE_ENGINE": "填入你亲手写的部署名1",
"AZURE_MODEL_MAX_TOKEN": 4096,
},
"azure-gpt-4": # 第二个模型azure模型必须以"azure-"开头
{
"AZURE_ENDPOINT": "https://你亲手写的api名称.openai.azure.com/",
"AZURE_API_KEY": "dddddddddddddddddddddddddddddddd",
"AZURE_ENGINE": "填入你亲手写的部署名2",
"AZURE_MODEL_MAX_TOKEN": 8192,
},
"azure-gpt-3.5-16k": # 第三个模型azure模型必须以"azure-"开头
{
"AZURE_ENDPOINT": "https://你亲手写的api名称.openai.azure.com/",
"AZURE_API_KEY": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"AZURE_ENGINE": "填入你亲手写的部署名3",
"AZURE_MODEL_MAX_TOKEN": 16384,
},
}
```
# 通过微软Azure云服务申请 Openai API
由于Openai和微软的关系现在是可以通过微软的Azure云计算服务直接访问openai的api免去了注册和网络的问题。

View File

@ -48,10 +48,12 @@ class LazyloadTiktoken(object):
return encoder.decode(*args, **kwargs)
# Endpoint 重定向
API_URL_REDIRECT, = get_conf("API_URL_REDIRECT")
API_URL_REDIRECT, AZURE_ENDPOINT, AZURE_ENGINE = get_conf("API_URL_REDIRECT", "AZURE_ENDPOINT", "AZURE_ENGINE")
openai_endpoint = "https://api.openai.com/v1/chat/completions"
api2d_endpoint = "https://openai.api2d.net/v1/chat/completions"
newbing_endpoint = "wss://sydney.bing.com/sydney/ChatHub"
if not AZURE_ENDPOINT.endswith('/'): AZURE_ENDPOINT += '/'
azure_endpoint = AZURE_ENDPOINT + f'openai/deployments/{AZURE_ENGINE}/chat/completions?api-version=2023-05-15'
# 兼容旧版的配置
try:
API_URL, = get_conf("API_URL")
@ -141,6 +143,25 @@ model_info = {
"tokenizer": tokenizer_gpt4,
"token_cnt": get_token_num_gpt4,
},
# azure openai
"azure-gpt-3.5":{
"fn_with_ui": chatgpt_ui,
"fn_without_ui": chatgpt_noui,
"endpoint": azure_endpoint,
"max_token": 4096,
"tokenizer": tokenizer_gpt35,
"token_cnt": get_token_num_gpt35,
},
"azure-gpt-4":{
"fn_with_ui": chatgpt_ui,
"fn_without_ui": chatgpt_noui,
"endpoint": azure_endpoint,
"max_token": 8192,
"tokenizer": tokenizer_gpt35,
"token_cnt": get_token_num_gpt35,
},
# api_2d
"api2d-gpt-3.5-turbo": {
@ -187,21 +208,6 @@ model_info = {
"token_cnt": get_token_num_gpt35,
},
}
# Azure 多模型支持
AZURE_ENDPOINT, AZURE_ENGINE_DICT, AZURE_URL_VERSION = get_conf('AZURE_ENDPOINT', 'AZURE_ENGINE_DICT', 'AZURE_URL_VERSION')
for azure in AZURE_ENGINE_DICT:
if not AZURE_ENDPOINT.endswith('/'): AZURE_ENDPOINT += '/'
azure_endpoint = AZURE_ENDPOINT + str(AZURE_URL_VERSION).replace('{v}', azure)
model_info.update({
f"azure-{azure}": {
"fn_with_ui": chatgpt_ui,
"fn_without_ui": chatgpt_noui,
"endpoint": azure_endpoint,
"max_token": AZURE_ENGINE_DICT[azure],
"tokenizer": tokenizer_gpt35,
"token_cnt": get_token_num_gpt35,
},
})
# -=-=-=-=-=-=- 以下部分是新加入的模型,可能附带额外依赖 -=-=-=-=-=-=-
if "claude-1-100k" in AVAIL_LLM_MODELS or "claude-2" in AVAIL_LLM_MODELS:
@ -469,6 +475,30 @@ if "llama2" in AVAIL_LLM_MODELS: # llama2
except:
print(trimmed_format_exc())
# <-- 用于定义和切换多个azure模型 -->
AZURE_CFG_ARRAY, = get_conf("AZURE_CFG_ARRAY")
if len(AZURE_CFG_ARRAY) > 0:
for azure_model_name, azure_cfg_dict in AZURE_CFG_ARRAY.items():
# 可能会覆盖之前的配置,但这是意料之中的
if not azure_model_name.startswith('azure'):
raise ValueError("AZURE_CFG_ARRAY中配置的模型必须以azure开头")
endpoint_ = azure_cfg_dict["AZURE_ENDPOINT"] + \
f'openai/deployments/{azure_cfg_dict["AZURE_ENGINE"]}/chat/completions?api-version=2023-05-15'
model_info.update({
azure_model_name: {
"fn_with_ui": chatgpt_ui,
"fn_without_ui": chatgpt_noui,
"endpoint": endpoint_,
"azure_api_key": azure_cfg_dict["AZURE_API_KEY"],
"max_token": azure_cfg_dict["AZURE_MODEL_MAX_TOKEN"],
"tokenizer": tokenizer_gpt35, # tokenizer只用于粗估token数量
"token_cnt": get_token_num_gpt35,
}
})
if azure_model_name not in AVAIL_LLM_MODELS:
azure_model_name += [azure_model_name]
def LLM_CATCH_EXCEPTION(f):

View File

@ -23,8 +23,8 @@ import random
# config_private.py放自己的秘密如API和代理网址
# 读取时首先看是否存在私密的config_private配置文件不受git管控如果有则覆盖原config文件
from toolbox import get_conf, update_ui, is_any_api_key, select_api_key, what_keys, clip_history, trimmed_format_exc, is_the_upload_folder
proxies, TIMEOUT_SECONDS, MAX_RETRY, API_ORG = \
get_conf('proxies', 'TIMEOUT_SECONDS', 'MAX_RETRY', 'API_ORG')
proxies, TIMEOUT_SECONDS, MAX_RETRY, API_ORG, AZURE_CFG_ARRAY = \
get_conf('proxies', 'TIMEOUT_SECONDS', 'MAX_RETRY', 'API_ORG', 'AZURE_CFG_ARRAY')
timeout_bot_msg = '[Local Message] Request timeout. Network error. Please check proxy settings in config.py.' + \
'网络错误,检查代理服务器是否可用,以及代理设置的格式是否正确,格式须是[协议]://[地址]:[端口],缺一不可。'
@ -289,7 +289,11 @@ def generate_payload(inputs, llm_kwargs, history, system_prompt, stream):
"Authorization": f"Bearer {api_key}"
}
if API_ORG.startswith('org-'): headers.update({"OpenAI-Organization": API_ORG})
if llm_kwargs['llm_model'].startswith('azure-'): headers.update({"api-key": api_key})
if llm_kwargs['llm_model'].startswith('azure-'):
headers.update({"api-key": api_key})
if llm_kwargs['llm_model'] in AZURE_CFG_ARRAY.keys():
azure_api_key_unshared = AZURE_CFG_ARRAY[llm_kwargs['llm_model']]["AZURE_API_KEY"]
headers.update({"api-key": azure_api_key_unshared})
conversation_cnt = len(history) // 2