feat: inject run_id as cache_salt for per-epoch resampling (algo #10)
This commit is contained in:
+10
-3
@@ -108,6 +108,7 @@ class AgentLoop:
|
||||
plugins: list[object] | None = None,
|
||||
*,
|
||||
session_id: str | None = None,
|
||||
cache_salt: str | None = None,
|
||||
) -> LoopResult:
|
||||
"""执行 Thinking+JSON 推理循环。
|
||||
|
||||
@@ -117,6 +118,7 @@ class AgentLoop:
|
||||
tool_dispatcher: 工具调度器,ToolDispatcher Protocol 实例。
|
||||
plugins: pluggy 插件列表。
|
||||
session_id: 会话 ID,透传给 LLMProvider。
|
||||
cache_salt: 缓存盐,透传给 LLMProvider(如训练用 run_id 跨 epoch 重采样)。
|
||||
|
||||
返回:
|
||||
LoopResult 实例,包含推理步骤、token 用量、终止原因。
|
||||
@@ -138,7 +140,7 @@ class AgentLoop:
|
||||
# Phase 1: LLM 调用(步级重试:防穿透 GovernedLLMClient 的瞬时异常)
|
||||
try:
|
||||
response = await self._call_llm_with_step_retry(
|
||||
messages, token_usage, session_id=session_id
|
||||
messages, token_usage, session_id=session_id, cache_salt=cache_salt
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error("LLM API 调用失败({}): {}", type(e).__name__, e)
|
||||
@@ -269,6 +271,7 @@ class AgentLoop:
|
||||
token_usage: dict[str, int],
|
||||
*,
|
||||
session_id: str | None = None,
|
||||
cache_salt: str | None = None,
|
||||
) -> LLMResponse:
|
||||
"""带步级重试的 LLM 调用,兜底穿透治理层重试栈的瞬时异常。
|
||||
|
||||
@@ -292,7 +295,9 @@ class AgentLoop:
|
||||
step_attempt = 0
|
||||
while True:
|
||||
try:
|
||||
return await self._call_llm(messages, token_usage, session_id=session_id)
|
||||
return await self._call_llm(
|
||||
messages, token_usage, session_id=session_id, cache_salt=cache_salt
|
||||
)
|
||||
except self._retryable_exceptions as e:
|
||||
step_attempt += 1
|
||||
if step_attempt > self._step_retries:
|
||||
@@ -315,6 +320,7 @@ class AgentLoop:
|
||||
token_usage: dict[str, int],
|
||||
*,
|
||||
session_id: str | None = None,
|
||||
cache_salt: str | None = None,
|
||||
) -> LLMResponse:
|
||||
"""调用 LLMProvider 并累加 token 使用量。
|
||||
|
||||
@@ -322,11 +328,12 @@ class AgentLoop:
|
||||
messages: 消息历史。
|
||||
token_usage: 可变字典,就地累加。
|
||||
session_id: 会话 ID,透传给 LLMProvider。
|
||||
cache_salt: 缓存盐,透传给 LLMProvider(跨 epoch 重采样)。
|
||||
|
||||
返回:
|
||||
LLMResponse 实例。
|
||||
"""
|
||||
response = await self._llm.chat(messages, session_id=session_id)
|
||||
response = await self._llm.chat(messages, session_id=session_id, cache_salt=cache_salt)
|
||||
token_usage["prompt_tokens"] += response.prompt_tokens
|
||||
token_usage["completion_tokens"] += response.completion_tokens
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user