Skip to content

AI 评审输入未按 evaluation 提示词构建 — 后端只传入章节文本而非包含蓝图/前序摘要的 JSON #35

Description

@YakumoReddo

描述

我在使用评审功能时发现后端并没有按照名为 evaluation 的评审提示词中要求的输入格式构建评审输入,而是仅把被评审的章节文本(选中版本或最新版本)直接发送给 LLM。结果导致不同模型表现不一致:有的模型(如 Gemini 2.5 Pro)会在格式不符时仍然“硬生成”评审结果并可能出现对不存在内容的评审;有的模型(如 GPT-5.2)会明确提示缺少上下文并返回不完整或错误的评审决策。

问题定位

问题代码位于 backend/app/api/routers/writer.py,大致位置在大约 888 行到 908 行(evaluate_chapter 函数中)。当前逻辑是直接把 version_to_evaluate.content 作为 LLM 的用户输入:

# 如果没有选中版本,使用最新版本进行评审
version_to_evaluate = chapter.selected_version
if not version_to_evaluate:
# 获取该章节的所有版本,选择最新的一个
from sqlalchemy.orm import selectinload
stmt_versions = (
select(Chapter)
.options(selectinload(Chapter.versions))
.where(
Chapter.project_id == project_id,
Chapter.chapter_number == request.chapter_number,
)
)
result_versions = await session.execute(stmt_versions)
chapter_with_versions = result_versions.scalars().first()
if not chapter_with_versions or not chapter_with_versions.versions:
raise HTTPException(status_code=400, detail="该章节还没有生成任何版本,无法进行评审")
# 使用最新的版本(列表中的最后一个)
version_to_evaluate = chapter_with_versions.versions[-1]

  • 期望输入:按照 evaluation 提示词的要求,传入一个 JSON 结构,包含小说蓝图(world blueprint)、前序章节及其摘要、以及待评审章节内容等上下文信息,以便 LLM 基于完整上下文进行评审。
  • 实际输入:仅传入待评审章节的内容字符串(version_to_evaluate.content)。

复现步骤

  1. 使用项目生成若干章节并生成多个版本(或编辑章节)。
  2. 在某个章节点击 AI 评审。
  3. 在模型为 Gemini-2.5-Pro 时,观察返回评审结果有时会“凭空”生成与实际版本不相关的评审(模型忽略格式)。
  4. 在模型为 GPT-5.2 时,观察返回会指出缺少蓝图/前序摘要等上下文并将评审标为失败或返回不完整建议。

实际行为(示例)

  • Gemini(宽容于输入格式):会生成看起来完整但可能不基于实际小说蓝图和前序章节的评审,甚至选择错误的版本为“最佳”并给出不一致的理由。

    gemini2.5_v1.txt
    gemini2.5_v2.txt

  • GPT(严格格式或语义检查):会明确提示缺少上下文(如蓝图或前序章节摘要),并可能直接返回“选择版本 1,但缺少其他内容”的结果或失败信息。
    gpt5.2.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions