同步接口API详情

前言

通用文本向量,是通义实验室基于LLM底座的多语言文本统一向量模型,面向全球多个主流语种,提供高水准的向量服务,帮助开发者将文本数据快速转换为高质量的向量数据。

模型概览

模型中文名

模型英文名

数据类型

向量维度

最大处理token长度

支持语种

通用文本向量

text-embedding-v1

float(32)

1536

2048

中文、英语、西班牙语、法语、葡萄牙语、印尼语。

text-embedding-v2

中文、英语、西班牙语、法语、葡萄牙语、印尼语、日语、韩语、德语、俄罗斯语。

text-embedding-v3

float(32)

1024/768/512

8192

中文、英语、西班牙语、法语、葡萄牙语、印尼语、日语、韩语、德语、俄罗斯语等50+语种

SDK使用

前提条件

调用示例

说明

SDK支持三种输入,分别是字符串、字符串列表和文件

说明

需要使用您的API-KEY替换示例中的 YOUR_DASHSCOPE_API_KEY,代码才能正常运行。

设置API-KEY

 export DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY

输入字符串

    import dashscope
    from http import HTTPStatus
    
    
    def embed_with_str():
        resp = dashscope.TextEmbedding.call(
            model=dashscope.TextEmbedding.Models.text_embedding_v1,
            input='衣服的质量杠杠的,很漂亮,不枉我等了这么久啊,喜欢,以后还来这里买')
        if resp.status_code == HTTPStatus.OK:
            print(resp)
        else:
            print(resp)
    
    
    if __name__ == '__main__':
        embed_with_str()
    
    import java.util.Arrays;
    import java.util.concurrent.Semaphore;
    import com.alibaba.dashscope.common.ResultCallback;
    import com.alibaba.dashscope.embeddings.TextEmbedding;
    import com.alibaba.dashscope.embeddings.TextEmbeddingParam;
    import com.alibaba.dashscope.embeddings.TextEmbeddingResult;
    import com.alibaba.dashscope.exception.ApiException;
    import com.alibaba.dashscope.exception.NoApiKeyException;
    
    public final class Main {
        public static void basicCall() throws ApiException, NoApiKeyException{
            TextEmbeddingParam param = TextEmbeddingParam
            .builder()
            .model(TextEmbedding.Models.TEXT_EMBEDDING_V1)
            .texts(Arrays.asList("风急天高猿啸哀", "渚清沙白鸟飞回", "无边落木萧萧下", "不尽长江滚滚来")).build();
            TextEmbedding textEmbedding = new TextEmbedding();
            TextEmbeddingResult result = textEmbedding.call(param);
            System.out.println(result);
        }
      
        public static void callWithCallback() throws ApiException, NoApiKeyException, InterruptedException{
            TextEmbeddingParam param = TextEmbeddingParam
            .builder()
            .model(TextEmbedding.Models.TEXT_EMBEDDING_V1)
            .texts(Arrays.asList("风急天高猿啸哀", "渚清沙白鸟飞回", "无边落木萧萧下", "不尽长江滚滚来")).build();
            TextEmbedding textEmbedding = new TextEmbedding();
            Semaphore sem = new Semaphore(0);
            textEmbedding.call(param, new ResultCallback<TextEmbeddingResult>() {
    
              @Override
              public void onEvent(TextEmbeddingResult message) {
                System.out.println(message);
              }
              @Override
              public void onComplete(){
                sem.release();
              }
    
              @Override
              public void onError(Exception err){
                System.out.println(err.getMessage());
                err.printStackTrace();
                sem.release();
              }
              
            });
            sem.acquire();
        }
    
      public static void main(String[] args){
        try{
          callWithCallback();
        }catch(ApiException|NoApiKeyException|InterruptedException e){
          e.printStackTrace();
          System.out.println(e);
    
        }
          try {
            basicCall();
        } catch (ApiException | NoApiKeyException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
      }
    }
    

输入字符串列表

    from typing import Generator, List
    import dashscope
    from http import HTTPStatus
    
    
    # 最多支持25条,每条最长支持2048tokens
    DASHSCOPE_MAX_BATCH_SIZE = 25
    
    
    def batched(inputs: List,
                batch_size: int = DASHSCOPE_MAX_BATCH_SIZE) -> Generator[List, None, None]:
        for i in range(0, len(inputs), batch_size):
            yield inputs[i:i + batch_size]
    
    
    def embed_with_list_of_str(inputs: List):
        result = None  # merge the results.
        batch_counter = 0
        for batch in batched(inputs):
            resp = dashscope.TextEmbedding.call(
                model=dashscope.TextEmbedding.Models.text_embedding_v1,
                input=batch)
            if resp.status_code == HTTPStatus.OK:
                if result is None:
                    result = resp
                else:
                    for emb in resp.output['embeddings']:
                        emb['text_index'] += batch_counter
                        result.output['embeddings'].append(emb)
                    result.usage['total_tokens'] += resp.usage['total_tokens']
            else:
                print(resp)
            batch_counter += len(batch)
        print(result)
    
    
    if __name__ == '__main__':
        inputs = ['风急天高猿啸哀', '渚清沙白鸟飞回', '无边落木萧萧下', '不尽长江滚滚来']
        embed_with_list_of_str(inputs)
    
    
    

输入文件

  1. 示例文件如下(文件名称:texts_to_embedding.txt,其中每一行对应一个embedding)

  2. 很不错的一款产品,送人的额,非常喜欢,很不错,好评哦,以后还会多多支持的
    已经吃了,感觉不错。第二次购买,这个价格很实惠,卖家还赠送了美容器和尺子,很愉悦的一次购物。
    衣服的质量杠杠的,很漂亮,不枉我等了这么久啊,喜欢,以后还来这里买,我一次买了四件不到200块钱,真好
    用了一段时间了,感觉比传统的风扇好用,广度大,档数多,静音效果也不错,关键是还很漂亮!
    这个热量低,比意面还低,关键是口感还好,挺好吃,多煮一会一级棒,我的减脂早餐就靠它了
    整体评价:好 使用效果:好 包装与外观:好 三好商品
    电视机很好,我给老爸买的,老人很喜欢,图像清晰,音质很好,老人喜欢我满意。
    宝贝很轻巧,打的时候网弹力很足,儿子非常喜欢,五分好评,还送了羽毛球噢!
    终于装上,风很大,热的还可以,排风声音不小,安装的师傅说不能直吹,安装的时候非常满意,最后还帮忙把棚顶给擦干净了,非常感谢。
    颜色很美。就是别人的盒子都是平整的,唯独我的盒子有很严重的压痕。本来想直接用这个盒子装胶带的..现在这个样子强迫症看着实在很糟心。压成这样要么包装有问题,要么本来产品就有问题。而卖家一直在甩锅快递。由于包裹是被家里人拆开的,所以我也不知道是什么样子的,不好跟卖家掰扯。但我看别的人都是纸盒装的,想来我这个也是纸盒装的。那么排除包装的原因的话,很可能就是寄过来的就是个瑕疵品。比起同样今天到货的另一家,有个小瑕疵立马给我补寄了一个,这家的处理方式真的..换货..或者直接道歉说疏忽我都接受的。甩锅真的不能忍。本来还给好几个人推了这家店...就挺失望的 以后应该不会来了。这坚定的甩锅态度我也不点退换了..请不要给我打电话改评,谢谢。
  3. 代码如下:

  4. from http import HTTPStatus
    from dashscope import TextEmbedding
    
    
    def embed_with_file_content():
        # 文件中最多支持25条,每条最长支持2048tokens
        with open('tests_to_embedding.txt', 'r', encoding='utf-8') as f:
            resp = TextEmbedding.call(
                model=TextEmbedding.Models.text_embedding_v1,
                input=f)
            if resp.status_code == HTTPStatus.OK:
                print(resp)
            else:
                print(resp)
    
    
    if __name__ == '__main__':
        embed_with_file_content()
    

输出示例

{
    "status_code": 200, // 200 indicate success otherwise failed.
    "request_id": "fd564688-43f7-9595-b986-737c38874a40", // The request id.
    "code": "", // If failed, the error code.
    "message": "", // If failed, the error message.
    "output": {
        "embeddings": [ // embeddings
            {
                "embedding": [ // one embedding output
                    -3.8450357913970947, ...,
                    3.2640624046325684
                ],
                "text_index": 0 // the input index.
            }
        ]
    },
    "usage": {
        "total_tokens": 3 // the request tokens.
    }
}

参数详解

  1. 请求参数

    参数名称

    必选

    示例值

    描述

    model

    text-embedding-v2

    • 取值:调用的模型名称,可以选择text-embedding-v1或者text-embedding-v2

    • 说明:代表模型的英文名称

    input

    衣服的质量杠杠的,很漂亮,不枉我等了这么久啊,喜欢,以后还来这里买

    • 取值:input可以是字符串,字符串列表, 或者打开的文件(需要embedding的内容,1行一条)

    • 说明:

      • input是字符串时最长支持2048tokens

      • input是字符串列表时最多支持25条,每条最长支持2048tokens

        说明

        text-embedding-v3模型input是字符串列表时最多支持6条,每条最长支持8192tokens

      • input是文件时最多支持25条,每条最长支持2048tokens

        说明

        ext-embedding-v3模型input是字符串列表时最多支持6条,每条最长支持8192tokens

    text_type

    query

    • 取值:query 或者 document,默认值为 document

    • 说明:文本转换为向量后可以应用于检索、聚类、分类等下游任务,对检索这类非对称任务为了达到更好的检索效果建议区分查询文本(query)和底库文本(document)类型, 聚类、分类等对称任务可以不用特殊指定,采用系统默认值"document"即可

    dimension

    1024

    • 取值:1024, 768, 512

    • 说明:用户指定输出向量维度只适用于text-embedding-v3模型, 用户指定的值只能在1024,768, 512三个值之间选取,默认值1024

    output_type

    dense

    • 取值:dense, sparse, dense&sparse

    • 说明:用户指定输出离散向量表示只适用于text-embedding-v3模型, 默认取dense,只输出连续向量

  2. 响应参数

    字段

    类型

    描述

    示例值

    output.embeddings

    Array

    本次请求的算法输出内容,是一个由结构组成的数组,每一个数组中包含一个对应的输入 text 的算法输出内容。

    {
      "embeddings": [
        {
          "text_index": 0,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ... 省略
          ]
        },
        {
          "text_index": 1,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ... 省略
          ]
        },
        {
          "text_index": 2,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ... 省略
          ]
        },
        {
          "text_index": 3,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ... 省略
          ]
        }
      ]
    }

    output.embeddings.text_index

    Integer

    本结构中的算法结果对应的输入文字在输入数组中的索引值。

    0,1,2,3...

    output.embeddings.embedding

    Array

    对应字符串的算法输出 embedding,java sdk统一转换为Double,参考模型输出类型,进行比较的数据转换。

    [
      -0.006929283495992422,
      -0.005336422007530928,
      ... 省略
    ]

    output.embeddings.sparse_embedding

    Array

    对应字符串的算法输出的离散向量表示 (sparse embedding)

    说明

    sparse_embedding仅适用于V3

    [
        {
            "index": 120707,
            "value": 1.0751,
            "token": "通用"
        },
        {
            "index": 189061,
            "value": 1.1918,
            "token": "文本"
        },
        {
            "index": 2110,
            "value": 1.1168,
            "token": "向"
        },
        {
            "index": 3272,
            "value": 1.0073,
            "token": "量"
        }
    ]

    usage.input_tokens

    Integer

    本次请求输入内容的 token 数目,算法的计量是根据用户输入字符串被模型tokenizer解析之后对应的token 数目来进行。

    12

    request_id

    String

    本次请求的系统唯一码

    7574ee8f-38a3-4b1e-9280-11c33ab46e51

