【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]
相关推荐
学习前端的小z5 分钟前
【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
人工智能·chatgpt·aigc
埃菲尔铁塔_CV算法33 分钟前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR34 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
打羽毛球吗️40 分钟前
机器学习中的两种主要思路:数据驱动与模型驱动
人工智能·机器学习
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠1 小时前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon1 小时前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习