资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

大模型API

星河大模型 API 服务

星河大模型 API 是为开发者提供的一套基础的大模型 API 服务,背靠百度智能云千帆平台,提供文心大模型能力。该大模型 API 服务兼容openai-python SDK,开发者可以直接使用原生的 openai-python SDK来调用文心大模型服务。


准备

访问令牌

访问令牌用于 AI Studio 用户进行身份验证,可通过访问令牌向 AI Studio 执行授权范围(如大模型 API 的调用权限,仓库相关的读取访问权限等)指定的特定操作。可前往个人中心的 访问令牌页面 查看个人专属 access token。

Tokens

Tokens 为星河社区上调用大模型SDK或使用大模型应用的最终计量单位,星河为每个开发者提供了100万的免费 Tokens 额度。开发者使用不同的模型会扣除不同数量的Tokens,Token 收支明细可查看使用明细。若Tokens 已消耗完,可购买 Tokens 后再使用。

服务域名

用星河大模型 API 服务的域名地址: https://aistudio.baidu.com/llm/lmapi/v3

在使用 openai-python 调用星河大模型 API 服务时,需要将


安装

# install from PyPI
pip install openai

用法

文生文

import os
from openai import OpenAI

client = OpenAI(
     api_key=os.environ.get("AI_STUDIO_API_KEY"),  # 含有 AI Studio 访问令牌的环境变量,https://aistudio.baidu.com/account/accessToken,
     base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名
)

chat_completion = client.chat.completions.create(
    messages=[
        {'role': 'system', 'content': '你是 AI Studio 实训AI开发平台的开发者助理,你精通开发相关的知识,负责给开发者提供搜索帮助建议。'},
        {'role': 'user', 'content': '你好,请介绍一下AI Studio'}
    ],
    model="ernie-3.5-8k",
)

print(chat_completion.choices[0].message.content)

为了避免将api_key 暴露在代码中,可以使用 python-dotenv 将其添加AI_STUDIO_API_KEY="YOUR_ACCESS_TOKEN"到您的.env文件中。当然,也可以通过api_key="YOUR_ACCESS_TOKEN"直接指定

多轮对话

import os
from openai import OpenAI

def get_response(messages):
    client = OpenAI(
        api_key=os.environ.get("AI_STUDIO_API_KEY"),  # 含有 AI Studio 访问令牌的环境变量,https://aistudio.baidu.com/account/accessToken,
        base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名
    )
    completion = client.chat.completions.create(model="ernie-3.5-8k", messages=messages)
    return completion

messages = [
    {
        "role": "system",
        "content": "你是 AI Studio 开发者助理,你精通开发相关的知识,负责给开发者提供搜索帮助建议。",
    }
]

assistant_output = "您好,我是AI Studio 开发者助理,请问有什么能帮助你的吗?"
print(f"""输入:"结束",结束对话\n""")
print(f"模型输出:{assistant_output}\n")
user_input = ""
while "结束" not in user_input:
    user_input = input("请输入:")
    # 将用户问题信息添加到messages列表中
    messages.append({"role": "user", "content": user_input})
    assistant_output = get_response(messages).choices[0].message.content
    # 将大模型的回复信息添加到messages列表中
    messages.append({"role": "assistant", "content": assistant_output})
    print(f"模型输出:{assistant_output}")
    print("\n")

流式输出

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("AI_STUDIO_API_KEY"),  # 含有 AI Studio 访问令牌的环境变量,https://aistudio.baidu.com/account/accessToken,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名
)

completion = client.chat.completions.create(
    model="ernie-3.5-8k",
    messages=[
        {'role': 'system', 'content': '你是 AI Studio 实训AI开发平台的开发者助理,你精通开发相关的知识,负责给开发者提供搜索帮助建议。'},
        {'role': 'user', 'content': '你好,请介绍一下AI Studio'}
    ],
    stream=True,
)

for chunk in completion:
    print(chunk.choices[0].delta.content or "", end="")

异步调用

import os
from openai import AsyncOpenAI
import asyncio

client = AsyncOpenAI(
    api_key=os.environ.get("AI_STUDIO_API_KEY"),  # 含有 AI Studio 访问令牌的环境变量,https://aistudio.baidu.com/account/accessToken,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名
)