java sdk输出字段考虑兼容性为double类型,可以按照模型输出类型转换为对应精度数据。

HTTP调用

说明

本模型还可通过HTTP的方式进行调用,以适用更灵活的业务开发,下方示例提供了CURL命令,其中用POST方式请求了接口:https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

参数详解

  1. 请求参数

    字段

    类型

    传参方式

    必选

    示例值

    描述

    Content-Type

    String

    Header

    application/json

    • 取值:固定值,无需更改

    • 说明:请求类型

    Authorization

    String

    Header

    Bearer d1**2a

    • 取值:需要填入您的API-KEY

    • 说明:API-KEY的获取方式参考上方文档中的调用前准备

    X-DashScope-WorkSpace

    String

    Header

    ws_QTggmeAxxxxx

    指明本次调用需要使用的workspace;需要注意的是,对于子账号Apikey调用,此参数为必选项,子账号必须归属于某个workspace才能调用;对于主账号Apikey此项为可选项,添加则使用对应的workspace身份,不添加则使用主账号身份。

    model

    String

    Body

    text-embedding-v2

    • 取值:调用模型名称,可以选择text-embedding-v1,text-embedding-v2或者text-embedding-v3。

    • 说明:指明需要调用的模型。

    input.texts

    Array

    Body

    ["风急天高猿啸哀",

    "渚清沙白鸟飞回",

    "无边落木萧萧下",

    "不尽长江滚滚来"]

    • 取值:文本内容,需要计算的输入字符串,支持中英文。

    • 说明:支持多条文本输入,每次请求最多 25 条;每一条最长支持 2048 tokens。(该说明只适用于V1V2)

    说明

    text-embedding-v3模型input是字符串列表时最多支持6条,每条最长支持8192tokens

    parameters.text_type

    String

    Body

    "text_type": "query"

    • 取值:query 或者 document,默认值为 document

    • 说明:文本转换为向量后可以应用于检索、聚类、分类等下游任务,对检索这类非对称任务为了达到更好的检索效果建议区分查询文本(query)和底库文本(document)类型, 聚类、分类等对称任务可以不用特殊指定,采用系统默认值"document"即可

    parameters.dimension

    Int

    Body

    "dimension": 1024

    • 取值:1024, 768, 512

    • 说明:用户指定输出向量维度只适用于text-embedding-v3模型, 用户指定的值只能在1024,768, 512三个值之间选取,默认值为1024.

    parameters.output_type

    String

    Body

    "output_type": "dense"

    • 取值:dense, sparse, dense&sparse

    • 说明:用户指定输出离散向量表示只适用于text-embedding-v3模型, 默认取dense,只输出连续向量。

  2. 响应参数

    字段

    类型

    描述

    示例值

    output.embeddings

    Array

    本次请求的算法输出内容,是一个由结构组成的数组,每一个数组中包含一个对应的输入 text 的算法输出内容。

    {
      "embeddings": [
        {
          "text_index": 0,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ...省略
          ]
        },
        {
          "text_index": 1,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ...省略
          ]
        },
        {
          "text_index": 2,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ...省略
          ]
        },
        {
          "text_index": 3,
          "embedding": [
            -0.006929283495992422,
            -0.005336422007530928,
            ...省略
          ]
        }
      ]
    }

    output.embeddings.text_index

    Integer

    本结构中的算法结果对应的输入文字在输入数组中的索引值。

    0,1,2,3...

    output.embeddings.embedding

    Array

    对应字符串的算法输出连续向量表示 (dense embedding)。

    [
      -0.006929283495992422,
      -0.005336422007530928,
      ... 省略
    ]

    output.embeddings.sparse_embedding

    Array

    对应字符串的算法输出离散向量表示 (sparse embedding仅适用于V3)。

    usage.total_tokens

    Integer

    本次请求输入内容的 token 数目,算法的计量是根据用户输入字符串被模型tokenizer解析之后对应的token 数目来进行。

    12

    request_id

    String

    本次请求的系统唯一码

    7574ee8f-38a3-4b1e-9280-11c33ab46e51

