首页 > 其他分享 >OpenAI.Embedding 接口参数说明

OpenAI.Embedding 接口参数说明

时间:2023-06-21 20:00:42浏览次数:56  
标签:Embedding 数据库 接口 OpenAI https openai 文本 向量

引言:对于接口,不了解参数含义,就不知道它能咋用?而了解参数的含义最好有例子,基于这个认知,整理了OpenAI几个主要API的接口参数说明。

OpenAI的Embeddings接口主要用于将自然语言文本转换为向量表示,以便计算机可以更轻松地对文本进行处理和分析。

这些向量表示可以捕捉到文本中的语义和语法信息。使用这些嵌入向量,可以进行词汇相似性比较、文本分类、情感分析、命名实体识别、机器翻译等各种NLP任务。

在实际应用中,OpenAI的Embeddings接口可以用于各种场景,如智能客服、智能搜索、广告推荐、社交媒体分析等。在这些场景下,文本数据是非常丰富和复杂的,使用嵌入向量可以使得计算机更好地理解和处理这些文本数据。

参数说明

通用的参数可以看OpenAI.Completion 接口参数说明,下面我们只介绍不同的注意点。

参数 model

官方建议使用 text-embedding-ada-002 这个模型。
https://platform.openai.com/docs/guides/embeddings/what-are-embeddings

按照https://openai.com/blog/new-and-improved-embedding-model这里的分析,
这个模型比以前:性能更高,支持更长的token,价格更低。
不过在文本分类场景下,性能略差点,建议这种场景下进行对比后使用。

Key

Value

模型名称

MODEL NAME

text-embedding-ada-002

知识截止时间

2021年9月(ChatGPT/GPT4都是这个)

分词器

TOKENIZER

cl100k_base

最大输入Tokens

MAX INPUT TOKENS

8191

输出向量维度

OUTPUT DIMENSIONS

1536

价格

$0.0004 / 1K tokens

参数 input

输入参数input支持传入一个字符串或一个字符串列表。

如果传入一个字符串列表,则会将所有字符串拼接起来形成一个大字符串,然后进行嵌入表示计算。

所以长度8192的限制,这是所有字符串拼接后的总长度限制。

例:比较两段文本的相似度

可以使用多种方法来比较Embeddings出来的两个向量的相似度,其中一种常用的方法是计算它们之间的余弦相似度,下面是例子:

import openai
import numpy as np

# 首先需要设置OpenAI的API密钥
openai.api_key = "YOUR_API_KEY"

# 定义要比较的两段文本
text1 = "The cat jumped over the lazy dog."
text2 = "The quick brown fox jumps over the lazy dog."

# 使用GPT-2模型对两段文本进行嵌入表示
embedding1 = openai.Embedding.create(model="text-embedding-ada-002", document=text1).vector
embedding2 = openai.Embedding.create(model="text-embedding-ada-002", document=text2).vector

# 计算两个向量的余弦相似度
cosine_sim = np.dot(embedding1, embedding2) / (np.linalg.norm(embedding1) * np.linalg.norm(embedding2))

# 输出相似度
print("相似度为:", cosine_sim)

这个例子中,我们使用numpy库中的dot()函数计算两个向量的点积,并使用numpy库中的norm()函数计算向量的范数(即长度),最终计算余弦相似度。

OpenAI的embeddings被规范化为长度 1,这意味着:

  • 余弦相似性的计算速度快,只需使用点积即可,上面的计算可以少一部分。
  • 余弦相似性(Cosine similarity)和欧几里得距离(Euclidean distance)将导致相同的排名。

如何快速检索最近的向量?

为了快速搜索多个向量,建议使用向量数据库。

您可以在https://github.com/openai/openai-cookbook/tree/main/examples/vector_databases找到使用向量数据库和 OpenAI API 的示例。

向量数据库 Milvus

来自国人(上海赜睿信息科技有限公司(Zilliz))的专门设计用于处理输入向量查询的数据库。在https://www.modb.pro/dbRank向量数据库排行榜列第一。

网站:https://milvus.io/ 源码:

技术文档:https://milvus.io/docs/

向量数据库 Pinecone

Pinecone 是一个托管、闭源的向量数据库,使用 Kafka 进行流处理,使用 Kubernetes 集群实现高可用性以及Blob存储。

网站:https://www.pinecone.io/

向量数据库 Qdrant

用Rust编写的开源的,托管/自托管向量搜索引擎和数据库。
网站:https://qdrant.tech/ 源码:https://github.com/qdrant/qdrant

总结

