文档中心

模型接入

小白开放平台提供外部模型接入功能,接入的模型,包括语言模型(Chat)和嵌入模型(Embedding),必须满足小白的接口规范,并提供可访问地址供内部调用。用户可以在供应商页面基于小白模板新增供应商,并配置模型地址,完成后即可使用外部模型

自定义模型接入 #

  1. 新建模型供应商

    模型供应商是模型的提供者,可以是天壤小白的模型,也可以是外部的模型,需要满足相应模型供应商的接入规范

    image

  2. 选择相应供应商模板, 填入模型供应商信息

    接入的模型必须满足该模型供应商的接口规范,并提供开放平台可访问的调用地址以及其他必要信息

    image

  3. 添加语言模型/嵌入模型 image image

  4. 使用自定义模型 image image

天壤小白模型接入规范 #

天壤小白模型接入规范约定了天壤小白模型供应商的API接口规范,供外部模型供应商参考

  • 通过配置供应商中的模型地址(比如:http://host:port/v1 ),决定调用哪个模型服务
  • 通过约定路由,决定调用哪种模型,比如:
    • 实现 REST 路由 POST /vectors 即可配置嵌入模型(Embedding)
    • 实现 REST 路由 POST /chat/completions 即可配置语言模型(Chat)
  • 通过传入模型名称(model字段,json格式)作为请求参数,决定使用哪个模型(需要模型API内部自行实现)

语言模型 #

语言模型 API 文档 #

地址:POST ${base_url}/chat/completions

请求头:

  • Content-Type: application/json

请求参数:

参数名称参数二级名称类型语义
modelstring模型名称
paramsdict模型参数
max_new_tokensint最大输出token数
temperaturefloat多样性,取值范围:[0, 1.0]
top_pfloat采样比例,取值范围:(0, 1.0]
repetition_penaltyfloat重复控制,取值范围:(1, 2)
top_kint采样范围,取值范围:(1,)
messageslist
rolestring角色,system、assistant 或 user
contentstring正文
streambool是否流式输出

非流式响应参数:

参数名称类型语义
num_query_tokensint请求中文本的token数
choiceslist[dict]对话输出
choices[0].messagedict对话输出消息
choices[0].message.rolestring对话输出消息的角色
choices[0].message.contentstring对话输出消息的正文
choices[0].num_generated_tokensint对话输出消耗的token数
choices[0].finish_reasonstring对话停止原因,包括 stop(正常停止)和length(达到最大长度停止)
elapsedfloat请求耗时,单位:秒

流式响应参数:

  • 每行为一个 json,无前缀,直接用 json 解析
  • 解析格式同非流式响应参数,其中:
    • choices[0].message 未增量 token,非全量
    • choices[0].num_generated_tokens 为累计回答占用的 token 数

语言模型 API 调用示例 #

非流式 #

输入:

curl -X 'POST' \\   ${base_url}/chat/completions \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "messages": [
    {
      "role": "user",
      "content": "hello"
    }
  ],
  "params": {
    "max_new_tokens": 512,
    "temperature": 0.01,
    "top_k": 50,
    "top_p": 0.95,
    "repetition_penalty": 1.05
  },
  "stream": false
}'

输出:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "Hello! How can I help you today?"
      },
      "num_generated_tokens": 10,
      "finish_reason": "stop"
    }
  ],
  "num_query_tokens": 13,
  "elapsed": 0.2654237747192383
}
流式 #

输入:

curl -X 'POST' \
  ${base_url}/chat/completions \\   -H 'accept: application/json' \\   -H 'Content-Type: application/json' \\   -d '{
  "messages": [
    {
      "role": "user",
      "content": "hello"
    }
  ],
  "params": {
    "max_new_tokens": 512,
    "temperature": 0.01,
    "top_k": 50,
    "top_p": 0.95,
    "repetition_penalty": 1.05
  },
  "stream": true
}'

输出:

{"choices": [{"message": {"role": "assistant", "content": "Hello"}, "num_generated_tokens": 1, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.09080147743225098}
{"choices": [{"message": {"role": "assistant", "content": "!"}, "num_generated_tokens": 2, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.10937714576721191}
{"choices": [{"message": {"role": "assistant", "content": " How"}, "num_generated_tokens": 3, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.12925171852111816}
{"choices": [{"message": {"role": "assistant", "content": " can"}, "num_generated_tokens": 4, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.14943981170654297}
{"choices": [{"message": {"role": "assistant", "content": " I"}, "num_generated_tokens": 5, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.16916155815124512}
{"choices": [{"message": {"role": "assistant", "content": " help"}, "num_generated_tokens": 6, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.19025135040283203}
{"choices": [{"message": {"role": "assistant", "content": " you"}, "num_generated_tokens": 7, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.2091517448425293}
{"choices": [{"message": {"role": "assistant", "content": " today"}, "num_generated_tokens": 8, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.2288496494293213}
{"choices": [{"message": {"role": "assistant", "content": "?"}, "num_generated_tokens": 9, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.250154972076416}
{"choices": [{"message": {"role": "assistant", "content": ""}, "num_generated_tokens": 10, "finish_reason": "stop"}], "num_query_tokens": 13, "elapsed": 0.2631406784057617}

嵌入模型 #

嵌入模型 API 文档 #

地址:POST ${base_url}/vectors

请求头:

  • Content-Type: application/json

请求参数:

参数名称参数二级名称类型语义
modelstring模型名称
textstring输入文本
modestring模式,query(单条请求)或passage(整个db),也可不区分,忽略此字段实现即可

响应参数:

参数名称类型语义
vectorList[float]嵌入向量
dimint向量维度
tokensint消耗token
elapsedfloat请求耗时,单位:秒

嵌入模型 API 调用示例 #

输入:

curl -X 'POST' \
  ${base_url}/vectors \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "model": "xiaobai-embedding-002",
  "mode": "query",
  "text": "hello"
}'

输出:

{
  "vector": [
    0.026604672893881798,
    -0.018825825303792953,
    -0.0024815492797642946,
    -0.04342295974493027
  ],
  "dim": 4,
  "tokens": 6,
  "elapsed": 0.06209564208984375
}

© 2024 天壤智能 小白开放平台