Skip to content

Bugfix: 修复模型调用失败/重试无trace的问题 - #272

Open
weimch wants to merge 1 commit into
mainfrom
bugfix/trace_llm_failed
Open

Bugfix: 修复模型调用失败/重试无trace的问题#272
weimch wants to merge 1 commit into
mainfrom
bugfix/trace_llm_failed

Conversation

@weimch

@weimch weimch commented Jul 31, 2026

Copy link
Copy Markdown
Contributor
  • 问题:之前遗漏了重试这块上报,模型调用重试在trace上无显示,同时发现模型调用失败的信息不会放在对应的span里,一起修复了

- 问题:之前遗漏了重试这块上报,模型调用重试在trace上无显示,同时发现模型调用失败的信息不会放在对应的span里,一起修复了
@helloopenworld

Copy link
Copy Markdown
Contributor

AI Code Review

I have enough context from the diff and surrounding code. Let me stop the (blocked) source verification and finalize the review.

发现的问题

⚠️ Warning

  • trpc_agent_sdk/agents/core/_llm_processor.py:131-147:非 partial 响应改为 continue 只缓存到 terminal_event,多个非 partial 事件时仅最后一个会下发给消费者
    • 新逻辑对每个非 partial 响应执行 trace_call_llmcontinue,跳过 yield event,循环结束后只 yield terminal_event(最后一个)。旧逻辑是每个事件都在循环内 yield。若单次 generate_async 流中出现多个 partial=False 响应(例如先一个非 partial 的 function_call 事件、再一个非 partial 文本终止事件),前面的非 partial 事件不会到达 _llm_agent.py:502 的消费循环,其 function_call 不会被收集、工具也不会执行。建议在 continue 前对“非终止的非 partial 事件”仍按需 yield,或明确仅对 error/真正终止事件延迟下发。
    if not llm_response.partial:
        final_llm_response = llm_response
        trace_call_llm(...)
        terminal_event = event
        continue   # 该 event 不再向下游 yield
    yield event   # 仅 partial 走到这里

💡 Suggestion

  • trpc_agent_sdk/agents/core/_llm_processor.py:91-92instruction_metadata 取值与 _custom_trace.py:204 写法不一致
    • 此处 instruction_metadata = getattr(instruction, 'metadata', None),而 _custom_trace.py 额外保留了 if instruction is not None 的判断。getattr(None, 'metadata', None) 虽然也返回 None 不会出错,但两处对同一语义的解析方式不统一,后续维护易产生歧义;建议抽成公共 helper 或对齐写法。

总结

整体风险偏低:错误/重试 trace 与 span 标记逻辑正确,测试覆盖了“消费者提前停止时 trace 仍完成”这一核心场景。主要需关注 _llm_processor 延迟下发 terminal event 引入的多非-partial 事件丢弃行为变更,建议合并前确认模型流不会产生多个非 partial 响应或调整下发策略。

测试建议

  • 补充一个多非 partial 响应的用例(如先 yield 一个 partial=False 的 function_call 响应、再 yield 一个 partial=False 文本响应),断言下游能收到两者且工具调用被收集,以覆盖上述行为变更路径。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants