fix(agent): 修复因工具返回的 token 报告错误导致的频繁 summary
This commit is contained in:
parent
b589521775
commit
34bfc0c97e
@ -132,7 +132,8 @@ def _offload_tool_result(msg: ToolMessage, threshold: int, token_counter: TokenC
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
# 计算 token 数
|
# 计算 token 数
|
||||||
if token_counter([msg]) <= threshold:
|
msg_tokens = token_counter([msg])
|
||||||
|
if msg_tokens <= threshold:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# 获取工具名称和参数
|
# 获取工具名称和参数
|
||||||
@ -450,23 +451,6 @@ class SummaryOffloadMiddleware(AgentMiddleware):
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def _should_summarize_based_on_reported_tokens(self, messages: list[AnyMessage], threshold: float) -> bool:
|
|
||||||
"""Check if reported token usage from last AIMessage exceeds threshold."""
|
|
||||||
last_ai_message = next(
|
|
||||||
(msg for msg in reversed(messages) if isinstance(msg, AIMessage)),
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
if ( # noqa: SIM103
|
|
||||||
isinstance(last_ai_message, AIMessage)
|
|
||||||
and last_ai_message.usage_metadata is not None
|
|
||||||
and (reported_tokens := last_ai_message.usage_metadata.get("total_tokens", -1))
|
|
||||||
and reported_tokens >= threshold
|
|
||||||
and (message_provider := last_ai_message.response_metadata.get("model_provider"))
|
|
||||||
and message_provider == self.model._get_ls_params().get("ls_provider") # noqa: SLF001
|
|
||||||
):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _should_summarize(self, messages: list[AnyMessage], total_tokens: int) -> bool:
|
def _should_summarize(self, messages: list[AnyMessage], total_tokens: int) -> bool:
|
||||||
"""Determine whether summarization should run for the current token usage."""
|
"""Determine whether summarization should run for the current token usage."""
|
||||||
if not self._trigger_conditions:
|
if not self._trigger_conditions:
|
||||||
@ -477,8 +461,6 @@ class SummaryOffloadMiddleware(AgentMiddleware):
|
|||||||
return True
|
return True
|
||||||
if kind == "tokens" and total_tokens >= value:
|
if kind == "tokens" and total_tokens >= value:
|
||||||
return True
|
return True
|
||||||
if kind == "tokens" and self._should_summarize_based_on_reported_tokens(messages, value):
|
|
||||||
return True
|
|
||||||
if kind == "fraction":
|
if kind == "fraction":
|
||||||
max_input_tokens = self._get_profile_limits()
|
max_input_tokens = self._get_profile_limits()
|
||||||
if max_input_tokens is None:
|
if max_input_tokens is None:
|
||||||
@ -488,9 +470,6 @@ class SummaryOffloadMiddleware(AgentMiddleware):
|
|||||||
threshold = 1
|
threshold = 1
|
||||||
if total_tokens >= threshold:
|
if total_tokens >= threshold:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if self._should_summarize_based_on_reported_tokens(messages, threshold):
|
|
||||||
return True
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _determine_cutoff_index(self, messages: list[AnyMessage]) -> int:
|
def _determine_cutoff_index(self, messages: list[AnyMessage]) -> int:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user