【个人博客—山东大学项目实训——古诗词与文章智能创作助学平台(六)】
诗词评价与AI改写:提示词工程的核心实践
一、从"检索"到"创作"的提示词范式转变
在诗词检索模块中,提示词工程的目标是结构化输出——要求大模型返回符合 JSON 格式的诗词信息。而在创作模块中,提示词工程的目标发生了本质变化:既要结构化输出(评分和改写),又要保证内容质量(评价的专业性和改写的合理性)。
这种转变带来了两个技术挑战:
第一,如何让大模型在给出评分时保持客观公正,而不是随意给分?第二,如何让大模型在改写诗词时既保留原作意境,又能真正提升艺术水准?这两个问题的答案都藏在提示词的设计细节中。
二、评价评分功能:让 AI 学会"打分"
2.1 评分标准的显式化设计
评价功能的第一个版本,我只在提示词中简单写道:“请对这首诗词进行评价和打分”。测试时发现,大模型的回复五花八门:有时用文字描述"写得不错",有时给个模糊的分数区间"80-90分",甚至有时完全不按套路出牌,写了一堆文学评论却不给具体分数。
问题的根源在于:没有明确的评分标准。大模型不知道应该从哪些维度评价,也不知道每个维度的权重如何分配。
于是我重新设计了提示词,将评分标准拆解为五个维度,并明确每个维度的分值:
评价标准: 1. 韵律(平仄、押韵):20分 2. 意境(主题、情感表达):30分 3. 修辞(比喻、拟人等修辞手法):20分 4. 语言(用词准确性、文采):20分 5. 整体协调性:10分这个设计的核心思路是将抽象的"好诗"概念量化为可操作的评价维度。韵律、意境、修辞、语言、整体协调性,这五个维度基本涵盖了古典诗词鉴赏的核心要素。同时,通过分值分配体现了不同维度的重要性:意境占比最高(30分),因为它是诗词的灵魂;整体协调性占比最低(10分),因为它更多是主观感受。
2.2 JSON 格式约束的技术意义
提示词中明确要求大模型按照以下 JSON 格式输出:
{"evaluation":"诗词评价,包括韵律、意境、修辞等方面的分析","score":分数(整数,0-100)}这个格式约束有两个技术层面的考虑:
第一,便于程序解析。如果不限制格式,大模型可能返回"这首诗写得很好,我给85分"这样的自然语言,提取分数需要复杂的正则表达式匹配。而强制 JSON 格式后,只需简单的字符串解析就能拿到evaluation和score两个字段的值。
第二,引导大模型结构化思考。心理学研究表明,当人类被要求按照固定格式填写时,思维会更加系统化。大模型也有类似的效果——当它知道必须填充evaluation字段时,会主动生成详细的评价文字;当它知道必须给出一个具体的score数值时,会认真权衡各个维度的得分。
2.3 评价内容的质量控制
在实际测试中发现,即使有了明确的评分标准,大模型的评价质量仍然不稳定。有时评价过于简略,只说"韵律工整,意境深远"八个字就打发了;有时又过于啰嗦,写了三四百字的文学评论。
为了解决这个问题,我在提示词中增加了两条约束:
要求: 1. evaluation 字段应包含具体分析,指出优点和不足 2. 评价要客观公正,既要肯定优点也要指出改进方向这两条约束的作用是让大模型的评价更加平衡和实用。"指出优点和不足"避免了片面吹捧或一味批评;"指出改进方向"则让评价具有建设性,用户看完后知道下一步该如何提升。
三、AI改写功能
3.1 单字段输出的局限性
AI改写功能的第一版实现非常简单:提示词只要求大模型返回改写后的诗词内容,对应代码中的aiContent字段。从技术角度看,这个实现完全正确——大模型确实返回了改写后的诗词,前端也能正常显示。
但从用户体验角度,这个设计有一个致命缺陷:用户不知道AI改动了哪些地方。
举个例子,用户原诗是"春风拂面柳依依",AI改写为"春风拂柳绿依依"。虽然只是改动了一个字,但用户可能根本没看出来。即使看出来了,也不理解为什么要这样改。这种情况下,用户学到的东西非常有限。
3.2 双字段输出:aiContent + aiExplain
为了解决这个问题,我将提示词的输出格式改为双字段:
{"aiContent":"改写后的完整诗词,保留原作意境和主题","aiExplain":"对本次改写的具体说明,包括改动了哪些地方、为什么这样改动、改后好在何处"}这个设计的核心思想是透明化——不仅给用户看结果,还要让用户理解背后的逻辑。
aiExplain字段的要求非常具体:
- 改动了哪些地方:明确指出字词的变化
- 为什么这样改动:解释改动的理由(如优化韵律、改进修辞等)
- 改后好在何处:说明改动带来的提升
这种"三段式"的说明方式,借鉴了编程教学中"代码审查"的思路。好的代码审查不仅要指出问题,还要解释原因,更要说明改进后的好处。
3.3 改写要求的平衡艺术
提示词中对改写提出了六条要求:
改写要求: 1. 保持原作的主题和基本意境 2. 优化韵律和平仄(如适用) 3. 改进用词和修辞,使表达更加生动 4. 如发现明显的语法或用词错误,予以修正 5. 在保持原作精神的前提下,提升诗词的艺术水准 6. aiExplain要具体说明改动点和理由这六条要求体现了一个核心原则:尊重原作,适度改进。
第1条和第5条是最关键的约束。如果AI完全不顾原作意境,按照自己的喜好重写一首,那就不是"改写"而是"重写"了。反之,如果AI过于保守,连明显的错误都不敢改,那也失去了改写的意义。
这里的平衡点在于:在保持原作精神的前提下,提升艺术水准。换句话说,AI的角色是"润色者"而非"创作者"。
四、JSON 解析的技术细节
4.1 从大模型响应中提取 JSON
大模型返回的响应通常是一段完整的文本,可能包含一些额外的说明文字。例如:
根据您的要求,我对这首诗词进行了评价,结果如下: { "evaluation": "这首诗韵律工整...", "score": 85 } 希望这个评价对您有帮助。为了准确提取 JSON 部分,我实现了一个通用的extractJsonValue方法:
privateStringextractJsonValue(StringjsonString,StringfieldName){// 查找JSON开始和结束标记intstartIndex=jsonString.indexOf("{");intendIndex=jsonString.lastIndexOf("}");if(startIndex==-1||endIndex==-1||startIndex>=endIndex){thrownewRuntimeException("未找到有效的 JSON 格式");}Stringjson=jsonString.substring(startIndex,endIndex+1);// 后续解析逻辑...}这个方法的核心思路是:定位 JSON 对象的边界(第一个{和最后一个}),然后从中提取指定字段的值。这样做的好处是即使大模型在 JSON 前后添加了一些额外文字,也能准确解析。
4.2 异常处理策略
在实际运行中,大模型偶尔会出现 JSON 格式不规范的情况,比如缺少引号、逗号位置错误等。对于这类情况,代码采用了两层防护:
第一层:格式校验。在extractJsonValue方法中检查是否找到了合法的 JSON 边界,如果没有则抛出异常。
第二层:全局捕获。在evaluatePoem和rewritePoem方法的外层用try-catch包裹,捕获所有异常并转换为友好的错误消息返回给前端。
这种设计确保了即使大模型返回的数据有问题,系统也不会崩溃,而是给用户一个明确的错误提示。
五、总结
诗词评价与AI改写功能的实现,本质上是在探索如何让大模型成为专业的诗词教练。
评价评分功能通过五个维度的评分标准和 JSON 格式约束,让大模型的评价变得结构化和可量化。AI改写功能通过双字段输出(aiContent+aiExplain)和六条改写要求,让大模型的改写变得透明和可理解。
