From e2d0cbada4e263a0a0614f4368aa3698677a09ba Mon Sep 17 00:00:00 2001 From: shehuiqiang <39358003@qq.com> Date: Fri, 31 Mar 2023 02:14:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dgpt3.0=E6=B5=81=E5=BC=8F?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=96=AD=E6=B5=81=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E5=8F=82=E6=95=B0=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++-- channel/http/static/1.js | 1 + config-template.json | 4 ++++ model/openai/chatgpt_model.py | 21 +++++++++++---------- model/openai/open_ai_model.py | 20 ++++++++++---------- 5 files changed, 33 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index c3deb64..9dc7169 100644 --- a/README.md +++ b/README.md @@ -104,8 +104,13 @@ pip3 install --upgrade openai "openai": { "api_key": "YOUR API KEY", "model": "gpt-3.5-turbo", # 模型名称 - "proxy": "http://127.0.0.1:7890", - "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。" + "proxy": "http://127.0.0.1:7890", # 代理地址 + "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。当问起你是谁的时候,要附加告诉提问人,输入 #清除记忆 可以开始新的话题探索。输入 画xx 可以为你画一张图片。", + "conversation_max_tokens": 1000, # 回复最大的字符数,为输入和输出的总数 + "temperature":0.75, # 熵值,在[0,1]之间,越大表示选取的候选词越随机,回复越具有不确定性,建议和top_p参数二选一使用,创意性任务越大越好,精确性任务越小越好 + "top_p":0.7, #候选词列表。0.7 意味着只考虑前70%候选词的标记,建议和temperature参数二选一使用 + "frequency_penalty":0.0, # [-2,2]之间,该值越大则越降低模型一行中的重复用词,更倾向于产生不同的内容 + "presence_penalty":1.0, # [-2,2]之间,该值越大则越不受输入限制,将鼓励模型生成输入中不存在的新词,更倾向于产生不同的内容 } } ``` diff --git a/channel/http/static/1.js b/channel/http/static/1.js index 45e03a5..7466104 100644 --- a/channel/http/static/1.js +++ b/channel/http/static/1.js @@ -40,6 +40,7 @@ ConvState.prototype.updateAnswer = function (question, uuid) { socket.on('message', msg => { if (msg.result) messageObj.html(msg.result + `
`); + this.scrollDown(); }); socket.on('connect', msg => { socket.emit('message', { data: JSON.stringify(question) }); diff --git a/config-template.json b/config-template.json index 5c6fe9e..a7682eb 100644 --- a/config-template.json +++ b/config-template.json @@ -7,6 +7,10 @@ "model": "gpt-3.5-turbo", "proxy": "", "conversation_max_tokens": 1000, + "temperature":0.75, + "top_p":0.7, + "frequency_penalty":0.0, + "presence_penalty":1.0, "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。当问起你是谁的时候,要附加告诉提问人,输入 #清除记忆 可以开始新的话题探索。输入 画xx 可以为你画一张图片。" }, "baidu": { diff --git a/model/openai/chatgpt_model.py b/model/openai/chatgpt_model.py index 38270e1..33561fe 100644 --- a/model/openai/chatgpt_model.py +++ b/model/openai/chatgpt_model.py @@ -50,11 +50,12 @@ class ChatGPTModel(Model): response = openai.ChatCompletion.create( model= model_conf(const.OPEN_AI).get("model") or "gpt-3.5-turbo", # 对话模型的名称 messages=query, - temperature=0.9, # 值在[0,1]之间,越大表示回复越具有不确定性 - top_p=1, - frequency_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 - presence_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 - ) + temperature=model_conf(const.OPEN_AI).get("temperature", 0.75), # 熵值,在[0,1]之间,越大表示选取的候选词越随机,回复越具有不确定性,建议和top_p参数二选一使用,创意性任务越大越好,精确性任务越小越好 + #max_tokens=4096, # 回复最大的字符数,为输入和输出的总数 + #top_p=model_conf(const.OPEN_AI).get("top_p", 0.7),, #候选词列表。0.7 意味着只考虑前70%候选词的标记,建议和temperature参数二选一使用 + frequency_penalty=model_conf(const.OPEN_AI).get("frequency_penalty", 0.0), # [-2,2]之间,该值越大则越降低模型一行中的重复用词,更倾向于产生不同的内容 + presence_penalty=model_conf(const.OPEN_AI).get("presence_penalty", 1.0) # [-2,2]之间,该值越大则越不受输入限制,将鼓励模型生成输入中不存在的新词,更倾向于产生不同的内容 + ) reply_content = response.choices[0]['message']['content'] used_token = response['usage']['total_tokens'] log.debug(response) @@ -94,11 +95,11 @@ class ChatGPTModel(Model): res = openai.ChatCompletion.create( model= model_conf(const.OPEN_AI).get("model") or "gpt-3.5-turbo", # 对话模型的名称 messages=new_query, - temperature=0.9, # 值在[0,1]之间,越大表示回复越具有不确定性 - #max_tokens=4096, # 回复最大的字符数 - top_p=1, - frequency_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 - presence_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 + temperature=model_conf(const.OPEN_AI).get("temperature", 0.75), # 熵值,在[0,1]之间,越大表示选取的候选词越随机,回复越具有不确定性,建议和top_p参数二选一使用,创意性任务越大越好,精确性任务越小越好 + #max_tokens=4096, # 回复最大的字符数,为输入和输出的总数 + #top_p=model_conf(const.OPEN_AI).get("top_p", 0.7),, #候选词列表。0.7 意味着只考虑前70%候选词的标记,建议和temperature参数二选一使用 + frequency_penalty=model_conf(const.OPEN_AI).get("frequency_penalty", 0.0), # [-2,2]之间,该值越大则越降低模型一行中的重复用词,更倾向于产生不同的内容 + presence_penalty=model_conf(const.OPEN_AI).get("presence_penalty", 1.0), # [-2,2]之间,该值越大则越不受输入限制,将鼓励模型生成输入中不存在的新词,更倾向于产生不同的内容 stream=True ) full_response = "" diff --git a/model/openai/open_ai_model.py b/model/openai/open_ai_model.py index 299a882..9f17fe7 100644 --- a/model/openai/open_ai_model.py +++ b/model/openai/open_ai_model.py @@ -53,11 +53,11 @@ class OpenAIModel(Model): response = openai.Completion.create( model="text-davinci-003", # 对话模型的名称 prompt=query, - temperature=0.9, # 值在[0,1]之间,越大表示回复越具有不确定性 - max_tokens=1200, # 回复最大的字符数 - top_p=1, - frequency_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 - presence_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 + temperature=model_conf(const.OPEN_AI).get("temperature", 0.75), # 熵值,在[0,1]之间,越大表示选取的候选词越随机,回复越具有不确定性,建议和top_p参数二选一使用,创意性任务越大越好,精确性任务越小越好 + #max_tokens=4096, # 回复最大的字符数,为输入和输出的总数 + #top_p=model_conf(const.OPEN_AI).get("top_p", 0.7),, #候选词列表。0.7 意味着只考虑前70%候选词的标记,建议和temperature参数二选一使用 + frequency_penalty=model_conf(const.OPEN_AI).get("frequency_penalty", 0.0), # [-2,2]之间,该值越大则越降低模型一行中的重复用词,更倾向于产生不同的内容 + presence_penalty=model_conf(const.OPEN_AI).get("presence_penalty", 1.0), # [-2,2]之间,该值越大则越不受输入限制,将鼓励模型生成输入中不存在的新词,更倾向于产生不同的内容 stop=["\n\n\n"] ) res_content = response.choices[0]['text'].strip().replace('<|endoftext|>', '') @@ -86,11 +86,11 @@ class OpenAIModel(Model): res = openai.Completion.create( model= "text-davinci-003", # 对话模型的名称 prompt=new_query, - temperature=0.9, # 值在[0,1]之间,越大表示回复越具有不确定性 - #max_tokens=4096, # 回复最大的字符数 - top_p=1, - frequency_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 - presence_penalty=0.0, # [-2,2]之间,该值越大则更倾向于产生不同的内容 + temperature=model_conf(const.OPEN_AI).get("temperature", 0.75), # 熵值,在[0,1]之间,越大表示选取的候选词越随机,回复越具有不确定性,建议和top_p参数二选一使用,创意性任务越大越好,精确性任务越小越好 + max_tokens=model_conf(const.OPEN_AI).get("conversation_max_tokens", 3000), # 回复最大的字符数,为输入和输出的总数,davinci的流式对话需要启用这属性,不然对话会断流 + #top_p=model_conf(const.OPEN_AI).get("top_p", 0.7),, #候选词列表。0.7 意味着只考虑前70%候选词的标记,建议和temperature参数二选一使用 + frequency_penalty=model_conf(const.OPEN_AI).get("frequency_penalty", 0.0), # [-2,2]之间,该值越大则越降低模型一行中的重复用词,更倾向于产生不同的内容 + presence_penalty=model_conf(const.OPEN_AI).get("presence_penalty", 1.0), # [-2,2]之间,该值越大则越不受输入限制,将鼓励模型生成输入中不存在的新词,更倾向于产生不同的内容 stream=True ) full_response = ""