【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]
相关推荐
醒了就刷牙11 分钟前
67 自注意力_by《李沐:动手学深度学习v2》pytorch版
人工智能·pytorch·深度学习
sp_fyf_202418 分钟前
[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
人工智能·深度学习·神经网络·语言模型·自然语言处理
sp_fyf_202420 分钟前
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
人工智能·神经网络·算法·语言模型·自然语言处理
萱仔学习自我记录21 分钟前
常用大语言模型简单介绍
人工智能·python·自然语言处理·nlp
龙的爹233324 分钟前
论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调
人工智能·gpt·语言模型·自然语言处理·nlp·prompt·llama
黄交大彭于晏25 分钟前
大语言模型简介
人工智能·语言模型·自然语言处理
CM莫问26 分钟前
大语言模型入门(三)——提示词编写注意事项
人工智能·语言模型·自然语言处理·prompt·kimi
奈斯。zs29 分钟前
yjs11——pandas运算
人工智能·python·机器学习·pandas
SEU-WYL33 分钟前
基于深度学习的视频生成
人工智能·深度学习·音视频
bylander1 小时前
【AI学习】Mamba学习(一):总体架构
人工智能·深度学习·学习·架构