diff --git a/config.py b/config.py index a756cd7..2a8687d 100644 --- a/config.py +++ b/config.py @@ -84,8 +84,9 @@ 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", 'api2d-gpt-3.5-turbo-16k', "api2d-gpt-4", - "gpt-4", "gpt-4-32k", "azure-gpt-4", "chatglm", "moss", "newbing", "stack-claude"] + "api2d-gpt-3.5-turbo", 'api2d-gpt-3.5-turbo-16k', + "gpt-4", "gpt-4-32k", "azure-gpt-4", "api2d-gpt-4", + "chatglm", "moss", "newbing", "claude-2"] # 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"] @@ -140,12 +141,16 @@ 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_API_KEY = "填入azure openai api的密钥" # 建议直接在API_KEY处填写,该选项即将被弃用 AZURE_ENGINE = "填入你亲手写的部署名" # 读 docs\use_azure.md +# 如果需要使用AZURE(方法二:多个azure模型部署+动态切换)详情请见额外文档 docs\use_azure.md +AZURE_CFG_ARRAY = {} + + # 使用Newbing (不推荐使用,未来将删除) NEWBING_STYLE = "creative" # ["creative", "balanced", "precise"] NEWBING_COOKIES = """ @@ -221,13 +226,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 diff --git a/docs/use_azure.md b/docs/use_azure.md index 4c43a7e..041bc52 100644 --- a/docs/use_azure.md +++ b/docs/use_azure.md @@ -1,3 +1,42 @@ +# 微软Azure云接入指南 + +## 方法一(旧方法,只能接入一个Azure模型) + +- 通过以下教程,获取AZURE_ENDPOINT,AZURE_API_KEY,AZURE_ENGINE,直接修改 config 配置即可。配置的修改方法见本项目wiki。 + +## 方法二(新方法,接入多个Azure模型,并支持动态切换) + +- 在方法一的基础上,注册并获取多组 AZURE_ENDPOINT,AZURE_API_KEY,AZURE_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,免去了注册和网络的问题。 diff --git a/request_llm/bridge_all.py b/request_llm/bridge_all.py index 0bc108b..70e2c43 100644 --- a/request_llm/bridge_all.py +++ b/request_llm/bridge_all.py @@ -484,6 +484,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): diff --git a/request_llm/bridge_chatgpt.py b/request_llm/bridge_chatgpt.py index cb96884..5568b1a 100644 --- a/request_llm/bridge_chatgpt.py +++ b/request_llm/bridge_chatgpt.py @@ -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