Curl示例

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header 'Authorization: Bearer <your-dashscope-api-key>' \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v1",
    "input": {
        "texts": [
        "风急天高猿啸哀",
        "渚清沙白鸟飞回", 
        "无边落木萧萧下", 
        "不尽长江滚滚来"
        ]
    },
    "parameters": {
    		"text_type": "query"
    }
}'

响应示例

  1. 调用成功示例

    {
        "output":{
            "embeddings": [
              {
                 "text_index": 0,
                 "embedding": [-0.006929283495992422,-0.005336422007530928, ...]
              }, 
              {
                 "text_index": 1,
                 "embedding": [-0.006929283495992422,-0.005336422007530928, ...]
              },
              {
                 "text_index": 2,
                 "embedding": [-0.006929283495992422,-0.005336422007530928, ...]
              },
              {
                 "text_index": 3,
                 "embedding": [-0.006929283495992422,-0.005336422007530928, ...]
              }
            ]
        },
        "usage":{
            "total_tokens":12
        },
        "request_id":"d89c06fb-46a1-47b6-acb9-bfb17f814969"
    }
  2. 调用异常示例

    {
        "code":"InvalidApiKey",
        "message":"Invalid API-key provided.",
        "request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
    }

    注:在访问请求出错的情况下,输出的结果中会通过 code 和 message 指明出错原因。

状态码说明

大模型服务平台通用状态码请查阅:错误码