尝试重新思考得更短

This commit is contained in:
2026-08-23 22:34:30 +02:00
parent 8e6d245c1c
commit f33a6829e8
9 changed files with 960 additions and 25 deletions
+56 -1
View File
@@ -364,6 +364,7 @@ namespace AnotherReplayReader
OnChunk,
_linkedCts.Token);
UpdateTokenDisplay(overviewResult);
ReportReasoningGuardResult(overviewResult);
_overview = OverviewParser.Parse(overviewResult.Response);
_overviewNarrative = _overview.Narrative;
AppendLog(
@@ -490,6 +491,7 @@ namespace AnotherReplayReader
OnChunk,
_linkedCts.Token);
UpdateTokenDisplay(segmentResult);
ReportReasoningGuardResult(segmentResult);
segmentResponse = segmentResult.Response;
if (backqueryCount >= maxBackqueriesPerSegment)
@@ -582,6 +584,7 @@ namespace AnotherReplayReader
_suppressDisplay = false;
}
UpdateTokenDisplay(revisionResult);
ReportReasoningGuardResult(revisionResult);
if (string.IsNullOrWhiteSpace(revisionResult.Response))
{
@@ -675,6 +678,7 @@ namespace AnotherReplayReader
_linkedCts.Token);
UpdateTokenDisplay(result);
ReportReasoningGuardResult(result);
// 总结轮回查:允许模型请求一次远处原始区间,作为同一会话的追加输入。
if (_replayData is null)
@@ -727,6 +731,7 @@ namespace AnotherReplayReader
OnChunk,
_linkedCts.Token);
UpdateTokenDisplay(finalSummary);
ReportReasoningGuardResult(finalSummary);
AppendLog("总结完成", "已根据回查区间补充最终总结。", false);
}
@@ -752,7 +757,9 @@ namespace AnotherReplayReader
var total = 0;
foreach (var message in messages)
{
total += AiContextBudget.EstimateTokens(message.Content);
total += AiContextBudget.EstimateTokens(message.Content ?? string.Empty);
total += AiContextBudget.EstimateTokens(
message.ReasoningContent ?? string.Empty);
}
var check = AiContextBudget.CheckRequestUsage(
total, requestContext.Provider, requestContext.Model);
@@ -806,6 +813,44 @@ namespace AnotherReplayReader
_chunkQueue.Enqueue((chunk, DateTimeOffset.UtcNow));
}
private void ReportReasoningGuardResult(AIAnalyze.Result result)
{
if (!result.ReasoningInterrupted
&& !result.ContinuationApplied
&& string.IsNullOrWhiteSpace(result.ReasoningContinuationError))
{
return;
}
if (!string.IsNullOrWhiteSpace(result.ReasoningContinuationError))
{
AppendLog("推理保护警告", result.ReasoningContinuationError, false);
}
else if (result.ContinuationApplied)
{
AppendLog("推理保护", "已请求 AI 尽快收尾,并完成最终回答。", false);
}
else if (result.ReasoningInterrupted)
{
AppendLog("推理保护", "检测到推理内容超限,正在处理续写结果。", false);
}
if (!string.IsNullOrWhiteSpace(result.ReasoningOriginalRequestJson))
{
AppendLog(
"推理保护:首次请求消息",
result.ReasoningOriginalRequestJson,
true);
}
if (!string.IsNullOrWhiteSpace(result.ReasoningContinuationRequestJson))
{
AppendLog(
"推理保护:续写请求完整消息",
result.ReasoningContinuationRequestJson,
true);
}
}
private void StartThinkingBlock()
{
_thinkingStartTime = DateTime.Now;
@@ -1035,6 +1080,7 @@ namespace AnotherReplayReader
var thinkSb = new StringBuilder();
var contentSb = new StringBuilder();
var errorSb = new StringBuilder();
var guardTriggered = false;
while (_chunkQueue.TryDequeue(out var data))
{
var (chunk, time) = data;
@@ -1062,6 +1108,11 @@ namespace AnotherReplayReader
{
errorSb.AppendLine(chunk.Text);
}
else if (chunk.Type == AIAnalyze.AIChunkType.ReasoningGuard)
{
EndThinkingBlock();
guardTriggered = true;
}
}
if (thinkSb.Length > 0)
@@ -1080,6 +1131,10 @@ namespace AnotherReplayReader
{
AddErrorBlock(errorSb.ToString());
}
if (guardTriggered)
{
_currentContent = null;
}
}
private void AutoScroll()