"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model/responses"
* If you authorize your endpoint using an API key, you can set your api key to environment variable "ARK_API_KEY"
* client := arkruntime.NewClientWithApiKey(os.Getenv("ARK_API_KEY"))
* Note: If you use an API key, this API key will not be refreshed.
* To prevent the API from expiring and failing after some time, choose an API key with no expiration date.
DeepChatFeature = "deepChat"
AiSearchFeature = "aiSearch"
ReasoningSearchFeature = "reasoningSearch"
var enabled = responses.ResponseDoubaoAppFeatureType_enabled
* 从ChatFeature, DeepChatFeature,AiSearchFeature,ReasoningSearchFeature 四个feature中选择一个
// var optionalRoleDescription = "你是小明"
var setting = responses.DoubaoAppFeatureItem{
//RoleDescription: &optionalRoleDescription,
var featureToQuery = map[string]string{
ChatFeature: "你好介绍一下你自己",
DeepChatFeature: "为什么天空是蓝色",
AiSearchFeature: "今天的AI新闻",
ReasoningSearchFeature: "今天的AI新闻",
var featureToToolParam = map[string]*responses.DoubaoAppFeature{
ReasoningSearchFeature: {
ReasoningSearch: &setting,
stream(ChatFeature) // change to DeepChatFeature, AiSearchFeature, ReasoningSearchFeature to test different features
func stream(feature string) {
client := arkruntime.NewClientWithApiKey(os.Getenv("ARK_API_KEY"))
ctx := context.Background()
fmt.Println("----- round 1 message -----")
inputMessage := &responses.ItemInputMessage{
Role: responses.MessageRole_user,
Content: []*responses.ContentItem{
Union: &responses.ContentItem_Text{
Text: &responses.ContentItemText{
Type: responses.ContentItemType_input_text,
Text: featureToQuery[feature],
createResponsesReq := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_InputMessage{
InputMessage: inputMessage,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolDoubaoApp{
ToolDoubaoApp: &responses.ToolDoubaoApp{
Type: responses.ToolType_doubao_app,
Feature: featureToToolParam[feature],
resp, err := client.CreateResponsesStream(ctx, createResponsesReq, arkruntime.WithCustomHeader("ark-beta-doubao-app", "true"))
fmt.Printf("stream error: %v\n", err)
event, err := resp.Recv()
fmt.Printf("stream error: %v\n", err)
if responseEvent := event.GetResponse(); responseEvent != nil {
responseId = responseEvent.GetResponse().GetId()
fmt.Println("-----round 2---------")
inputMessage2 := &responses.ItemInputMessage{
Role: responses.MessageRole_user,
Content: []*responses.ContentItem{
Union: &responses.ContentItem_Text{
Text: &responses.ContentItemText{
Type: responses.ContentItemType_input_text,
createResponsesReq2 := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_InputMessage{
InputMessage: inputMessage2,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolDoubaoApp{
ToolDoubaoApp: &responses.ToolDoubaoApp{
Type: responses.ToolType_doubao_app,
Feature: featureToToolParam[feature],
PreviousResponseId: &responseId,
resp2, err := client.CreateResponsesStream(ctx, createResponsesReq2, arkruntime.WithCustomHeader("ark-beta-doubao-app", "true"))
fmt.Printf("stream error: %v\n", err)
event, err := resp2.Recv()
fmt.Printf("stream error: %v\n", err)
func handleEvent(event *responses.Event) {
switch event.GetEventType() {
case responses.EventType_response_doubao_app_call_search_searching.String():
print(event.GetResponseDoubaoAppCallSearchSearching().GetSearchingState())
case responses.EventType_response_doubao_app_call_search_completed.String():
print(event.GetResponseDoubaoAppCallSearchCompleted().GetSummary())
case responses.EventType_response_doubao_app_call_reasoning_search_completed.String():
print(event.GetResponseDoubaoAppCallReasoningSearchCompleted().GetSummary())
case responses.EventType_response_doubao_app_call_output_text_delta.String():
print(event.GetResponseDoubaoAppCallOutputTextDelta().GetDelta())
case responses.EventType_response_doubao_app_call_output_text_done.String():
fmt.Printf("\naggregated output text: %s\n", event.GetResponseDoubaoAppCallOutputTextDone().GetText())
case responses.EventType_response_doubao_app_call_reasoning_text_delta.String():
print(event.GetResponseDoubaoAppCallReasoningTextDelta().GetDelta())
case responses.EventType_response_doubao_app_call_reasoning_text_done.String():
fmt.Printf("\naggregated reasoning text: %s\n", event.GetResponseDoubaoAppCallReasoningTextDone().GetText())