From b1abafeb501c4b2e501471869aec9074d7021e7e Mon Sep 17 00:00:00 2001 From: wvivi2023 Date: Thu, 7 Dec 2023 14:37:55 +0800 Subject: [PATCH] commit 0.2.6 config --- .github/.DS_Store | Bin 0 -> 6148 bytes .gitignore | 2 +- configs/.DS_Store | Bin 0 -> 6148 bytes configs/basic_config.py | 22 +++ configs/kb_config.py | 122 +++++++++++++++ configs/model_config.py | 260 ++++++++++++++++++++++++++++++++ configs/prompt_config.py | 124 +++++++++++++++ configs/server_config.py | 132 ++++++++++++++++ nltk_data/.DS_Store | Bin 0 -> 6148 bytes server/knowledge_base/.DS_Store | Bin 0 -> 6148 bytes tests/.DS_Store | Bin 0 -> 6148 bytes webui_pages/.DS_Store | Bin 0 -> 6148 bytes 12 files changed, 661 insertions(+), 1 deletion(-) create mode 100644 .github/.DS_Store create mode 100644 configs/.DS_Store create mode 100644 configs/basic_config.py create mode 100644 configs/kb_config.py create mode 100644 configs/model_config.py create mode 100644 configs/prompt_config.py create mode 100644 configs/server_config.py create mode 100644 nltk_data/.DS_Store create mode 100644 server/knowledge_base/.DS_Store create mode 100644 tests/.DS_Store create mode 100644 webui_pages/.DS_Store diff --git a/.github/.DS_Store b/.github/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e89adc39645f828364a7b51de8ce957691cdb721 GIT binary patch literal 6148 zcmeHK!AiqG5Pe&FXceSKkNXS#gR~?EK|zR~m0GG`LW)It%?Eh#>Ie8I{)Hdoo1LXL zBwD;kk(n_2Hj|m%$y<`y1>mMn^D!_2FrW(dhHN@So{P4m7cKJ8g)uT*;}RLpanbTN z!#*+~Yj=!OGWN^c>V2|1X8!A# z<^6VEo>O3mH7Y#f0SgrDt+8rm-}~tHYUW%&$DBLHE355HfAVbRC*PNeF<=ZB1AD^& zYqrSXNYPqjz!)$FHVnxB!BYj3h_zz)b+8FX0Aio!Anb>|4$+H&m_)1u)-=F`RL3U>h z7z6)`0oPCSbjnwXwYBwfQfoc+hAJX{wc;j(oluJDE2a2^8iaN)9byu(R-}bu8-YNB KHO9c7GVlr1u2WY4 literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index ced8d9e..105fa0c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ *.bak logs /knowledge_base/ -/configs/*.py +#/configs/*.py .vscode/ # below are standard python ignore files diff --git a/configs/.DS_Store b/configs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3d58e201995d6cb445fbfd08820a9c9732ef8821 GIT binary patch literal 6148 zcmeHK%}T>S5T317Q;O1qg2x4~1r63>@e*r&0V8@)iAhszFwKVkSfmtk)~E623-}5? zkF!7ZhgzW*kun3b-|p;8cK6$4Hv<5yJ_v1q5&&4J5_1JCeh}F&bxLx^vVzFeGn(K- z6WY)MZ_1kt|B(T?cSYPS4^nu*z5CohFBtaHAQl07yaZ_+_4>QJZ!EWzUtU?YR;{9S z?Y70x?fd;fukLp*W$R3cIGEJ^;5=##z0$_9Ncw)1w7M!F3R~!MbrB_@7}mug341Em z)g4yBDtM)>(Wp`>b9>(&m-)!vs~(hjwYEPV7p%?gox@Y_F771aQB%tB?NhR5Z~{+Q znX$U~)^?kslWN!6*=)~_XfzBD_!(sD&*Rsl-@L;)ywmpAS*Xd(nD4#YO=6MU;>eTL z>Zwyn3=jjv!2ArDbHpmnA4(C#05P!O49N3=qe^rPW*XJefrUx|5c6nOf_0fo$QW+W zF_>w@9u%fS5p^gtDF)NwXy?YyF_>x8;lNDt!OY0aWGGCHj?d@H9hjq$N@9Q*_|CwR zZkFWze=: + # Failed to establish a new connection: [WinError 10060] + # 则是因为内地和香港的IP都被OPENAI封了,需要切换为日本、新加坡等地 + + # 如果出现WARNING: Retrying langchain.chat_models.openai.acompletion_with_retry.._completion_with_retry in + # 4.0 seconds as it raised APIConnectionError: Error communicating with OpenAI. + # 需要添加代理访问(正常开的代理软件可能会拦截不上)需要设置配置openai_proxy 或者 使用环境遍历OPENAI_PROXY 进行设置 + # 比如: "openai_proxy": 'http://127.0.0.1:4780' + + # 这些配置文件的名字不能改动 + "Azure-OpenAI": { + "deployment_name": "your Azure deployment name", + "model_version": "0701", + "openai_api_type": "azure", + "api_base_url": "https://your Azure point.azure.com", + "api_version": "2023-07-01-preview", + "api_key": "your Azure api key", + "openai_proxy": "", + }, + "OpenAI": { + "model_name": "your openai model name(such as gpt-4)", + "api_base_url": "https://api.openai.com/v1", + "api_key": "your OPENAI_API_KEY", + "openai_proxy": "", + }, + "Anthropic": { + "model_name": "your claude model name(such as claude2-100k)", + "api_key":"your ANTHROPIC_API_KEY", + } +} +ONLINE_LLM_MODEL = { + # 线上模型。请在server_config中为每个在线API设置不同的端口 + # 具体注册及api key获取请前往 http://open.bigmodel.cn + "zhipu-api": { + "api_key": "", + "version": "chatglm_pro", # 可选包括 "chatglm_lite", "chatglm_std", "chatglm_pro" + "provider": "ChatGLMWorker", + }, + # 具体注册及api key获取请前往 https://api.minimax.chat/ + "minimax-api": { + "group_id": "", + "api_key": "", + "is_pro": False, + "provider": "MiniMaxWorker", + }, + # 具体注册及api key获取请前往 https://xinghuo.xfyun.cn/ + "xinghuo-api": { + "APPID": "", + "APISecret": "", + "api_key": "", + "is_v2": False, + "provider": "XingHuoWorker", + }, + # 百度千帆 API,申请方式请参考 https://cloud.baidu.com/doc/WENXINWORKSHOP/s/4lilb2lpf + "qianfan-api": { + "version": "ernie-bot-turbo", # 当前支持 "ernie-bot" 或 "ernie-bot-turbo", 更多的见官方文档。 + "version_url": "", # 也可以不填写version,直接填写在千帆申请模型发布的API地址 + "api_key": "", + "secret_key": "", + "provider": "QianFanWorker", + }, + # 火山方舟 API,文档参考 https://www.volcengine.com/docs/82379 + "fangzhou-api": { + "version": "chatglm-6b-model", # 当前支持 "chatglm-6b-model", 更多的见文档模型支持列表中方舟部分。 + "version_url": "", # 可以不填写version,直接填写在方舟申请模型发布的API地址 + "api_key": "", + "secret_key": "", + "provider": "FangZhouWorker", + }, + # 阿里云通义千问 API,文档参考 https://help.aliyun.com/zh/dashscope/developer-reference/api-details + "qwen-api": { + "version": "qwen-turbo", # 可选包括 "qwen-turbo", "qwen-plus" + "api_key": "", # 请在阿里云控制台模型服务灵积API-KEY管理页面创建 + "provider": "QwenWorker", + }, + + # 百川 API,申请方式请参考 https://www.baichuan-ai.com/home#api-enter + "baichuan-api": { + "version": "Baichuan2-53B", # 当前支持 "Baichuan2-53B", 见官方文档。 + "api_key": "", + "secret_key": "", + "provider": "BaiChuanWorker", + }, +} + + +# 通常情况下不需要更改以下内容 + +# nltk 模型存储路径 +NLTK_DATA_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "nltk_data") + + +VLLM_MODEL_DICT = { + "aquila-7b":"BAAI/Aquila-7B", + "aquilachat-7b":"BAAI/AquilaChat-7B", + + "baichuan-7b": "baichuan-inc/Baichuan-7B", + "baichuan-13b": "baichuan-inc/Baichuan-13B", + 'baichuan-13b-chat':'baichuan-inc/Baichuan-13B-Chat', + # 注意:bloom系列的tokenizer与model是分离的,因此虽然vllm支持,但与fschat框架不兼容 + # "bloom":"bigscience/bloom", + # "bloomz":"bigscience/bloomz", + # "bloomz-560m":"bigscience/bloomz-560m", + # "bloomz-7b1":"bigscience/bloomz-7b1", + # "bloomz-1b7":"bigscience/bloomz-1b7", + + "internlm-7b":"internlm/internlm-7b", + "internlm-chat-7b":"internlm/internlm-chat-7b", + "falcon-7b":"tiiuae/falcon-7b", + "falcon-40b":"tiiuae/falcon-40b", + "falcon-rw-7b":"tiiuae/falcon-rw-7b", + "gpt2":"gpt2", + "gpt2-xl":"gpt2-xl", + "gpt-j-6b":"EleutherAI/gpt-j-6b", + "gpt4all-j":"nomic-ai/gpt4all-j", + "gpt-neox-20b":"EleutherAI/gpt-neox-20b", + "pythia-12b":"EleutherAI/pythia-12b", + "oasst-sft-4-pythia-12b-epoch-3.5":"OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5", + "dolly-v2-12b":"databricks/dolly-v2-12b", + "stablelm-tuned-alpha-7b":"stabilityai/stablelm-tuned-alpha-7b", + "Llama-2-13b-hf":"meta-llama/Llama-2-13b-hf", + "Llama-2-70b-hf":"meta-llama/Llama-2-70b-hf", + "open_llama_13b":"openlm-research/open_llama_13b", + "vicuna-13b-v1.3":"lmsys/vicuna-13b-v1.3", + "koala":"young-geng/koala", + "mpt-7b":"mosaicml/mpt-7b", + "mpt-7b-storywriter":"mosaicml/mpt-7b-storywriter", + "mpt-30b":"mosaicml/mpt-30b", + "opt-66b":"facebook/opt-66b", + "opt-iml-max-30b":"facebook/opt-iml-max-30b", + + "Qwen-7B":"Qwen/Qwen-7B", + "Qwen-14B":"Qwen/Qwen-14B", + "Qwen-7B-Chat":"Qwen/Qwen-7B-Chat", + "Qwen-14B-Chat":"Qwen/Qwen-14B-Chat", + +} diff --git a/configs/prompt_config.py b/configs/prompt_config.py new file mode 100644 index 0000000..059a491 --- /dev/null +++ b/configs/prompt_config.py @@ -0,0 +1,124 @@ +# prompt模板使用Jinja2语法,简单点就是用双大括号代替f-string的单大括号 +# 本配置文件支持热加载,修改prompt模板后无需重启服务。 + + +# LLM对话支持的变量: +# - input: 用户输入内容 + +# 知识库和搜索引擎对话支持的变量: +# - context: 从检索结果拼接的知识文本 +# - question: 用户提出的问题 + +# Agent对话支持的变量: + +# - tools: 可用的工具列表 +# - tool_names: 可用的工具名称列表 +# - history: 用户和Agent的对话历史 +# - input: 用户输入内容 +# - agent_scratchpad: Agent的思维记录 + +PROMPT_TEMPLATES = {} + +PROMPT_TEMPLATES["llm_chat"] = { + "default": "{{ input }}", + + "py": + """ + 你是一个聪明的代码助手,请你给我写出简单的py代码。 \n + {{ input }} + """ + , +} + +PROMPT_TEMPLATES["knowledge_base_chat"] = { + "default": + """ + <指令>你是一个电力公司相关的专家,请完全依据已知信息的内容,先找出与问题相关的信息,然后再根据这些相关信息回答简洁、专业地来回答问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题”,不允许在答案中添加编造成分,不回答与问题无关的内容,请使用中文 +简体回答. + <已知信息>{{ context }}、 + <问题>{{ question }} + """, + "text": + """ + <指令>根据已知信息,简洁和专业的来回答问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题”,答案请使用中文。 + <已知信息>{{ context }}、 + <问题>{{ question }} + """, +} + +PROMPT_TEMPLATES["data_augment"] = { + "default": + """ + <指令>参照原始句子,简洁生成一个与原始句子语义最相似而句子结构又不同于原始句子的一个新句子,答案请使用简体中文,直接给出答案而不用复述原始句子内容,并且新句子有助于提高检索的准确度 + <原始句子>{{question}} + """, +} + +PROMPT_TEMPLATES["search_engine_chat"] = { + "default": + """ + <指令>这是我搜索到的互联网信息,请你根据这些信息进行提取并有调理,简洁的回答问题。如果无法从中得到答案,请说 “无法搜索到能回答问题的内容”。 + <已知信息>{{ context }}、 + <问题>{{ question }} + """, + + "search": + """ + <指令>根据已知信息,简洁和专业的来回答问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题”,答案请使用中文。 + <已知信息>{{ context }}、 + <问题>{{ question }} + """, +} +PROMPT_TEMPLATES["agent_chat"] = { + "default": + """ + Answer the following questions as best you can. If it is in order, you can use some tools appropriately.You have access to the following tools: + + {tools} + + Please note that the "知识库查询工具" is information about the "西交利物浦大学" ,and if a question is asked about it, you must answer with the knowledge base, + Please note that the "天气查询工具" can only be used once since Question begin. + + Use the following format: + Question: the input question you must answer1 + Thought: you should always think about what to do and what tools to use. + Action: the action to take, should be one of [{tool_names}] + Action Input: the input to the action + Observation: the result of the action + ... (this Thought/Action/Action Input/Observation can be repeated zero or more times) + Thought: I now know the final answer + Final Answer: the final answer to the original input question + + + Begin! + history: + {history} + Question: {input} + Thought: {agent_scratchpad} + """, + "ChatGLM": + """ + 请请严格按照提供的思维方式来思考。你的知识不一定正确,所以你一定要用提供的工具来思考,并给出用户答案。 + 你有以下工具可以使用: + {tools} + ``` + Question: 用户的提问或者观察到的信息, + Thought: 你应该思考该做什么,是根据工具的结果来回答问题,还是决定使用什么工具。 + Action: 需要使用的工具,应该是在[{tool_names}]中的一个。 + Action Input: 传入工具的内容 + Observation: 工具给出的答案(不是你生成的) + ... (this Thought/Action/Action Input/Observation can be repeated zero or more times) + Thought: 通过工具给出的答案,你是否能回答Question。 + Final Answer是你的答案 + + 现在,我们开始! + 你和用户的历史记录: + History: + {history} + + 用户开始以提问: + Question: {input} + Thought: {agent_scratchpad} + + """, +} diff --git a/configs/server_config.py b/configs/server_config.py new file mode 100644 index 0000000..d381de6 --- /dev/null +++ b/configs/server_config.py @@ -0,0 +1,132 @@ +import sys +from configs.model_config import LLM_DEVICE + +# httpx 请求默认超时时间(秒)。如果加载模型或对话较慢,出现超时错误,可以适当加大该值。 +HTTPX_DEFAULT_TIMEOUT = 300.0 + +# API 是否开启跨域,默认为False,如果需要开启,请设置为True +# is open cross domain +OPEN_CROSS_DOMAIN = False + +# 各服务器默认绑定host。如改为"0.0.0.0"需要修改下方所有XX_SERVER的host +DEFAULT_BIND_HOST = "0.0.0.0" if sys.platform != "win32" else "127.0.0.1" + +# webui.py server +WEBUI_SERVER = { + "host": DEFAULT_BIND_HOST, + "port": 8502, +} + +# api.py server +API_SERVER = { + "host": DEFAULT_BIND_HOST, + "port": 7862, +} + +# fastchat openai_api server +FSCHAT_OPENAI_API = { + "host": DEFAULT_BIND_HOST, + "port": 30000, +} + +# fastchat model_worker server +# 这些模型必须是在model_config.MODEL_PATH或ONLINE_MODEL中正确配置的。 +# 在启动startup.py时,可用通过`--model-worker --model-name xxxx`指定模型,不指定则为LLM_MODEL +# 必须在这里添加的模型才会出现在WEBUI中可选模型列表里(LLM_MODEL会自动添加) +FSCHAT_MODEL_WORKERS = { + # 所有模型共用的默认配置,可在模型专项配置中进行覆盖。 + "default": { + "host": DEFAULT_BIND_HOST, + "port": 30002, + "device": LLM_DEVICE, + # False,'vllm',使用的推理加速框架,使用vllm如果出现HuggingFace通信问题,参见doc/FAQ + # vllm对一些模型支持还不成熟,暂时默认关闭 + "infer_turbo": False, + + # model_worker多卡加载需要配置的参数 + "gpus": "0,1,2", # 使用的GPU,以str的格式指定,如"0,1",如失效请使用CUDA_VISIBLE_DEVICES="0,1"等形式指定 + "num_gpus": 3, # 使用GPU的数量 + "max_gpu_memory": "15GiB", # 每个GPU占用的最大显存 + + # 以下为model_worker非常用参数,可根据需要配置 + # "load_8bit": False, # 开启8bit量化 + # "cpu_offloading": None, + # "gptq_ckpt": None, + # "gptq_wbits": 16, + # "gptq_groupsize": -1, + # "gptq_act_order": False, + # "awq_ckpt": None, + # "awq_wbits": 16, + # "awq_groupsize": -1, + # "model_names": [LLM_MODEL], + # "conv_template": None, + # "limit_worker_concurrency": 5, + # "stream_interval": 2, + # "no_register": False, + # "embed_in_truncate": False, + + # 以下为vllm_woker配置参数,注意使用vllm必须有gpu,仅在Linux测试通过 + + # tokenizer = model_path # 如果tokenizer与model_path不一致在此处添加 + # 'tokenizer_mode':'auto', + # 'trust_remote_code':True, + # 'download_dir':None, + # 'load_format':'auto', + # 'dtype':'auto', + # 'seed':0, + # 'worker_use_ray':False, + # 'pipeline_parallel_size':1, + # 'tensor_parallel_size':1, + # 'block_size':16, + # 'swap_space':4 , # GiB + # 'gpu_memory_utilization':0.90, + # 'max_num_batched_tokens':2560, + # 'max_num_seqs':256, + # 'disable_log_stats':False, + # 'conv_template':None, + # 'limit_worker_concurrency':5, + # 'no_register':False, + # 'num_gpus': 1 + # 'engine_use_ray': False, + # 'disable_log_requests': False + + }, + # 可以如下示例方式更改默认配置 + # "baichuan-7b": { # 使用default中的IP和端口 + # "device": "cpu", + # }, + + "zhipu-api": { # 请为每个要运行的在线API设置不同的端口 + "port": 21001, + }, + # "minimax-api": { + # "port": 21002, + # }, + # "xinghuo-api": { + # "port": 21003, + # }, + # "qianfan-api": { + # "port": 21004, + # }, + # "fangzhou-api": { + # "port": 21005, + # }, + # "qwen-api": { + # "port": 21006, + # }, + # "baichuan-api": { + # "port": 21007, + # }, +} + +# fastchat multi model worker server +FSCHAT_MULTI_MODEL_WORKERS = { + # TODO: +} + +# fastchat controller server +FSCHAT_CONTROLLER = { + "host": DEFAULT_BIND_HOST, + "port": 30001, + "dispatch_method": "shortest_queue", +} diff --git a/nltk_data/.DS_Store b/nltk_data/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d3aabd654a575b7e49230f30720558326c10c8eb GIT binary patch literal 6148 zcmeHKJ5Iwu5S=xV2%jPn4W+M;j!$DObAps8Qoag^7+VAyDj$G`OVH4839f~Bvolz+ z9ivnTp_yp+*}HFcpPyIWED^c*an>j55m6U~G1x=3A-JDQBLZzX1Uf%PM)x#cF8YIM z)?i!1Uvz-q-7Zau-(2o%eSc~0<(^%AHW_J_B$H(}K@S#2@%*~_xY)#+ZNbW~d9{4c zHo`E_^FU)-;5Ub=m8>Ua4BxQQ>Wr!$ic39}anfvEPaCVEXZX%~_Ms=ETd29C8+vN0 z3Qo?C+ITf>FRE?hm^Fnza@TbRr(P#(wJ-=-}vbaIiP)#iXXP<3EOZhO4{U$&qBt4Vfe4wwV~$^q9&21$%Z(!I6uaJ<)s sC?gaO<`sfv3NHLs3@&fQ$0$C~9`Xe+QY-|~g0MdV-Uh48fnRmt3-~#4{Qv*} literal 0 HcmV?d00001 diff --git a/server/knowledge_base/.DS_Store b/server/knowledge_base/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ade3c944ea0150564a9278997576446909b0545f GIT binary patch literal 6148 zcmeHK%}T>S5T2<$R4dq{;3con2M}V3R}p&hRP7H|Y)Ppo2p)0~uRem{#fR|fOL+1L zd(`r{x4VOMI#b!Nd#jn#G)elCv=4^7D4mnL zw}W-;;SboeaZ$wwhQ%D0)Q93+ZCUBV`!Y^Z4!8r@vn3i$MX%ifcfcLU z9gy!sgd!LlW{Tm{fhrsUfOT|-KwHidk`o!mhM6MnAXrm@n#y*>U`k!)|R xJe=&c5y~lwgzz%OJOz!g6@x2V@h(aT^heSF#)g?9dJz625NznJi?DQ7FU=ULxXQ%Vq)cM*!d7X zir>s`;Fgo0${4eg?0$E%GdDBe?(K3Aktz=xMWO-`<CdTI#B>^?sW9^xi|hO%~~{; zSah$FI|T1LltKJ1we7v*>|{EUjQbKkzUFmY;}=HLnCVeF-k9U%sZK-c(|{rh=>k_> z>QEc^1F+Du^Vn!F_ekak>!-KA@UkRMGVj&B?0SU1JT*`W*A(hmL`@xNYS5?Z$sR~O z3q5A)d7jj>#A`Yah_RxVU5^Jx+NEm>P{S>PYk8q zq4$iPZ!p%V-APGgJjX;<<_kqhbm%=XC*^B&y<@;JU^9@>w*@}`kLG{>+fMGzG2j^Z zR}83ZrCKSYBy+Z=isQ4^L%T#{VY^tPxS%t~v0U&`%>OHhV9etSpl>kN2o1#j5D*$% K=NR}^2EGC6VB;VF literal 0 HcmV?d00001 diff --git a/webui_pages/.DS_Store b/webui_pages/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2973463600d9542cecb7530f92714016510d3fea GIT binary patch literal 6148 zcmeHKu};G<5IsYN3M%Nx=wHYmgevTad;q0QNfAj?sj67Bu`qy`nGk#dzrcU-&Sy1^ z(w0sLRd>?ebL>0k`AM;3A~O9&8WQ!0r~_vVju6%ukF&Sz!1r{4#?4VuMhhC}S(vo4 zwL=w91^$}?{Oxuqr8~NzoL0WyQCZA{>=i>Rrzqoin3qEy`*?YLKYji_U!RxmlsB7% zN&U_NrlJ$Nrzto+fY}%vGsJ5eg6UlLm^wdXl3Vjv`F_1E`TkNmH