考虑到安全、对话效果、对话时减少胡说八道、成本等因素,目前做专业领域的对话方案,大家都是选择把专业知识库做Embedding,并存在本地向量数据库中。

当用户提问时,根据提问的关键字或向量做本地知识库向量数据库搜索,找到相关几条内容作为Prompt的一部分,再提交给OpenAI.ChatCompletion.create 接口这个方案。并且提交给OpenAI的敏感内容做脱敏,近一步解决安全问题。

标签:Embedding,数据库,接口,OpenAI,https,openai,文本,向量
From: https://blog.51cto.com/u_15588078/6531147

相关文章

  • Delphi调用Asterisk系统AMI接口取得来电号码
       Asterisk 是一个开放源代码的软件VoIPPBX系统, AMI (AsteriskManagerInterface)。是Asterisk的管理接口。通过此接口,可以实现对Asterisk系统的监控和控制。通过调用AMI接口可以灵活的做很多事情,比如调用Asterisk系统AMI接口取得来电号码.在调用接口前,先查看下新......
  • C# 接口获取所有节假日并存入库(批量循环对象操作)
    //每年的1月1号自动更新节假日表varallHolidayStr=BaseHelper.Get_HttpRequest("https://api.jiejiariapi.com/v1/holidays/"+DateTime.Now.ToString("yyyy"));if(allHolidayStr.IsNotNullOrEmpty()){......
  • 靳宇灵 | 金蝶云星空 工序计划 表单ID是:SFC_OperationPlanning的WEBAPI接口 指定工序
    金蝶云星空工序计划表单ID是:SFC_OperationPlanning的WEBAPI接口指定工序开工的接口传参json传怎么写?以下是基于金蝶云星空工序计划系统中SFC_OperationPlanning的WEBAPI接口的指定工序开工的接口传参json示例:Copy{"FormId":"SFC_OperationPlanning","FieldKeys":"Pr......
  • 1688商品详情数据接口、商品列表接口,商品属性接口、商品优惠券接口
    业务背景:大家有探讨稳定1688平台商品详情数据包括:获取商品列表主图、价格、销量,标题,sku的等数据接口完整解决方案。这个引起了我技术挑战的兴趣。目前,自己做了压测,QPS高、出滑块概率极低,API整体稳定,可满足业务场景的性能需求。解决方案: 经讨论封装成item_get-根据ID取商品详情接口......
  • 【淘宝API接口系列】获取sku详细信息Java获取源代码演示
    ​ 淘宝商品SKU详细信息API接口是指通过开放平台提供的API接口,可以根据商品ID和SKUID等参数,获取淘宝商品SKU的详细信息,包括SKU的价格、库存、销售属性、skuUrl、sku图片等。其作用是方便开发者通过调用API接口,获取淘宝商品SKU的详细信息,进而实现商品价格比较、商品数据采集、......
  • API接口技术的使用可以增加软件开发和运行的灵活性,降低软件运行和维护的成本
    随着科技的发展和互联网的普及,越来越多的公司和企业把业务拓展到互联网上,这就需要用到API接口技术。API(ApplicationProgrammingInterface,应用程序接口)是指不同软件系统之间进行数据交流和信息共享的一种方式和规范,它通过标准化的接口实现不同系统之间的数据传递和协作,是构建应用......
  • java+rest方式写一个邮件发送接口
     1<!--发邮件-->2<dependency>3<groupId>org.springframework.boot</groupId>4<artifactId>spring-boot-starter-mail</artifactId>5</dependency>67<dep......
  • Springboot api的controller如何接口一个List<Object>参数
    1.正常情况下,你可能会这样写:@PostMapping("/delete")@ApiOperation("Deletelistdata")@ResponseStatus(HttpStatus.OK)@ResponseBodypublicDBUpdateStatusdeleteTestCaseDatas(List<TestCaseInfo>testCaseInfoList){......
  • Rust语言 - 接口设计的建议之受约束(Constrained)
    Rust语言-接口设计的建议之受约束(Constrained)RustAPI指南GitHub:https://github.com/rust-lang/api-guidelinesRustAPI指南中文:https://rust-chinese-translation.github.io/api-guidelines/RustAPI指南:https://rust-lang.github.io/api-guidelines/受约束(Constrai......
  • pytest + yaml 框架 -40.录制接口转 yaml 用例实现
    前言pytest+yaml框架基本不用写python代码,只需写yaml文件用例就能实现接口自动化。现在引入接口录制功能,连yaml文件也不用写了,点点点就能生成yaml用例文件了。录制功能在v1.3.4版本上实现pipinstalpytest-yaml-yoyo环境准备录制功能环境没给大家预装,考虑大大家......