本文正在参加「金石计划」

接上文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中,其间有temperaturemax_tokens参数要设置,这关系到终究答案的输出。

OpenAI Embedding:快速实现聊天机器人(四)

解释下上图右侧调用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:破镜效应有哪些使用实践?

过程:找到类似度最高的四条文本

OpenAI Embedding:快速实现聊天机器人(四)

A:建立良好的社会环境:社会环境是破窗效应的重要因素,因而,要想有效地抑制破窗效应,就必须建立良好的社会环境,营建一种文明、调和、安全的社会氛围,让人们可以在良好的社会环境中自由地行使自己的权力,然后削减破窗效应的产生。

留意:这儿回复的文档长度被最大长度(令牌) 参数约束住了,经过调理这个参数可获得更多的回来内容。


下篇文章用 Redis Search 来完成类似度查找。