Skip to content

SDK版本升级后程序异常, Agent排查后定位到是SDK改变了事件使用方式 #143

@northseadl

Description

@northseadl

问题描述

v1.1.42 升级到 v1.1.55+ 后,流式事件的 GetResponse()GetText().GetText() 对特定事件返回 nil 或空值。编译无错误,运行时静默失败。

影响版本

  • 正常: v1.1.42
  • 异常: v1.1.55, v1.2.2

复现步骤

使用 v1.1.42 官方流式示例 (example/responses/basic/main.go) 的写法:

resp, err := client.CreateResponsesStream(ctx, req)
for {
    event, err := resp.Recv()
    if err == io.EOF { break }
    
    // v1.1.42 正常,v1.1.55+ 返回 nil
    if responseEvent := event.GetResponse(); responseEvent != nil {
        responseId = responseEvent.GetResponse().GetId()
    }
}

func handleEvent(event *responses.Event) {
    case responses.EventType_response_output_text_done.String():
        // v1.1.42 正常,v1.1.55+ 返回空字符串
        fmt.Printf("text: %s\n", event.GetText().GetText())
}

预期行为

GetResponse()response_completedresponse_failedresponse_incompleteresponse_in_progress 事件返回有效数据(与 v1.1.42 一致)。

实际行为

v1.1.55+ 中,GetResponse() 仅对 response_created 事件有效,其他事件返回 nil

根因

oneof 实现方式变更:

v1.1.42:

case EventType_response_completed:
    oneof := Event_Response{}  // 共用类型

v1.1.55+:

case EventType_response_completed:
    oneof := Event_ResponseCompleted{}  // 专用类型

迁移方案

事件 v1.1.42 v1.1.55+
response_completed e.GetResponse().GetResponse() e.GetResponseCompleted().GetResponse()
response_failed e.GetResponse().GetResponse() e.GetResponseFailed().GetResponse()
response_output_text_done e.GetText().GetText() e.GetTextDone().GetText()

环境

  • Go: 1.23.4
  • OS: macOS (darwin/arm64)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions