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

news2024/9/21 0:41:14

theme: orange

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

接上文OpenAI Embedding:快速实现聊天机器人(三)如何使用Python实现embedding相似度搜索,这篇文章继续讲如何将搜索到的相似文本进行提炼,并最终得出问题的答案。

提炼文本

通过调用azure openai服务使用模型 text-davinci-003完成对文本的提炼,以得到最终的答案。

python 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参数要设置,这关系到最终答案的输出。

image.png

解释下上图右侧调用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函数逻辑。记得控制相似度的评分,过滤评分较低的相似文本。

```python def searchdocs(df, userquery, topn=3, toprint=True):
embedding = getnativeembeddings(userquery)
df["similarities"] = df.search
embeddings.apply(lambda x: cosinesimilarity(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:破镜效应有哪些应用实践?

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

image.png

A:建立良好的社会环境:社会环境是破窗效应的重要因素,因此,要想有效地抑制破窗效应,就必须建立良好的社会环境,营造一种文明、和谐、安全的社会氛围,让人们能够在良好的社会环境中自由地行使自己的权利,从而减少破窗效应的发生。

注意:这儿回复的文档长度被最大长度(令牌) 参数限制住了,通过调节这个参数可获得更多的返回内容。


下篇文章用 Redis Search 来实现相似度搜索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库基础篇 《10.创建和管理表》

1. 基础知识 1.1 一条数据存储的过程 1.2 标识符命名规则 1.3 MySQL中的数据类型 其中&#xff0c;常用的几类类型介绍如下&#xff1a; 2. 创建和管理数据库 2.1 创建数据库 方式1&#xff1a;创建数据库 CREATE DATABASE 数据库名; 方式2&#xff1a;创建数据库并指…

Netty工作模型——网络IO模型的演进,从BIO到NIO到Reactor模型与Netty工作模型

文章目录 一、IO模型1、BIO&#xff08;同步阻塞&#xff09;2、NIO&#xff08;同步非阻塞&#xff09;3、AIO&#xff08;异步非阻塞&#xff09; 二、Reactor模型1、单Reactor单线程2、单Reactor多线程3、主从Reactor多线程 三、Netty工作模型1、Netty工作模型2、Netty入门案…

【Java】『蓝桥杯』10道编程题及答案(三)

系列文章 【Java】『蓝桥杯』10道编程题及答案&#xff08;一&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/130223115 【Java】『蓝桥杯』10道编程题及答案&#xff08;二&#xff09; 本文链接&#xff1a;https://blog.csdn.net/y…

智能座舱域

bosch对车载系统的划分&#xff0c;通常分为5大域&#xff1a;动力域&#xff0c;底盘域&#xff0c;车身域&#xff0c;智能座舱域和adas自动驾驶域。随着ECU集成中央化的发展趋势&#xff0c;大众&#xff0c;华为等巨头将动力域&#xff0c;底盘域和车身域合并为整车控制域&…

Java中将json字符串导出为json文件【详细步骤】

一、概述 请根据具体需求具体改动&#xff0c;此代码需要将前端的数据查询出来&#xff0c;然后进行json字符串的转化 .getCatalogId(id)方法是根据id查出来的内容然后再进行转换成json字符串 也可以直接传入json字符串进行测试 二、代码 ApiOperation("导出为json文件&q…

fzyczn生日赛t1 CZN

fzy&czn生日赛t1 CZN 膜拜hybb首杀 文章目录 fzy&czn生日赛t1 CZN题目背景题目描述分析my codewnags code 题目 题目背景 有一天&#xff0c;czn在机房里面心心念念的pj终于来找他了&#xff0c;pj希望czn能够帮助她来解决一道数学题&#xff0c;czn“十分不乐意”地…

数据库基础篇 《8. 聚合函数》

1. 聚合函数介绍 聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用 1.1 AVG和SUM函数 可以对 数值型数据 使用 AVG 和 SUM 函数。 SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE %REP%; 1.2 MIN…

【Latex排版】使用Latex 排版过程中的那些一二三问题汇总

排版错误问题总结&#xff1a; 1.在【\maketitle】 位置处报错----Missing $ inserted. 2.添加参考文献&#xff0c;编译后显示错误&#xff0c;并且pdf中引用文献处为问号(?) 持续更新问题。。。。。。 近期用Latex整理期刊论文时遇到了不少问题&#xff0c;现把遇到的问题及…

2023 最新最细 vite+vue3+ts 多页面项目架构,建议收藏备用!

&#x1f33b; 前言 本文教程 github地址 。 如果对你有帮助&#xff0c;希望能点个star ⭐️⭐️⭐️ 万分感谢&#x1f60a;&#x1f60a;&#x1f60a; &#x1f9f1; 背景 不久前我司需要重新部署一个前端项目&#xff0c;由我来负责这个项目的搭建。因为这个项目是需要…

python爬虫简介

关于爬虫使用 使用python编写的爬虫脚本&#xff08;程序&#xff09;可以完成定时定量&#xff0c;指定目标&#xff08;Web站点&#xff09;的数据爬取&#xff0c;主要使用多&#xff08;单&#xff09;线程/进程&#xff0c;网络请求库&#xff0c;数据解析&#xff0c;数…

记一次误用顶层await导致的路由渲染错误

背景&#xff1a;顶层 await Async 异步函数能将 Promise 的链式调用的形式&#xff0c;改为同步的形式&#xff0c;对于编写和阅读代码都非常友好。但一直以来都有一个限制&#xff0c;就是 async 和 await 这两个关键字必须成对出现。这就导致了一个问题&#xff0c;想使用 …

【JavaScript速成之路】一文带你掌握DOM基础

&#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f525;系列专栏&#xff1a;【JavaScript速成之路】 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录 前言1&#xff0c;Web API简介1.1&#xff0c;初识Web API1.2&#xff0c;Web A…

TryHackMe-Services(Windows域渗透)

Services 认识团队&#xff01; 今天thm新出的房间&#xff0c;尝尝鲜 端口扫描 循例nmap 把services.local加入hosts Web枚举 发现员工邮箱以及一些员工姓名 从下边的邮箱中&#xff0c;大致可以猜测其他员工账户名跟这个一致的格式 将其保存起来 立足 - AS-REP Roasting…

gin获取url路径参数

package mainimport ("github.com/gin-gonic/gin""net/http" )//获取请求路径的path参数 func main() {r : gin.Default()r.GET("/user/:name/:age", func(c *gin.Context) {//获取路径参数name : c.Param("name")age : c.Param("…

华为云上云实践(一):Windows 环境下对云硬盘 EVS 的创建、挂载和初始化

本文主要讲解华为云云硬盘 EVS 的在 Windows 服务器上创建、挂载及云硬盘初始化等基本操作&#xff0c;快速掌握华为云云硬盘 EVS 操作方法。 文章目录 一、前言二、前期准备&#xff1a;华为云 EVS 采购三、挂载非共享云硬盘 EVS五、初始化云硬盘 EVS 一、前言 华为云 EVS&am…

除了Navicat和DBeaver,还有没有免费又好用的数据库管理工具推荐

最近看到一款数据库Web版工具&#xff0c;SQL Studio&#xff0c;是麦聪软件公司出品的&#xff0c;主打的就是一个&#xff0c;不使用任何的开源代码&#xff0c;产品由中国研发团队100%自主研发。 SQL Studio是一款可创建多个连接的Web版数据库管理开发工具&#xff0c;让你…

RocketMQ的学习历程(二)----MQ基本构架

文章目录 1.MQ的基本要素1.1.消息&#xff08;Message&#xff09;1.2.主题&#xff08;Topic&#xff09;1.3.标签&#xff08;Tag&#xff09;1.4.队列&#xff08;MessageQueue&#xff09;1.5.消息标识&#xff08;MessageId&#xff09; 2.MQ中的主要角色和相关联系2.1.Pr…

列表、栈、队列

列表&#xff08;List&#xff09; 介绍 一系列有序元素的集合。列表中的元素可以是任意类型&#xff0c;允许重复。 可通过索引定位、访问列表中的&#xff08;单个&#xff09;元素&#xff0c;还可使用切片&#xff08;slice&#xff09;操作一次性访问多个元素&#xff…

LINUX系统SSH连接安装Matlab、添加环境变量、后台运行Matlab脚本

安装Matlab 使用MobaXterm软件SSH连接远程服务器&#xff0c;输入IP、用户名和端口号&#xff1a; 输入密码进入&#xff08;密码不显示&#xff09; 网上找一个Matlab安装包&#xff08;iso镜像&#xff09;上传进服务器端&#xff0c;或者直接使用wget指令在服务器端下载镜…

Faster RCNN系列4——生成Proposal与RoI

Faster RCNN系列&#xff1a; Faster RCNN系列1——Anchor生成过程 Faster RCNN系列2——RPN的真值与预测值概述 Faster RCNN系列3——RPN的真值详解与损失值计算 Faster RCNN系列4——生成Proposal与RoI Faster RCNN系列5——RoI Pooling与全连接层 一、生成Proposal 生成Pr…