async def main() -> None:
    chat_completion = await client.chat.completions.create(
        messages=[
            {'role': 'system', 'content': '你是 AI Studio 实训AI开发平台的开发者助理,你精通开发相关的知识,负责给开发者提供搜索帮助建议。'},
            {'role': 'user', 'content': '你好,请介绍一下AI Studio'}
        ],
        model="ernie-3.5-8k",
    )
    print(chat_completion.choices[0].message.content)
    

asyncio.run(main())

文生图

import os
from openai import OpenAI
import base64

client = OpenAI(
    api_key=os.environ.get("AI_STUDIO_API_KEY"),  # 含有 AI Studio 访问令牌的环境变量,https://aistudio.baidu.com/account/accessToken,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名
)

# 生成的图片以链接形式返回
images_url = client.images.generate(prompt="一只白猫, 红帽子", model="Stable-Diffusion-XL", response_format="url")
print(images_url.data[0].url)

# 生成的图片以 base64 形式返回
images_base64 = client.images.generate(prompt="一只黑猫, 蓝帽子", model="Stable-Diffusion-XL", response_format="b64_json")
# 保存生成的图片
for i, image in enumerate(images_base64.data):
    with open("image_{}.png".format(i), "wb") as f:
        f.write(base64.b64decode(image.b64_json))

向量

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("AI_STUDIO_API_KEY"),  # 含有 AI Studio 访问令牌的环境变量,https://aistudio.baidu.com/account/accessToken,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名
)

embeddings = client.embeddings.create(
        model="embedding-v1",
        input=[
            "推荐一些美食",
            "给我讲个故事"
        ]
    )
print(embeddings)

支持的模型

# 查询支持的模型列表

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("AI_STUDIO_API_KEY"),  # 含有 AI Studio 访问令牌的环境变量,https://aistudio.baidu.com/account/accessToken,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名
)

models = client.models.list()
for model in models.data:
    print(model.id)

目前支持的模型:

模型名 类型
ernie-3.5-8k 文生文模型
ernie-4.0-8k 文生文模型
ernie-4.0-turbo-8k 文生文模型
ernie-char-8k 文生文模型
ernie-speed-128k 文生文模型
ernie-speed-8k 文生文模型
ernie-tiny-8k 文生文模型
ernie-lite-8k 文生文模型
Stable-Diffusion-XL 文生图模型
embedding-v1 向量模型


参数支持

针对 openai-python 原生不支持的参数,可以通过extra_body 参数传入

文生文

请求参数

body说明

