目前,火山方舟SDK V3在易用性、功能丰富性、稳定性、性能等各方面远超V1/V2,且已经上线并稳定运行一段时间。火山方舟平台SDK V1/V2 版本将于2024年11月30日正式下线,不再支持调用,2024年11月19日以后创建的推理接入点将不能使用SDK V1/V2访问。建议用户尽快核实SDK版本,并于旧版本下线前参照本迁移指引完成SDK V1/V2至SDK V3版本切换和业务迁移。
如果您使用的是火山方舟官方提供的 SDK,可以通过 import 路径判断:出现 ark
字样的为 V3 API,出现 maas
字样的为 V1/V2 API。各语言import路径如下所示:
语言 | V1/V2 | V3 |
---|---|---|
Python |
|
|
Go |
|
|
Java |
|
|
如果您使用的是自行实现的 HTTP 接口,可以通过域名或 path 前缀判断。各语言域名及path前缀如下所示:
V1 | V2 | V3 | |
---|---|---|---|
域名 | maas-api.ml-platform-cn-beijing.volces.com | maas-api.ml-platform-cn-beijing.volces.com | ark.cn-beijing.volces.com |
path前缀 |
|
|
|
新旧API URL对应表及详细接口参数映射说明如下:
旧版API URL | 新版API URL |
---|---|
api/v1/chat | api/v3/chat/completions |
api/v2/endpoint/endpoint_id/chat | api/v3/chat/completions |
api/v2/endpoint/endpoint_id/embeddings | api/v3/embeddings |
api/v2/endpoint/endpoint_id/tokenization | api/v3/tokenization |
/api/v2/endpoint/endpoint_id/classification | 暂不支持 |
/api/v2/endpoint/endpoint_id/images/quick-gen | 暂不支持 |
/api/v2/endpoint/endpoint_id/images/flex-gen | 暂不支持 |
/api/v2/endpoint/endpoint_id/audio/speech | 暂不支持 |
api/v1/chat | api/v3/chat/completions | 备注 |
---|---|---|
req_id | 通过 http header 支持 | v3 支持 client request id,便于 client 侧日志和 server 侧日志串联,可以通过 |
model.endpoint_id | model | v3 仅支持通过 endpoint id 访问模型,因此去掉了 v1 的 model.name 和 model.version。 |
messages | messages | 如果使用 function calling ,需要根据 Function Calling 使用说明 对请求中的 funciton_call 字段做相应修改。 |
stream | stream | v3 的 流式返回不会默认在最后一个 chunk 返回 usage 信息,如果需要返回,可以指定 |
functions | tools | 如果使用 function calling ,需要根据 Function Calling 使用说明 对请求中的 funciton_call 字段做相应修改。 |
plugins | - | v3 无对标参数。 |
crypto_token | - | v3 无对标参数。 |
parameters.max_new_tokens | max_tokens | v3 允许范围为 [0, 4096]。 |
parameters.min_new_tokens | - | v3 无对标参数,该参数不建议使用。 |
parameters.max_prompt_tokens | - | v3 无对标参数,该参数不建议使用。 |
parameters.temperature | temperature | v3 允许范围为 [0, 1]。 |
do_sample | - | v3 无对标参数,该参数不建议使用。 |
parameters.top_p | top_p | - |
parameters.top_k | - | v3 无对标参数。 |
parameters.frequency_penalty | frequency_penalty | v3 允许范围为 [-2, 2]。 |
parameters.presence_penalty | presence_penalty | v3 允许范围为 [-2, 2]。 |
parameters.repetition_penalty | repetition_penalty | v3 允许范围为 [0, 2]。 |
stop | stop | v3 最多允许输入 4 个字符串。 |
parameters.logprobs | logprobs | v1 |
parameters.guidance | 通过 http header 支持 | 如有定制需求可以通过提交工单咨询。 |
parameters.logit_bias | logit_bias | - |
api/v1/chat | api/v3/chat/completions | 备注 |
---|---|---|
req_id | id | v3 接口 response 返回的 id 是服务端生成的,请求唯一的 id。用户可以通过 client request id 或 request id 提交 badcase。 |
choice | choices | v3 接口返回的 choices 是一个列表,当未指定 n 参数时, |
usage | usage | - |
extra | - | v3 无对标参数。 |
api/v1/chat | api/v3/chat/completions | 备注 |
---|---|---|
req_id | id | v3 接口 response 返回的 id 是服务端生成的,请求唯一的 id。用户可以通过 client request id 或 request id 提交 badcase。 |
choice | choices | v3 接口返回的 choices 是一个列表。 |
usage | usage | - |
extra | - | v3 无对标参数。 |
api/v2/endpoint/:endpoint_id/chat | api/v3/chat/completions | 备注 |
---|---|---|
:endpoint_id | model | v2 在 url path 中,v3 在 body 中通过 model 字段传递。 |
messages | messages | - |
stream | stream | v3 的 流式返回不会默认在最后一个 chunk 返回 usage 信息,如果需要返回,可以指定 |
tools | tools | v3 的 function calling 功能支持更多模型(v1/v2 不支持 doubao-functioncall 系列模型),和更多能力(v1/v2 不支持 tool_choice等功能)。 |
user | user | - |
crypto_token | - | v3 无对标参数。 |
parameters.max_new_tokens | max_tokens | v3 允许范围为 [0, 4096]。 |
parameters.min_new_tokens | - | v3 无对标参数,该参数不建议使用。 |
parameters.max_prompt_tokens | - | v3 无对标参数,该参数不建议使用。 |
parameters.temperature | temperature | v3 允许范围为 [0, 1]。 |
do_sample | - | v3 无对标参数,该参数不建议使用,实际上在 v1/v2 API 上,该参数也是不生效的。 |
parameters.top_p | top_p | - |
parameters.top_k | - | v3 无对标参数。 |
parameters.frequency_penalty | frequency_penalty | v3 允许范围为 [-2, 2]。 |
parameters.presence_penalty | presence_penalty | v3 允许范围为 [-2, 2]。 |
parameters.repetition_penalty | repetition_penalty | v3 允许范围为 [0, 2]。 |
stop | stop | v3 最多允许输入 4 个字符串。 |
parameters.logprobs | logprobs | v2 |
parameters.guidance | 通过 http header 支持 | 如有定制需求可以通过提交工单咨询。 |
parameters.logit_bias | logit_bias | - |
api/v2/endpoint/:endpoint_id/chat | api/v3/chat/completions | 备注 |
---|---|---|
choices | choices | - |
usage | usage | - |
extra | - | v3 无对标参数。 |
api/v2/endpoint/:endpoint_id/chat | api/v3/chat/completions | 备注 |
---|---|---|
choices | choices | v3 兼容 openai 的接口协议,流式场景下,返回的 |
usage | usage | - |
extra | - | v3 无对标参数。 |
api/v2/endpoint/:endpoint_id/embeddings | api/v3/embeddings | 备注 |
---|---|---|
:endpoint_id | model | v2 在 url path 中,v3 在 body 中通过 model 字段传递。 |
input | input | - |
encoding_format | encoding_format | v3 支持 encoding_format 取值为 float 或 base64。 |
user | user | - |
api/v2/endpoint/:endpoint_id/embeddings | api/v3/embeddings | 备注 |
---|---|---|
object | object | - |
data | data | - |
usage | usage | - |
api/v2/endpoint/:endpoint_id/tokenization | api/v3/tokenization | 备注 |
---|---|---|
:endpoint_id | model | v2 在 url path 中,v3 在 body 中通过 model 字段传递。 |
text | text | v3 的 text 可以输入一个字符串,或者一个字符串列表。 |
api/v2/endpoint/:endpoint_id/tokenization | api/v3/tokenization | 备注 |
---|---|---|
tokens | - | 该字段会带来一些性能问题,并且用户可以通过 |
token_ids | data[0].token_ids | v3 的 text 输入字符串时,返回的 |
offset_mapping | data[0].offset_mapping | v3 的 text 输入字符串时,返回的 |
total_tokens | data[0].total_tokens | v3 的 text 输入字符串时,返回的 |
v1/v2 支持 python 3.5+,v3 需要 python 3.7+,3.7 以下的版本如需使用方舟 API 建议参考 ChatCompletions-文字对话 实现 HTTP 调用,或使用兼容 openai-like 协议的第三方 SDK。
# v1 [deprecated]
# python -m pip install --user volcengine
import os
from volcengine.maas import MaasService, MaasException, ChatRole
maas = MaasService('https://maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')
maas.set_ak(os.getenv("VOLC_ACCESSKEY"))
maas.set_sk(os.getenv("VOLC_SECRETKEY"))
resp = maas.chat({
"model": {
"name": "skylark-pro",
},
"messages": [
{"role": ChatRole.USER, "content": "hello"}
]
})
print(resp)
# v3 [recommended]
# pip install 'volcengine-python-sdk[ark]'
from volcenginesdkarkruntime import Ark
client = Ark(
api_key=os.environ.get("ARK_API_KEY"), # 这里同时支持通过 api_key 构造和通过 aksk 构造,二者选其一即可
base_url="https://ark.cn-beijing.volces.com/api/v3"
)
completion = client.chat.completions.create(
model="ep-xxxxxx-yyy",
messages = [
{"role": "user", "content": "hello"},
],
)
print(completion)
# v2 [deprecated]
# python -m pip install --user volcengine
import os
from volcengine.maas.v2 import MaasService
from volcengine.maas import MaasException, ChatRole
maas = MaasService('https://maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')
maas.set_ak(os.getenv("VOLC_ACCESSKEY"))
maas.set_sk(os.getenv("VOLC_SECRETKEY"))
resp = maas.chat("ep-xxxxxx-yyy", {
"messages": [
{"role": ChatRole.USER, "content": "hello"}
]
})
print(resp)
# v3 [recommended]
# pip install 'volcengine-python-sdk[ark]'
from volcenginesdkarkruntime import Ark
client = Ark(
api_key=os.environ.get("ARK_API_KEY"), # 这里同时支持通过 api_key 构造和通过 aksk 构造,二者选其一即可
base_url="https://ark.cn-beijing.volces.com/api/v3"
)
completion = client.chat.completions.create(
model="ep-xxxxxx-yyy",
messages = [
{"role": "user", "content": "hello"},
],
)
print(completion)
v3 需要 1.18 及以上的 golang 版本,1.18 以下的 golang 版本如需使用方舟 API 建议参考 ChatCompletions-文字对话 实现 HTTP 调用,或使用兼容 openai-like 协议的第三方 SDK。
// v1 [deprecated]
// go get -u github.com/volcengine/volc-sdk-golang
import (
"fmt"
"os"
"github.com/volcengine/volc-sdk-golang/service/maas"
"github.com/volcengine/volc-sdk-golang/service/maas/models/api"
)
func main() {
r := maas.NewInstance("https://maas-api.ml-platform-cn-beijing.volces.com", "cn-beijing")
r.SetAccessKey(os.Getenv("VOLC_ACCESSKEY"))
r.SetSecretKey(os.Getenv("VOLC_SECRETKEY"))
got, status, err := r.Chat(&api.ChatReq{
Model: &api.Model{
Name: "skylark-pro",
},
Messages: []*api.Message{
{
Role: maas.ChatRoleOfUser,
Content: "hello",
},
},
})
if err != nil {
panic(err)
}
fmt.Println(got)
}
// v3 [recommended]
// go get -u github.com/volcengine/volcengine-go-sdk
import (
"context"
"fmt"
"os"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
func main() {
client := arkruntime.NewClientWithApiKey( // 这里同时支持通过 api_key 构造和通过 aksk 构造,二者选其一即可
os.Getenv("ARK_API_KEY"),
arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"),
)
resp, err := client.CreateChatCompletion(context.Background(), model.ChatCompletionRequest{
Model: "ep-xxxxxx-yyy",
Messages: []*model.ChatCompletionMessage{
{
Role: model.ChatMessageRoleUser,
Content: &model.ChatCompletionMessageContent{
StringValue: volcengine.String("hello"),
},
},
},
})
if err != nil {
panic(err)
}
fmt.Println(resp)
}
// v2 [deprecated]
// go get -u github.com/volcengine/volc-sdk-golang
import (
"fmt"
"os"
api "github.com/volcengine/volc-sdk-golang/service/maas/models/api/v2"
client "github.com/volcengine/volc-sdk-golang/service/maas/v2"
)
func main() {
r := client.NewInstance("https://maas-api.ml-platform-cn-beijing.volces.com", "cn-beijing")
r.SetAccessKey(os.Getenv("VOLC_ACCESSKEY"))
r.SetSecretKey(os.Getenv("VOLC_SECRETKEY"))
got, status, err := r.Chat("ep-xxxxxx-yyy", &api.ChatReq{
Messages: []*api.Message{
{
Role: api.ChatRoleUser,
Content: "hello",
},
},
})
if err != nil {
panic(err)
}
fmt.Println(got)
}
// v3 [recommended]
// go get -u github.com/volcengine/volcengine-go-sdk
import (
"context"
"fmt"
"os"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model"
"github.com/volcengine/volcengine-go-sdk/volcengine"
)
func main() {
client := arkruntime.NewClientWithApiKey( // 这里同时支持通过 api_key 构造和通过 aksk 构造,二者选其一即可
os.Getenv("ARK_API_KEY"),
arkruntime.WithBaseUrl("https://ark.cn-beijing.volces.com/api/v3"),
)
resp, err := client.CreateChatCompletion(context.Background(), model.ChatCompletionRequest{
Model: "ep-xxxxxx-yyy",
Messages: []*model.ChatCompletionMessage{
{
Role: model.ChatMessageRoleUser,
Content: &model.ChatCompletionMessageContent{
StringValue: volcengine.String("hello"),
},
},
},
})
if err != nil {
panic(err)
}
fmt.Println(resp)
}
/*
v1 [deprecated]
# pom.xml
<dependency>
<groupId>com.volcengine</groupId>
<artifactId>volc-sdk-java</artifactId>
<version>LATEST</version>
</dependency>
*/
import com.volcengine.helper.Const;
import com.volcengine.model.maas.api.Api;
import com.volcengine.service.maas.MaasException;
import com.volcengine.service.maas.MaasService;
import com.volcengine.service.maas.impl.MaasServiceImpl;
public class ChatDemo {
public static void main(String[] args) {
MaasService maasService = new MaasServiceImpl("https://maas-api.ml-platform-cn-beijing.volces.com", "cn-beijing");
maasService.setAccessKey(System.getenv("VOLC_ACCESSKEY"));
maasService.setSecretKey(System.getenv("VOLC_SECRETKEY"));
Api.ChatReq req = Api.ChatReq.newBuilder()
.setModel(Api.Model.newBuilder().setName("skylark-pro"))
.addMessages(Api.Message.newBuilder().setRole(Const.MaasChatRoleOfUser).setContent("hello"))
.build();
Api.ChatResp resp = maasService.chat(req);
System.out.println(resp);
}
}
/*
v3 [recommended]
# pom.xml
<dependency>
<groupId>com.volcengine</groupId>
<artifactId>volcengine-java-sdk-ark-runtime</artifactId>
<version>LATEST</version>
</dependency>
*/
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessage;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;
import com.volcengine.ark.runtime.service.ArkService;
import java.util.ArrayList;
import java.util.List;
public class ChatCompletionsExample {
public static void main(String[] args) {
// 这里同时支持通过 api_key 构造和通过 aksk 构造,二者选其一即可
String apiKey = System.getenv("ARK_API_KEY");
ArkService service = ArkService.builder()
.apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3")
.build();
final List<ChatMessage> messages = new ArrayList<>();
final ChatMessage message = ChatMessage.builder().role(ChatMessageRole.USER).content("hello").build();
messages.add(userMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model("ep-xxxxxx-yyy")
.messages(messages)
.build();
service.createChatCompletion(chatCompletionRequest).getChoices().forEach(choice -> System.out.println(choice.getMessage().getContent()));
// shutdown service before process exited.
service.shutdownExecutor();
}
}
/*
v2 [deprecated]
# pom.xml
<dependency>
<groupId>com.volcengine</groupId>
<artifactId>volc-sdk-java</artifactId>
<version>LATEST</version>
</dependency>
*/
import com.volcengine.model.maas.api.v2.*;
import com.volcengine.service.maas.MaasException;
import com.volcengine.service.maas.v2.MaasService;
import com.volcengine.service.maas.v2.impl.MaasServiceImpl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Stream;
public class ChatV2Demo {
public static void main(String[] args) {
MaasService maasService = new MaasServiceImpl("https://maas-api.ml-platform-cn-beijing.volces.com", "cn-beijing");
maasService.setAccessKey(System.getenv("VOLC_ACCESSKEY"));
maasService.setSecretKey(System.getenv("VOLC_SECRETKEY"));
ChatReq req = new ChatReq()
.withMessages(new ArrayList<>(Arrays.asList(
new Message().withRole(Message.ChatRole.USER).withContent("hello")
)));
ChatResp resp = maasService.chat("ep-xxxxxx-yyy", req);
System.out.println(resp);
}
}
/*
v3 [recommended]
# pom.xml
<dependency>
<groupId>com.volcengine</groupId>
<artifactId>volcengine-java-sdk-ark-runtime</artifactId>
<version>LATEST</version>
</dependency>
*/
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessage;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;
import com.volcengine.ark.runtime.service.ArkService;
import java.util.ArrayList;
import java.util.List;
public class ChatCompletionsExample {
public static void main(String[] args) {
// 这里同时支持通过 api_key 构造和通过 aksk 构造,二者选其一即可
String apiKey = System.getenv("ARK_API_KEY");
ArkService service = ArkService.builder()
.apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3")
.build();
final List<ChatMessage> messages = new ArrayList<>();
final ChatMessage message = ChatMessage.builder().role(ChatMessageRole.USER).content("hello").build();
messages.add(userMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model("ep-xxxxxx-yyy")
.messages(messages)
.build();
service.createChatCompletion(chatCompletionRequest).getChoices().forEach(choice -> System.out.println(choice.getMessage().getContent()));
// shutdown service before process exited.
service.shutdownExecutor();
}
}
主要以 Python 为例,其余语言类似请参考:
chat v1
import os
from volcengine.maas import MaasService, MaasException, ChatRole
maas = MaasService('https://maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')
maas.set_ak(os.getenv("VOLC_ACCESSKEY"))
maas.set_sk(os.getenv("VOLC_SECRETKEY"))
resp = maas.chat({
"model": {
"name": "skylark-pro",
},
"messages": [
{"role": ChatRole.USER, "content": "hello"}
],
"plugins": ["browsing"],
})
print(resp)
bot chat v3
智能体中心>创建智能体>零代码>单聊>创建详情页
from volcenginesdkarkruntime import Ark
client = Ark(
api_key=os.environ.get("ARK_API_KEY"), # 这里同时支持通过 api_key 构造和通过 aksk 构造,二者选其一即可
base_url="https://ark.cn-beijing.volces.com/api/v3"
)
completion = client.bot_chat.completions.create(
model="bot-xxxxxx-yyy",
messages = [
{"role": "user", "content": "hello"},
],
)
print(completion)
V3 API 的详细说明参见API 列表,V3 SDK 的详细说明参见 SDK 调用指南。如有其他迁移问题,可以通过提交工单的方式,进行咨询。
通知时间 | 下线时间 | 影响说明 |
---|---|---|
2024年10月16日 | 2024年11月30日 | SDK下线工作将于通知时间起进行,自通知时间开始,将逐步下调SDK V1/V2配额; |