This commit is contained in:
Joseph Cheung 2023-02-26 21:20:13 +08:00
parent c23373e072
commit 002cde5c7e
2 changed files with 676 additions and 87 deletions

File diff suppressed because one or more lines are too long

View file

@ -683,50 +683,64 @@ def search():
raw_text_query = None raw_text_query = None
result_container = None result_container = None
original_search_query = "" original_search_query = ""
search_type = "搜索网页"
net_search = True
net_search_str = 'true'
try: try:
search_query, raw_text_query, _, _ = get_search_query_from_webapp(request.preferences, request.form) search_query, raw_text_query, _, _ = get_search_query_from_webapp(request.preferences, request.form)
# search = Search(search_query) # without plugins # search = Search(search_query) # without plugins
try: try:
original_search_query = search_query.query original_search_query = search_query.query
if "模仿" in search_query.query or "扮演" in search_query.query or "你能" in search_query.query or "请推荐" in search_query.query or "帮我" in search_query.query or "写一段" in search_query.query or "写一个" in search_query.query or "请问" in search_query.query or "请给" in search_query.query or "请你" in search_query.query or "请推荐" in search_query.query or "是谁" in search_query.query or "能帮忙" in search_query.query or "介绍一下" in search_query.query or "为什么" in search_query.query or "什么是" in search_query.query or "有什么" in search_query.query or "怎样" in search_query.query or "给我" in search_query.query or "如何" in search_query.query or "谁是" in search_query.query or "查询" in search_query.query or "告诉我" in search_query.query or "查一下" in search_query.query or "找一个" in search_query.query or "什么样" in search_query.query or "哪个" in search_query.query or "哪些" in search_query.query or "哪一个" in search_query.query or "哪一些" in search_query.query or "啥是" in search_query.query or "为啥" in search_query.query or "怎么" in search_query.query: # if "模仿" in search_query.query or "扮演" in search_query.query or "你能" in search_query.query or "请推荐" in search_query.query or "帮我" in search_query.query or "写一段" in search_query.query or "写一个" in search_query.query or "请问" in search_query.query or "请给" in search_query.query or "请你" in search_query.query or "请推荐" in search_query.query or "是谁" in search_query.query or "能帮忙" in search_query.query or "介绍一下" in search_query.query or "为什么" in search_query.query or "什么是" in search_query.query or "有什么" in search_query.query or "怎样" in search_query.query or "给我" in search_query.query or "如何" in search_query.query or "谁是" in search_query.query or "查询" in search_query.query or "告诉我" in search_query.query or "查一下" in search_query.query or "找一个" in search_query.query or "什么样" in search_query.query or "哪个" in search_query.query or "哪些" in search_query.query or "哪一个" in search_query.query or "哪一些" in search_query.query or "啥是" in search_query.query or "为啥" in search_query.query or "怎么" in search_query.query:
if len(search_query.query)>5 and "谁是" in search_query.query: # if len(search_query.query)>5 and "谁是" in search_query.query:
search_query.query = search_query.query.replace("谁是","") # search_query.query = search_query.query.replace("谁是","")
if len(search_query.query)>5 and "是谁" in search_query.query: # if len(search_query.query)>5 and "是谁" in search_query.query:
search_query.query = search_query.query.replace("是谁","") # search_query.query = search_query.query.replace("是谁","")
if len(search_query.query)>5 and not "谁是" in search_query.query and not "是谁" in search_query.query: # if len(search_query.query)>5 and not "谁是" in search_query.query and not "是谁" in search_query.query:
prompt = search_query.query + "\n对以上问题生成一个Google搜索词\n" prompt = "任务:写诗 写故事 写代码 写论文摘要 模仿推特用户 生成搜索广告 回答问题 聊天话题 搜索网页 搜索视频 搜索地图 搜索新闻 搜索食谱 搜索商品 写歌词 写论文 模仿名人 翻译语言 摘要文章 讲笑话 做数学题 搜索图片 播放音乐 查看天气\n1.判断是以上任务的哪一个2.判断是否需要联网回答3.给出搜索关键词\n"
if "今年" in prompt or "今天" in prompt: prompt = prompt + "提问:" + search_query.query + '答案用json数组例如["写诗","","关键词"]来表述\n答案:'
now = datetime.datetime.now() acts = ['写诗', '写故事', '写代码', '写论文摘要', '模仿推特用户', '生成搜索广告', '回答问题', '聊天话题', '搜索网页', '搜索视频', '搜索地图', '搜索新闻', '搜索食谱', '搜索商品', '写歌词', '写论文', '模仿名人', '翻译语言', '摘要文章', '讲笑话', '做数学题', '搜索图片', '播放音乐', '查看天气']
prompt = prompt.replace("今年",now.strftime('%Y年')) if "今年" in prompt or "今天" in prompt:
prompt = prompt.replace("今天",now.strftime('%Y年%m月%d')) now = datetime.datetime.now()
gpt = "" prompt = prompt.replace("今年",now.strftime('%Y年'))
gpt_url = "https://api.openai.com/v1/engines/text-davinci-003/completions" prompt = prompt.replace("今天",now.strftime('%Y年%m月%d'))
gpt_headers = { gpt = ""
"Authorization": "Bearer "+os.environ['GPTKEY'], gpt_url = "https://api.openai.com/v1/engines/text-davinci-003/completions"
"Content-Type": "application/json", gpt_headers = {
} "Authorization": "Bearer "+os.environ['GPTKEY'],
gpt_data = { "Content-Type": "application/json",
"prompt": prompt, }
"max_tokens": 256, gpt_data = {
"temperature": 0.9, "prompt": prompt,
"top_p": 1, "max_tokens": 256,
"frequency_penalty": 0, "temperature": 0.9,
"presence_penalty": 0, "top_p": 1,
"best_of": 1, "frequency_penalty": 0,
"echo": False, "presence_penalty": 0,
"logprobs": 0, "best_of": 1,
"stream": False "echo": False,
} "logprobs": 0,
gpt_response = requests.post(gpt_url, headers=gpt_headers, data=json.dumps(gpt_data)) "stream": False
gpt_json = gpt_response.json() }
if 'choices' in gpt_json: gpt_response = requests.post(gpt_url, headers=gpt_headers, data=json.dumps(gpt_data))
gpt = gpt_json['choices'][0]['text'] gpt_json = gpt_response.json()
for word in gpt.split('\n'): if 'choices' in gpt_json:
if word != "": gpt = gpt_json['choices'][0]['text']
gpt = word.replace("\"","").replace("\'","").replace("","").replace("","").replace("","").replace("","") gpt_judge = []
break for tmpj in gpt.split():
if gpt!="": try:
search_query.query = gpt gpt_judge = json.load(tmpj)
except:pass
if len(gpt_judge)==3 and gpt_judge[0] in acts and gpt_judge[2] != '' and (gpt_judge[1]=='' or gpt_judge[1]=='True' or gpt_judge[1]=='true'):
search_query.query = gpt_judge[2]
search_type = gpt_judge[0]
net_search = True
net_search_str = 'true'
elif len(gpt_judge)==3 and gpt_judge[0] in acts and gpt_judge[2] != '' and (gpt_judge[1]=='' or gpt_judge[1]=='False' or gpt_judge[1]=='false'):
search_type = gpt_judge[0]
net_search = False
net_search_str = 'false'
except Exception as ee: except Exception as ee:
logger.exception(ee, exc_info=True) logger.exception(ee, exc_info=True)
search = SearchWithPlugins(search_query, request.user_plugins, request) # pylint: disable=redefined-outer-name search = SearchWithPlugins(search_query, request.user_plugins, request) # pylint: disable=redefined-outer-name
@ -774,10 +788,10 @@ def search():
tmp_prompt = res['title'] +'\n'+ res['content'] + '\n' + new_url +'\n' tmp_prompt = res['title'] +'\n'+ res['content'] + '\n' + new_url +'\n'
if original_search_query == search_query.query and len( prompt + tmp_prompt +'\n' + "\n以上是关键词 " + original_search_query + " 的搜索结果,删除无关内容,用简体中文分条总结简报,在文中用(链接)标注对应内容来源链接,链接不要放在最后。结果:" ) <1600: if '搜索' in search_type and len( prompt + tmp_prompt +'\n' + "\n以上是关键词 " + original_search_query + " 的搜索结果,删除无关内容,用简体中文分条总结简报,在文中用(链接)标注对应内容来源链接,链接不要放在最后。结果:" ) <1600:
raws.append(tmp_prompt) raws.append(tmp_prompt)
prompt += tmp_prompt +'\n' prompt += tmp_prompt +'\n'
if len( prompt + tmp_prompt +'\n' + "\n以上是任务 " + original_search_query + " 的网络知识。用简体中文完成任务,如果使用了网络知识,删除无关内容,在文中用(链接)标注对应内容来源链接,链接不要放在最后。结果:") <1600: elif len( prompt + tmp_prompt +'\n' + "\n以上是 " + original_search_query + " 的网络知识。用简体中文完成"+ search_type +",如果使用了网络知识,删除无关内容,在文中用(链接)标注对应内容来源链接,链接不要放在最后。结果:") <1600:
prompt += tmp_prompt +'\n' prompt += tmp_prompt +'\n'
if prompt != "": if prompt != "":
gpt = "" gpt = ""
@ -785,9 +799,9 @@ def search():
gpt_headers = { gpt_headers = {
"Content-Type": "application/json", "Content-Type": "application/json",
} }
if original_search_query != search_query.query: if '搜索' in search_type:
gpt_data = { gpt_data = {
"prompt": prompt+"\n以上是任务 " + original_search_query + " 的网络知识。用简体中文完成任务,如果使用了网络知识,删除无关内容,在文中用(链接)标注对应内容来源链接,链接不要放在最后。结果:", "prompt": prompt+"\n以上是 " + original_search_query + " 的网络知识。用简体中文完成"+ search_type +",如果使用了网络知识,删除无关内容,在文中用(链接)标注对应内容来源链接,链接不要放在最后。结果:",
"max_tokens": 1000, "max_tokens": 1000,
"temperature": 0.2, "temperature": 0.2,
"top_p": 1, "top_p": 1,
@ -924,6 +938,8 @@ button.btn_more {
<script> <script>
const original_search_query = "''' + original_search_query.replace('"',"") + r'''" const original_search_query = "''' + original_search_query.replace('"',"") + r'''"
const search_queryquery = "''' + search_query.query.replace('"',"") + r'''" const search_queryquery = "''' + search_query.query.replace('"',"") + r'''"
const search_type = "''' + search_type + r'''"
const net_search = "''' + net_search_str + r'''"
</script><script> </script><script>
//rsa //rsa
function stringToArrayBuffer(str){ function stringToArrayBuffer(str){