名称 类型 必填 描述 openai-python是否原生支持
model string 模型ID,可选值可从client.models.list() 获取
messages List 聊天上下文信息。说明:
(1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话,例如:
1个成员示例,"messages": [ {"role": "user","content": "你好"}]
3个成员示例,"messages": [ {"role": "user","content": "你好"},{"role":"assistant","content":"需要什么帮助"},{"role":"user","content":"自我介绍下"}]
(2) 最后一个message为当前请求的信息,前面的message为历史对话信息
(3)messages的role说明:
第一条message的role必须是user或system
最后一条message的role必须是user
当第一条message的role为user,role值需要依次为user/function -> assistant -> user/function ...,即奇数位message的role值必须为user或function,偶数位message的role值为assistant,例如: 示例中message中的role值分别为user、assistant、user、assistant、user;奇数位(红框)message中的role值为user,即第1、3、5个message中的role值为user;偶数位(蓝框)值为assistant,即第2、4个message中的role值为assistant image.png
当第一条message的role为system,role值需要依次为system -> user/function -> assistant -> user/function ...
(4)message中的content总长度不能超过对应model的输入字符限制和输入tokens限制,请查看各模型上下文长度说明
stream bool 是否以流式接口的形式返回数据,说明:
(1)beam search模型只能为false
(2)默认false
temperature float 说明:
(1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定
(2)默认0.95,范围 (0, 1.0],不能为0
top_p float 说明:
(1)影响输出文本的多样性,取值越大,生成文本的多样性越强
(2)默认0.7,取值范围 [0, 1.0]
penalty_score float 通过对已生成的token增加惩罚,减少重复生成的现象。说明:
(1)值越大表示惩罚越大
(2)默认1.0,取值范围:[1.0, 2.0]
max_completion_tokens int 指定模型最小输出token数,说明:
(1)取值范围[2, 2048]
response_format string 指定响应内容的格式,说明:
(1)可选值:
json_object:以json格式返回,可能出现不满足效果情况
text:以文本格式返回
(2)如果不填写参数response_format值,默认为text
seed int 说明:
(1)取值范围: (0,2147483647‌),会由模型随机生成,默认值为空
(2)如果指定,系统将尽最大努力进行确定性采样,以便使用相同seed和参数的重复请求返回相同的结果
stop List 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明:
(1)每个元素长度不超过20字符
(2)最多4个元素
frequency_penalty float 说明:
(1)正值根据迄今为止文本中的现有频率对新token进行惩罚,从而降低模型逐字重复同一行的可能性
(2)取值范围:[-2.0, 2.0]
(3)支持以下模型:
ernie-speed-8k、ernie-speed-128k 、ernie-tiny-8k、ernie-char-8k、ernie-lite-8k
presence_penalty float 说明:
(1)正值根据token记目前是否出现在文本中来对其进行惩罚,从而增加模型谈论新主题的可能性
(2)取值范围:[-2.0, 2.0]
(3)支持以下模型: ernie-speed-8k、ernie-speed-128k 、ernie-tiny-8k、ernie-char-8k、ernie-lite-8k

message说明

名称 类型 必填 描述
role string 当前支持以下:
user: 表示用户
assistant: 表示对话助手
system:表示人设
name string message名
content string 对话内容,说明:
(1)不能为空
(2)最后一个message对应的content不能为blank字符,如空格、"\n"、“\r”、“\f”等

响应参数

名称 类型 描述
id string 本次请求的唯一标识,可用于排查问题
object string 回包类型 chat.completion:多轮对话返回
created int 时间戳
model string 模型ID
choices object 说明:当请求参数stream值不同时,返回内容不同
usage usage token统计信息,说明:
(1)同步请求默认返回
(2)会在最后一个chunk返回实际内容,其他chunk返回null

choices说明

名称 类型 描述
index int choice列表中的序号
message message 响应信息,当stream=false时返回
delta delta 响应信息,当stream=true时返回
finish_reason string 输出内容标识,说明:
normal:输出内容完全由大模型生成,未触发截断、替换
stop:输出结果命中入参stop中指定的字段后被截断
length:达到了最大的token数
content_filter:输出内容被截断、兜底、替换为**等
function_call:调用了function call功能
flag int 安全细分类型,说明:
(1)当stream=false,flag值含义如下:
0或不返回:安全
1:低危不安全场景,可以继续对话
2:禁聊:不允许继续对话,但是可以展示内容
3:禁止上屏:不允许继续对话且不能上屏展示
4:撤屏
(2)当stream=true时,返回flag表示触发安全
ban_round int 当flag 不为 0 时,该字段会告知第几轮对话有敏感信息;如果是当前问题,ban_round = -1

delta说明

名称 类型 描述
content string 流式响应内容

usage说明

名称 类型 描述
prompt_tokens int 问题tokens数(包含历史QA)
completion_tokens int 回答tokens数
total_tokens int 总tokens数

message说明

名称 类型 必填 描述
role string 当前支持以下:
user: 表示用户
assistant: 表示对话助手
system:表示人设
name string message名
content string 对话内容,说明:
(1)不能为空
(2)最后一个message对应的content不能为blank字符,如空格、"\n"、“\r”、“\f”等

文生图

请求参数

名称 类型 必填 描述 openai-python是否原生支持
model string 模型ID,可选值可从client.models.list()
prompt string 提示词,即用户希望图片包含的元素。说明: 长度限制为1024字符,建议中文或者英文单词总数量不超过150个
negative_prompt string 反向提示词,即用户希望图片不包含的元素。说明: 长度限制为1024字符,建议中文或者英文单词总数量不超过150个
response_format string 返回生成图像的格式。必须是urlb64_json之一。生成图像后,url7天内有效。
size string 生成图片长宽,说明:
(1)默认值 1024x1024
(2)取值范围如下:
适用头像: ["768x768", "1024x1024", "1536x1536", "2048x2048"]
适用文章配图 :["1024x768", "2048x1536"]
适用海报传单:["768x1024", "1536x2048"]
适用电脑壁纸:["1024x576", "2048x1152"]
适用海报传单:["576x1024", "1152x2048"]
n int 生成图片数量,说明:
(1)默认值为1
(2)取值范围为1-4
(3)单次生成的图片较多及请求较频繁可能导致请求超时
steps int 迭代轮次,说明:
默认值为20
取值范围为[10-50]
style string 生成风格。说明:
(1)默认值为Base
(2)可选值:
Base:基础风格
3D Model:3D模型
Analog Film:模拟胶片
Anime:动漫
Cinematic:电影
Comic Book:漫画
Craft Clay:工艺黏土
Digital Art:数字艺术
Enhance:增强
Fantasy Art:幻想艺术
Isometric:等距风格
Line Art:线条艺术
Lowpoly:低多边形
Neonpunk:霓虹朋克
Origami:折纸
Photographic:摄影
Pixel Art:像素艺术
Texture:纹理
sampler_index string 采样方式,说明:
(1)默认值:Euler a
(2)可选值如下:
Euler
Euler a
DPM++ 2M
DPM++ 2M Karras
LMS Karras
DPM++ SDE
DPM++ SDE Karras
DPM2 a Karras
Heun
DPM++ 2M SDE
DPM++ 2M SDE Karras
DPM2
DPM2 Karras
DPM2 a
LMS
retry_count int 重试次数,默认1次
request_timeout float 请求超时时间,默认60秒
backoff_factor float 请求重试参数,用于指定重试的策略,默认为0
seed integer 随机种子,说明:
不设置时,自动生成随机数
取值范围 [0, 4294967295]
cfg_scale float 提示词相关性,说明:默认值为5,取值范围0-30

响应参数

名称 类型 描述
created int 时间戳
data list(image) 生成图片结果

image说明

名称 类型 描述
b64_json string 图片base64编码内容,当且仅当response_format=b64_json
url string 图片链接,当且仅当response_format=url
index int 序号

向量

请求参数

名称 类型 必填 描述
model str 模型ID,可选值可从client.models.list()
Input List[str] 填写文本,说明:
(1)不能为空List,List的每个成员不能为空字符串
(2)文本数量不超过16
(3)每个文本token数不超过384且长度不超过1000个字符

返回参数

名称 类型 描述
object str 回包类型,固定值“embedding_list”
data List[EmbeddingData] embedding信息,data成员数和文本数量保持一致
usage Usage token统计信息,token数 = 汉字数+单词数*1.3 (仅为估算逻辑)

EmbeddingData说明

名称 类型 描述
object str 固定值"embedding"
embedding List[float] embedding 内容
index int 序号

Usage说明

名称 类型 描述
prompt_tokens int 问题tokens数
total_tokens int tokens总数


错误码

HTTP状态码 类型 错误码 错误信息
400 invalid_request_error malformed_json Invalid JSON
400 invalid_request_error invalid_model model is empty
400 invalid_request_error malformed_json Invalid Argument
400 invalid_request_error malformed_json 返回的具体错误信息
400 invalid_request_error invalid_messages 返回的具体错误信息
400 invalid_request_error characters_too_long the max input characters is xxx
400 invalid_request_error invalid_user_id user_id can not be empty
400 invalid_request_error tokens_too_long Prompt tokens too long
401 access_denied no_parameter_permission 返回的具体错误信息
401 invalid_request_error invalid_model No permission to use the model
401 invalid_request_error invalid_appid No permission to use the appid
401 invalid_request_error invalid_iam_token IAM Certification failed
403 unsafe_request system_unsafe the content of system field is invalid
403 unsafe_request user_setting_unsafe the content of user field is invalid
403 unsafe_request functions_unsafe the content of functions field is invalid
404 invalid_request_error no_such_model
405 invalid_request_error method_not_supported Only POST requests are accepted
429 rate_limit_exceeded rpm_rate_limit_exceeded Rate limit reached for RPM
429 rate_limit_exceeded tpm_rate_limit_exceeded Rate limit reached for TPM
429 rate_limit_exceeded preemptible_rate_limit_exceeded Rate limit reached for preemptible resource
429 rate_limit_exceeded user_rate_limit_exceeded qps request limit by APP ID reached
429 rate_limit_exceeded cluster_rate_limit_exceeded request limit by resouce cluster reached
500 Internal_error internal_error Internal error
500 Internal_error dispatch_internal_error Internal error
上一篇
ComfyUI Custom API
下一篇
工具