基本信息

公开的服务地址

  https://back.brath.cn
  

荔知 AI 提供基于 HTTP 的 API 服务接入。对于开放 API,我们兼容了 OpenAI 的相关 API 的输入和输出。

快速开始

Python 调用方法

对 python 用户,可以简单复用 openai 的 sdk。

  pip install --upgrade 'openai>=1.0'
  

您需要确保使用的 python 版本至少为 3.7.1, openai 的 sdk 版本不低于 1.0.0

我们可以这样简单检验下自己库的版本:

  python -c 'import openai; print("version =",openai.__version__)'
# 输出可能是 version = 1.10.0,表示当前 python 实际使用了 openai 的 v1.10.0 的库
  

一个简单的例子如下:

  from openai import OpenAI

client = OpenAI(
    api_key="API_KEY",
    base_url="https://back.brath.cn/api/open",
)

completion = client.chat.completions.create(
  model="litchi-pro",
  messages=[
    {"role": "user", "content": "你好,1+1等于多少?"}
  ],
  temperature=0.3,
)

print(completion.choices[0].message)
  

其中 API_KEY 需要替换为您在平台上创建的 API Key。

上面的代码中语言模型将用户信息列表作为输入,并将模型生成的信息作为输出返回。 下面是一组简单的实现多轮对话的例子:

  from openai import OpenAI

client = OpenAI(
    api_key="API_KEY",
  base_url="https://back.brath.cn/api/open",
)

history = [
    {"role": "system", "content": "你是荔智,由 荔知AI 提供的人工智能助手。"}
]

def chat(query, history):
    history += [{
        "role": "user",
        "content": query
    }]
    completion = client.chat.completions.create(
        model="litchi-pro",
        messages=history,
        temperature=0.3,
    )
    result = completion.choices[0].message.content
    history += [{
        "role": "assistant",
        "content": result
    }]
    return result

print(chat("地球的自转周期是多少?", history))
print(chat("月球呢?", history))
  

值得注意的是,随着对话的进行,模型每次需要传入的 token 都会线性增加,必要时,需要一些策略进行优化,例如只保留最近几轮对话。

CURL 调用方法

同样的,我们也可以基于 curl 直接调用,实现一致的效果。

  curl https://back.brath.cn/api/open/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
     "model": "litchi-pro",
     "messages": [
        {"role": "user", "content": "你好,1+1等于多少?"}
     ],
     "temperature": 0.3
   }'
  

其中 $API_KEY 部分需要替换为您自己的 API Key。或者在调用前给它设置好环境变量。

API 说明

Chat Completion

请求地址

  POST https://back.brath.cn/api/open/chat/completions
  

请求内容

示例
  {
    "model": "litchi-pro",
    "messages": [
        {
            "role": "system",
            "content": "你是荔智,由 荔知AI 提供的人工智能助手。"
        },
        { "role": "user", "content": "你好,1+1等于多少?" }
    ],
    "temperature": 0.3
}
  
字段说明
字段是否必须说明类型取值
messagesrequired包含迄今为止对话的消息列表List[Dict]这是一个结构体的列表,每个元素类似如下:{"role": "user", "content": "你好"} role 只支持 system,user,assistant 其一,content 不得为空
modelrequiredModel ID, 可以通过 List Models 获取string目前是 litchi-pro,荔知AI-v1-32k,荔知AI-v1-128k 其一
max_tokensoptional聊天完成时生成的最大 token 数。如果到生成了最大 token 数个结果仍然没有结束,finish reason 会是 “length”, 否则会是 “stop”int这个值建议按需给个合理的值,如果不给的话,我们会给一个不错的整数比如 1024。特别要注意的是,这个 max_tokens 是指您期待我们返回的 token 长度,而不是输入 + 输出的总长度。比如对一个 litchi-pro 模型,它的最大输入 + 输出总长度是 8192,当输入 messages 总长度为 4096 的时候,您最多只能设置为 4096,否则我们服务会返回不合法的输入参数( invalid_request_error ),并拒绝回答。如果您希望获得“输入的精确 token 数”,可以使用下面的“计算 Token” API 使用我们的计算器获得计数
temperatureoptional使用什么采样温度,介于 0 和 1 之间。较高的值(如 0.7)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定性float如果设置,值域须为 [0, 1] 我们推荐 0.3,以达到较合适的效果
top_poptional另一种采样方法,即模型考虑概率质量为 top_p 的标记的结果。因此,0.1 意味着只考虑概率质量最高的 10% 的标记。一般情况下,我们建议改变这一点或温度,但不建议 同时改变float默认 1.0
noptional为每条输入消息生成多少个结果int默认为 1,不得大于 5。特别的,当 temperature 非常小靠近 0 的时候,我们只能返回 1 个结果,如果这个时候 n 已经设置并且 > 1,我们的服务会返回不合法的输入参数(invalid_request_error)
presence_penaltyoptional存在惩罚,介于-2.0 到 2.0 之间的数字。正值会根据新生成的词汇是否出现在文本中来进行惩罚,增加模型讨论新话题的可能性float默认为 0
frequency_penaltyoptional频率惩罚,介于-2.0 到 2.0 之间的数字。正值会根据新生成的词汇在文本中现有的频率来进行惩罚,减少模型一字不差重复同样话语的可能性float默认为 0
stopoptional停止词,当全匹配这个(组)词后会停止输出,这个(组)词本身不会输出。最多不能超过 5 个字符串,每个字符串不得超过 32 字节String, List[String]默认 null
streamoptional是否流式返回bool默认 false, 可选 true

