本文正在参加「金石计划」
接上文OpenAI Embedding:快速完成聊天机器人(三)如何运用Python完成embedding类似度查找,这篇文章持续讲如何将查找到的类似文本进行提炼,并终究得出问题的答案。
提炼文本
经过调用azure openai服务运用模型 text-davinci-003
完结对文本的提炼,以得到终究的答案。
def do_chat(text):
url = f"{ENDPOINT}/openai/deployments/{MODEL_NAME2}/completions?api-version=2022-12-01"
headers = {"api-key": SUBSCRIPTION_KEY}
data = {
'prompt': text,
'temperature': 0.05,
'max_tokens': 250
}
response = requests.post(url, headers=headers, json=data)
response_json = response.json()
return response_json['choices'][0]['text']
在data变量存储的json中,其间有temperature
,max_tokens
参数要设置,这关系到终究答案的输出。
解释下上图右侧调用OpenAI的参数:
参数 | 参数(英文) | 介绍 | 详情 |
---|---|---|---|
温度 | Temperature | 操控模型的创造力 | 操控随机性。下降温度意味着模型将产生更多重复和确定性的呼应。添加温度会导致更多意外或创造性的呼应。测验调整温度或 Top P,但不要同时调整两者。 |
最大长度(令牌) | Max Length(tokens) | 约束回来呼应文本长度 | 设置每个模型呼应的令牌数量约束。API 支持最多 4000 个令牌,这些令牌在提示(包括体系消息、示例、消息历史记录和用户查询)和模型呼应之间共享。一个令牌大约是典型英文文本的 4 个字符。 |
中止序列 | Stop sequences | 限定呼应在指定回来词后中止持续生成语句 | 使呼应在所需的点中止,例如语句或列表的结束。指定最多四个序列,其间模型将中止在呼应中生成进一步的令牌。回来的文本将不包括中止序列。 |
首要概率 | Top probabilities | 决议模型回来的随机性 | 与温度类似,这操控随机性但运用不同的办法。下降 Top P 将缩小模型的令牌挑选规模,使其更有或许挑选令牌。添加 Top P 将让模型从高概率和低概率的令牌中进行挑选。测验调整温度或 Top P,但不要同时调整两者。 |
频率丢失 | Frequency penalty | 调整回来词的新颖程度 | 依据令牌到目前为止在文本中呈现的频率,按份额削减重复令牌的几率。这下降了在呼应中重复完全相同的文本的或许性。 |
状况赏罚 | presence penalty | 调整回来词的新颖程度 | 削减到目前为止文本中呈现的任何标记重复的或许性。这添加了在呼应中引入新主题的或许性。 |
最佳 | Best of | 挑选生成多个呼应,并回来最佳的呼应 | 生成多个呼应,并仅显示其所有令牌中总概率最大的呼应。未运用的候选项仍会产生运用本钱,因而请谨慎运用此参数,并确保同时设置最大呼应长度和结束触发器的参数。请留意,仅当设置为 1 时,流式处理才有效。 |
呼应前文本 | Pre-response text | 勾选后可以指定在呼应之前输出固定文字 | 在用户输入后和模型呼应之前刺进文本。这有助于为呼应预备模型。 |
呼应后文本 | Post-response text | 勾选后可以指定在回来呼应之后输出固定文字 | 在模型生成的呼应后刺进文本以鼓舞进一步的用户输入,就像对话建模一样。 |
封装Prompt并履行提炼文本
在本来search_docs
函数的基础上,添加Prompt封装和调用do_chat
函数逻辑。记得操控类似度的评分,过滤评分较低的类似文本。
def search_docs(df, user_query, top_n=3, to_print=True):
embedding = get_native_embeddings(user_query)
df["similarities"] = df.search_embeddings.apply(lambda x: cosine_similarity(x, embedding))
results = (
df.sort_values("similarities", ascending=False)
.head(top_n)
)
prompt = ''
for row in results.itertuples():
text = getattr(row, 'text')
similarities = getattr(row, 'similarities')
score = float(similarities)
# 防护,防止不相干的问题,可动态调理分数
if score < 0.8:
continue
prompt += text
print(f"\t{text} (Score: {round(score, 3)})")
# 特殊处理过滤
if len(prompt) == 0:
return "No results found"
prompt += ' 经过上面的内容回答:' + user_query
return do_chat(prompt)
履行成果
Q:破镜效应有哪些使用实践?
过程:找到类似度最高的四条文本
A:建立良好的社会环境:社会环境是破窗效应的重要因素,因而,要想有效地抑制破窗效应,就必须建立良好的社会环境,营建一种文明、调和、安全的社会氛围,让人们可以在良好的社会环境中自由地行使自己的权力,然后削减破窗效应的产生。
留意:这儿回复的文档长度被最大长度(令牌) 参数约束住了,经过调理这个参数可获得更多的回来内容。
下篇文章用 Redis Search 来完成类似度查找。