修复: 知识提炼截断打捞与水位保节奏
- 提炼额度 2048 提至 4096,prompt 封顶五条降序 - 截断 JSON 字符串感知打捞,只收校验通过前缀 - finish_reason 截断留痕,空输出分开口径 - 失败改记节奏位,灭逐轮重提炼风暴
This commit is contained in:
@@ -65,11 +65,30 @@ pub(crate) struct OpenAiResponse {
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub(crate) struct OpenAiChoice {
|
||||
pub message: OpenAiMessageResp,
|
||||
// OpenAI 响应反序列化字段,保留以备调试/未来消费(如日志记录调用终止原因),标注意图消除 dead_code warning
|
||||
#[allow(dead_code)]
|
||||
pub finish_reason: Option<String>,
|
||||
pub struct OpenAiChoice {
|
||||
pub(crate) message: OpenAiMessageResp,
|
||||
/// 调用终止原因。`length` = 输出被 max_tokens 截断(不完整),由 [`FinishReason`]
|
||||
/// 的 Drop 侧效应打 warn 留痕 — 此前该字段无人读、截断不可见,截断的 JSON 会被
|
||||
/// 下游当解析失败整批丢弃而无任何日志线索。
|
||||
#[serde(default)]
|
||||
pub finish_reason: FinishReason,
|
||||
}
|
||||
|
||||
/// finish_reason 载体(透明 NewType)。
|
||||
///
|
||||
/// 消费方只取 message,本字段值随 choice 整体 drop 时触发截断告警;对外公开
|
||||
/// (pub 模块下的 pub 结构属库 API 面)同时免去字段 dead_code 豁免。
|
||||
/// serde 透明,线上 JSON 形态与 Option<String> 一致。
|
||||
#[derive(Debug, Default, Deserialize)]
|
||||
#[serde(transparent)]
|
||||
pub struct FinishReason(Option<String>);
|
||||
|
||||
impl Drop for FinishReason {
|
||||
fn drop(&mut self) {
|
||||
if self.0.as_deref() == Some("length") {
|
||||
tracing::warn!("[OpenAI] 同步响应因 max_tokens 截断(finish_reason=length),输出不完整");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
||||
Reference in New Issue
Block a user