返回内容

对非 stream 格式的,返回类似如下:

  {
 "id": "chatcmpl-97GH9n5LJNBB3sWCdHikM4nFRRjG8",
 "object": "chat.completion",
 "created": 1711517887,
 "model": "gpt-3.5-turbo-0125",
 "choices": [
  {
   "index": 0,
   "delta": null,
   "message": {
    "role": "assistant",
    "content": "你好,我是一个智能助手,专门设计用来回答各种问题和提供帮助。我可以回答关于各种主题的问题,帮助你解决问题和获取信息。如果你有任何问题,随时都可以问我哦!"
   },
   "finish_reason": "stop"
  }
 ],
 "usage": {
  "prompt_tokens": 16,
  "completion_tokens": 78,
  "total_tokens": 94
 },
 "warning": null,
 "system_fingerprint": "fp_3bc1b5746c"
}
  

对 stream 格式的,返回类似如下:

  data:{"id":"chatcmpl-97GI0fD2ui22IljqsMBIYFG4ih82x","object":"chat.completion.chunk","created":1711517940,"model":"gpt-3.5-turbo-0125","choices":[{"index":0,"delta":{"role":"assistant","content":""},"message":null,"finish_reason":null}],"plugins":null,"usage":null}

data:{"id":"chatcmpl-97GI0fD2ui22IljqsMBIYFG4ih82x","object":"chat.completion.chunk","created":1711517940,"model":"gpt-3.5-turbo-0125","choices":[{"index":0,"delta":{"content":"你"},"message":null,"finish_reason":null}],"plugins":null,"usage":null}

data:{"id":"chatcmpl-97GI0fD2ui22IljqsMBIYFG4ih82x","object":"chat.completion.chunk","created":1711517940,"model":"gpt-3.5-turbo-0125","choices":[{"index":0,"delta":{"content":"好"},"message":null,"finish_reason":null}],"plugins":null,"usage":null}

.....

data:{"id":"chatcmpl-97GI0fD2ui22IljqsMBIYFG4ih82x","object":"chat.completion.chunk","created":1711517940,"model":"gpt-3.5-turbo-0125","choices":[{"index":0,"delta":{"content":"交"},"message":null,"finish_reason":null}],"plugins":null,"usage":null}

data:{"id":"chatcmpl-97GI0fD2ui22IljqsMBIYFG4ih82x","object":"chat.completion.chunk","created":1711517940,"model":"gpt-3.5-turbo-0125","choices":[{"index":0,"delta":{"content":"流"},"message":null,"finish_reason":null}],"plugins":null,"usage":null}

data:{"id":"chatcmpl-97GI0fD2ui22IljqsMBIYFG4ih82x","object":"chat.completion.chunk","created":1711517940,"model":"gpt-3.5-turbo-0125","choices":[{"index":0,"delta":{"content":"!"},"message":null,"finish_reason":null}],"plugins":null,"usage":null}

data:{"usage":{"completion_tokens":96,"prompt_tokens":25,"total_tokens":121}}

data:[DONE]
  
  👆在荔知开放API流式接口中,完成前的最后一个流式数据为该流式信息所消耗的usage信息。
  

错误说明

下面是主要的几个错误

Error TypeHTTP Status Code详细描述
invalid_authentication_error401鉴权失败请确认
invalid_request_error400这个通常意味着您输入格式有误,包括使用了预期外的参数,比如过大的 temperature,或者 messages 的大小超过了限制。在 message 字段通常会有更多解释
rate_limit_reached_error429您超速了。我们设置了最大并发上限和分钟为单位的次数限制。如果在 429 后立即重试,可能会遇到罚时建议控制并发大小,并且在 429 后 sleep 3 秒
exceeded_current_quota_error429Quota 不够了,请联系管理员加量

部分文档内容借鉴于 KimiAI - (https://platform.moonshot.cn/docs)

Last updated on Brath 29, 2024