

2025 年 10 月 23 日,eino 发布了 v0.5.9 版本,本次更新主要针对 Graph 回调中访问状态(State)失败的问题进行了修复,同时增加了完善的单元测试,避免未来类似问题的再次出现。
在 v0.5.4 版本中,引入了 Graph Cancel Interrupt 功能,但在实现过程中调整了 Graph Callback 的执行时机,导致在回调函数中通过 ProcessState 获取状态时出现异常。
问题表现如下: .
err := ProcessState[*State](ctx, func(_ context.Context, state *testStruct) error {
// your code here
return nil
})
if err != nil {
// error: "get state from context fail: have not set state"
}出现该错误的原因是,在回调执行时,状态尚未正确设置到 context 中,导致 ProcessState 无法获取到内容。
v0.5.9 中调整了 Graph 的启动流程,确保状态完成初始化后再执行 onGraphStart,从而保证了回调中可以正确访问状态。
主要改动包括:
onGraphStarthaveOnStart 来延迟 onGraphStart 的触发,防止提前执行导致状态不可用部分核心代码变更示例: .
ctx, input = onGraphStart(ctx, input, isStream)
haveOnStart = true该逻辑保证 onGraphStart 的执行时机正确,使回调中可以通过 ProcessState 获取到初始化后的状态内容。
本次更新中,在 compose/graph_test.go 新增了 TestGetStateInGraphCallback 测试用例,验证在 OnStart 回调中读取并修改状态的正确性:
.
func (t *testGraphStateCallbackHandler) OnStart(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {
assert.NoError(t.t, ProcessState[*state](ctx, func(ctx context.Context, s *state) error {
s.A = "test"
return nil
}))
return ctx
}该测试确保:
代码地址:github.com/cloudwego/eino
eino v0.5.9 版本主要解决了 Graph 回调中访问状态失败 的问题,通过调整回调执行时机并补充测试用例,保证了 ProcessState 在回调环境下的稳定性。本次更新对使用 Graph + State 的场景尤为重要,建议相关用户尽快升级到该版本,以避免状态读取异常的问题。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。