Skip to content

[Bug] 自定义评估题目Prompt无法生效 - promptType字段不一致 #676

@justinms

Description

@justinms

问题描述
在项目的「提示词管理」界面中修改了"生成评估数据集(单选题)"的自定义prompt后,系统生成评估题目时仍然使用默认prompt,自定义prompt无法生效。

桌面设备(请完善以下信息)

  • 操作系统:Linux(Ubuntu 24.04)
  • 浏览器:谷歌浏览器(Chrome)
  • Easy Dataset 版本:1.7.1

复现步骤

重现该问题的操作步骤:

  1. 进入项目设置 → 「提示词管理」页面。
  2. 找到「模型评估」分类下的「生成评估数据集(单选题)」。
  3. 点击编辑,修改自定义prompt内容。
  4. 返回「文本分割」页面,对某个文本块生成评估题目。
  5. 查看生成的题目,发现使用的是默认prompt而非自定义prompt。

预期结果

生成评估题目时应该使用用户在「提示词管理」中设置的自定义prompt内容。

其他相关信息

通过调试发现,问题根源在于 promptType 字段不一致

  • lib/llm/prompts/evalQuestion.js 中定义的 promptType'evalSingleChoice'
  • lib/db/custom-prompts.jsgetPromptTemplates() 函数中,所有评估题目的 type 字段都被错误地硬编码为 'evalQuestion'
  • 这导致数据库查询时 promptType 不匹配,无法找到自定义prompt

此问题影响所有评估题目类型:

  • 判断题 (evalTrueFalse)
  • 单选题 (evalSingleChoice)
  • 多选题 (evalMultipleChoice)
  • 短答案题 (evalShortAnswer)
  • 开放性问题 (evalOpenEnded)

修复方案:将 lib/db/custom-prompts.js 中的 type 字段改为正确值,并更新现有数据库记录。


修复方案参考:

1. 修复代码(永久修复)

文件: lib/db/custom-prompts.js

修改内容: 将评估题目类型的 type 字段改为正确的值:

- type: 'evalQuestion'
+ type: 'evalTrueFalse'    // 判断题
+ type: 'evalSingleChoice'  // 单选题
+ type: 'evalMultipleChoice' // 多选题
+ type: 'evalShortAnswer'   // 短答案题
+ type: 'evalOpenEnded'     // 开放性问题

2. 修复现有数据库记录(临时修复)

对于已存在的自定义prompt记录,需要更新 promptType 字段:

UPDATE CustomPrompts
SET promptType = 'evalTrueFalse'
WHERE promptType = 'evalQuestion'
  AND promptKey LIKE 'EVAL_TRUE_FALSE_PROMPT%';

UPDATE CustomPrompts
SET promptType = 'evalSingleChoice'
WHERE promptType = 'evalQuestion'
  AND promptKey LIKE 'EVAL_SINGLE_CHOICE_PROMPT%';

UPDATE CustomPrompts
SET promptType = 'evalMultipleChoice'
WHERE promptType = 'evalQuestion'
  AND promptKey LIKE 'EVAL_MULTIPLE_CHOICE_PROMPT%';

UPDATE CustomPrompts
SET promptType = 'evalShortAnswer'
WHERE promptType = 'evalQuestion'
  AND promptKey LIKE 'EVAL_SHORT_ANSWER_PROMPT%';

UPDATE CustomPrompts
SET promptType = 'evalOpenEnded'
WHERE promptType = 'evalQuestion'
  AND promptKey LIKE 'EVAL_OPEN_ENDED_PROMPT%';

另外希望提供一个后期debug的开关,例如添加以下调试功能:

  1. 调试日志保存: lib/util/debugLogger.js

    • 自动将prompt和LLM响应保存到 _debug/ 文件夹
  2. 调试输出: lib/llm/common/prompt-loader.js

    • 添加详细的console.log用于追踪prompt加载过程

非常感谢这个项目的工作。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions