摘要:2025 年 10 月 23 日,eino 发布了 v0.5.9 版本,本次更新主要针对 Graph 回调中访问状态(State)失败的问题进行了修复,同时增加了完善的单元测试,避免未来类似问题的再次出现。
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,从而保证了回调中可以正确访问状态。
主要改动包括:
• 在状态初始化完成后再触发 onGraphStart
• 增加标志位 haveOnStart 来延迟 onGraphStart 的触发,防止提前执行导致状态不可用
• 在恢复检查点(checkpoint)逻辑中补充状态初始化后的回调触发
• 完善单元测试,验证在 Graph 回调中访问状态的可行性
部分核心代码变更示例:
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}该测试确保:
1. 回调中可以正常获取到初始化的状态对象
2. 可以对状态进行修改而不会触发错误
代码地址:github.com/cloudwego/eino
eino v0.5.9 版本主要解决了 Graph 回调中访问状态失败 的问题,通过调整回调执行时机并补充测试用例,保证了 ProcessState 在回调环境下的稳定性。本次更新对使用 Graph + State 的场景尤为重要,建议相关用户尽快升级到该版本,以避免状态读取异常的问题。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。
来源:小肖科技论
