【AI大模型】使用Embedding API

一、使用OpenAI API

目前GPT embedding mode有三种,性能如下所示:

模型 每美元页数 MTEB得分 MIRACL得分
text-embedding-3-large 9,615 54.9 64.6
text-embedding-3-small 62,500 62.3 44.0
text-embedding-ada-002 12,500 61.0 31.4
  • MTEB得分为embedding model分类、聚类、配对等八个任务的平均得分。

  • MIRACL得分为embedding model在检索任务上的平均得分。
    从以上三个embedding model我们可以看出text-embedding-3-large有最好的性能和最贵的价格,当我们搭建的应用需要更好的表现且成本充足的情况下可以使用;text-embedding-3-small有着较好的性能跟价格,当我们预算有限时可以选择该模型;而text-embedding-ada-002是OpenAI上一代的模型,无论在性能还是价格都不如及前两者,因此不推荐使用。

    import os
    from openai import OpenAI
    from dotenv import load_dotenv, find_dotenv

    读取本地/项目的环境变量。

    find_dotenv()寻找并定位.env文件的路径

    load_dotenv()读取该.env文件,并将其中的环境变量加载到当前的运行环境中

    如果你设置的是全局的环境变量,这行代码则没有任何作用。

    _ = load_dotenv(find_dotenv())

    如果你需要通过代理端口访问,你需要如下配置

    os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890'
    os.environ["HTTP_PROXY"] = 'http://127.0.0.1:7890'

    def openai_embedding(text: str, model: str=None):
    # 获取环境变量 OPENAI_API_KEY
    api_key=os.environ['OPENAI_API_KEY']
    client = OpenAI(api_key=api_key)

    复制代码
      # embedding model:'text-embedding-3-small', 'text-embedding-3-large', 'text-embedding-ada-002'
      if model == None:
          model="text-embedding-3-small"
    
      response = client.embeddings.create(
          input=text,
          model=model
      )
      return response

    response = openai_embedding(text='要生成 embedding 的输入文本,字符串形式。')

API返回的数据为json格式,除object向量类型外还有存放数据的data、embedding model 型号model以及本次 token 使用情况usage等数据,具体如下所示:

复制代码
{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [
        -0.006929283495992422,
        ... (省略)
        -4.547132266452536e-05,
      ],
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

我们可以调用response的object来获取embedding的类型。

print(f'返回的embedding类型为:{response.object}')

返回的embedding类型为:list

二、使用文心千帆API

  • Embedding-V1是基于百度文心大模型技术的文本表示模型,Access token为调用接口的凭证,

  • 使用Embedding-V1时应先凭API Key、Secret Key获取Access token,再通过Access token调用接口来embedding text。同时千帆大模型平台还支持bge-large-zh等embedding model。

    import requests
    import json

    def wenxin_embedding(text: str):
    # 获取环境变量 wenxin_api_key、wenxin_secret_key
    api_key = os.environ['QIANFAN_AK']
    secret_key = os.environ['QIANFAN_SK']

    复制代码
      # 使用API Key、Secret Key向https://aip.baidubce.com/oauth/2.0/token 获取Access token
      url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={0}&client_secret={1}".format(api_key, secret_key)
      payload = json.dumps("")
      headers = {
          'Content-Type': 'application/json',
          'Accept': 'application/json'
      }
      response = requests.request("POST", url, headers=headers, data=payload)
      
      # 通过获取的Access token 来embedding text
      url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/embeddings/embedding-v1?access_token=" + str(response.json().get("access_token"))
      input = []
      input.append(text)
      payload = json.dumps({
          "input": input
      })
      headers = {
          'Content-Type': 'application/json'
      }
    
      response = requests.request("POST", url, headers=headers, data=payload)
    
      return json.loads(response.text)

    text应为List(string)

    text = "要生成 embedding 的输入文本,字符串形式。"
    response = wenxin_embedding(text=text)

同样的我们也可以从response中获取embedding的类型和embedding。

复制代码
print('返回的embedding类型为:{}'.format(response['object']))
print('embedding长度为:{}'.format(len(response['data'][0]['embedding'])))
print('embedding(前10)为:{}'.format(response['data'][0]['embedding'][:10]))

返回的embedding类型为:embedding_list
embedding长度为:384
embedding(前10)为:[0.060567744076251984, 0.020958080887794495, 0.053234219551086426, 0.02243831567466259, -0.024505289271473885, -0.09820500761270523, 0.04375714063644409, -0.009092536754906178, -0.020122773945331573, 0.015808865427970886]

三、使用讯飞星火API

暂未开放

四、使用智谱API

智谱有封装好的SDK,我们调用即可。

复制代码
from zhipuai import ZhipuAI
def zhipu_embedding(text: str):

    api_key = os.environ['ZHIPUAI_API_KEY']
    client = ZhipuAI(api_key=api_key)
    response = client.embeddings.create(
        model="embedding-2",
        input=text,
    )
    return response

text = '要生成 embedding 的输入文本,字符串形式。'
response = zhipu_embedding(text=text)

response为zhipuai.types.embeddings.EmbeddingsResponded类型,我们可以调用object、data、model、usage来查看response的embedding类型、embedding、embedding model及使用情况。

复制代码
print(f'response类型为:{type(response)}')
print(f'embedding类型为:{response.object}')
print(f'生成embedding的model为:{response.model}')
print(f'生成的embedding长度为:{len(response.data[0].embedding)}')
print(f'embedding(前10)为: {response.data[0].embedding[:10]}')

response类型为:<class 'zhipuai.types.embeddings.EmbeddingsResponded'>
embedding类型为:list
生成embedding的model为:embedding-2
生成的embedding长度为:1024
embedding(前10)为: [0.017892399802803993, 0.0644201710820198, -0.009342825971543789, 0.02707476168870926, 0.004067837726324797, -0.05597858875989914, -0.04223804175853729, -0.03003198653459549, -0.016357755288481712, 0.06777040660381317]
相关推荐
兰亭妙微7 小时前
用户体验的真正边界在哪里?对的 “认知负荷” 设计思考
人工智能·ux
13631676419侯7 小时前
智慧物流与供应链追踪
人工智能·物联网
TomCode先生7 小时前
MES 离散制造核心流程详解(含关键动作、角色与异常处理)
人工智能·制造·mes
zd2005727 小时前
AI辅助数据分析和学习了没?
人工智能·学习
johnny2337 小时前
强化学习RL
人工智能
乌恩大侠7 小时前
无线网络规划与优化方式的根本性变革
人工智能·usrp
放羊郎7 小时前
基于萤火虫+Gmapping、分层+A*优化的导航方案
人工智能·slam·建图·激光slam
王哈哈^_^7 小时前
【数据集+完整源码】水稻病害数据集,yolov8水稻病害检测数据集 6715 张,目标检测水稻识别算法实战训推教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
SEOETC8 小时前
数字人技术:虚实交融的未来图景正在展开
人工智能
boonya8 小时前
从阿里云大模型服务平台百炼看AI应用集成与实践
人工智能·阿里云·云计算