明确目标和任务
// 调用LLM进行分析
const prompt = `你是一名严格而友好的英语口语评分官,专业背景包括语音学(phonetics)、二语习得(SLA)和自动语音识别(ASR)。你的任务是:
① 比对参考句(reference)与学员朗读的转写(learner);
② 统计正确朗读的单词比例 correct_ratio = (#matched_words)/(#words_in_reference);
③ 按以下阈值给出三档评价:
Pass : correct_ratio ≥ 0.90
Too Marginal : 0.70 ≤ correct_ratio < 0.90
Fail : correct_ratio < 0.70
④ 输出 JSON,字段包括
- "classification": "Pass" / "Too Marginal" / "Fail"
- "correct_ratio": (保留两位小数)
- "missing_or_wrong": [列出没读出或明显读错的单词]
参考句: "${currentSentence.text}"
学员朗读: "${recognizedText}"`;
- 核心功能:在这个提示词中,核心目标是让大模型充当英语口语评分官,对学员朗读进行评估并输出特定格式的结果。所以,编写提示词时要清晰定义模型的任务,避免模糊不清。例如,明确要求统计正确朗读单词比例、给出评价等级以及列出错误单词等。
- 详细步骤:将任务分解为具体的步骤,像示例中依次说明了比对参考句和学员朗读转写、计算比例、给出评价和输出 JSON 等步骤,这样模型能更清晰地理解任务流程。
提供必要信息
- 参考信息:为模型提供足够的参考信息,如参考句和学员朗读的转写内容。在提示词中使用变量插值(如
${currentSentence.text}
和${recognizedText}
),方便在实际使用时动态替换具体内容。 - 规则说明:明确任务执行的规则,如评价等级的阈值设定(Pass、Too Marginal、Fail 的比例范围),让模型知道如何根据计算结果进行分类。
规定输出格式
- 数据结构:清晰规定输出的格式,这里要求输出 JSON,并明确列出 JSON 的字段("classification"、"correct_ratio"、"missing_or_wrong"),有助于模型生成符合要求的结果,也方便后续开发中对结果进行处理。
- 数据类型和精度:对输出的数据类型和精度进行说明,如 "correct_ratio" 要求保留两位小数,避免模型输出不符合预期的数据。
编写提示词的注意点
语言简洁明了
- 避免歧义:使用简洁、准确的语言,避免使用模糊或容易引起歧义的词汇和句子。例如,在描述任务时,使用具体的动词和明确的表述,让模型能准确理解意图。
- 逻辑连贯:提示词的逻辑要连贯,各步骤之间要有合理的顺序和衔接,便于模型按照顺序执行任务。
提供示例(可选但推荐)
- 辅助理解:如果任务比较复杂,提供示例可以帮助模型更好地理解任务要求。例如,可以给出一个简单的参考句、学员朗读转写内容以及对应的输出 JSON 示例,让模型更直观地了解期望的输出形式。
考虑模型能力
- 适配模型:不同的大模型有不同的能力和特点,编写提示词时要考虑模型的理解能力和输出能力。避免提出超出模型能力范围的要求,确保提示词与模型的适配性。
实际开发中的返回及处理
返回内容
根据提示词的要求,大模型会返回一个 JSON 对象,示例如下:
{
"code": 0,
"message": "",
"data": {
"input_token_size": 260,
"output_token_size": 241,
"result": "根据您提供的参考句和学员朗读的内容,两者完全一致。这意味着学员正确地朗读了所有的单词。\n\n- 参考句: \"Not only did the committee reject the proposal, but it also requested a complete redesign within two weeks.\"\n- 学员朗读: \"Not only did the committee reject the proposal, but it also requested a complete redesign within two weeks.\"\n\n基于此,我们可以计算出正确的单词比例 `correct_ratio` 为 1.00(即100%),因为没有单词被遗漏或错误发音。\n\n按照给定的评价标准:\n- Pass: 如果 `correct_ratio` ≥ 0.90\n- Too Marginal: 如果 0.70 ≤ `correct_ratio` \u003c 0.90\n- Fail: 如果`correct_ratio` \u003c 0.70\n\n该情况属于 \"Pass\" 级别。\n\n因此,输出的 JSON 如下:\n\n```json\n{\n \"classification\": \"Pass\",\n \"correct_ratio\": \"1.00\",\n \"missing_or_wrong\": []\n}\n```\n\n这表明学员的表现非常好,没有任何单词被遗漏或错误发音。"
}
}
处理返回结果
在实际开发中,需要对返回的 JSON 结果进行处理。以下是一个简单的 JavaScript 示例,展示如何解析和使用返回的结果:
const llmResponse = await CallLLM(prompt, SupportLLM.TONGYIQIANWEN);
const llmResult = await llmResponse.json();
if (llmResult.code !== 0) {
throw new Error(llmResult.msg || 'AI分析失败');
}
// 从返回的文本中提取 JSON 部分
const resultText = llmResult.data.result;
const jsonMatch = resultText.match(/```json\n([\s\S]*?)\n```/);
通过以上步骤,你可以在实际开发中有效地编写提示词,并处理大模型返回的结果。
注意⚠️:仅供参考!!!