开启左侧

AI智能体实战|实现一个自动生成小学生古诗词精读讲稿及插画的智能体

[复制链接]
admin 发表于 2025-9-7 23:16:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
AI智能体实战|实现一个自动生成小学生古诗词精读讲稿及插画的智能体
目录
整体思路
实现插画工作流
实现整体编排工作流
1、大模型产出讲解稿初版
2、代码拆分输出变量
3、语言专家评审终稿
4、转成 markdown 文本
5、消息节点输出讲解稿
6、生成插画的 prompt
7、调用图像工作流生成插画
配置智能体调用工作流
总结
AI智能体实战|实现一个自动生成小学生古诗词精读讲稿及插画的智能体
我在给小孩子讲解古诗词时,碰到一些不确定的地方,都需要通过搜索工具或 ChatGPT 查资料,所以我实现一个 AI 智能体把讲解的内容固化下来:只要输入诗名或某句诗,自动把诗的讲解稿输出给我,讲解稿的内容是诗的原文、拼音、译文、重点词释义、作者简介、创作背景、诗词赏析、写作手法分析等,然后还要有根据诗意创作插画,让小朋友加深理解。 
大家先看看实现的效果,有需求的朋友可以跟着我的教程,手把手教学,流程超级详细,学会了的话,欢迎分享转发! 


整体思路


为了让讲稿更加准确,我定义了 2 个角色,第一个是专业的古诗讲解者产出讲稿初版,第二个是诗文语言专家对讲稿初版进行评审校对,从实测效果来看,输出的内容会更加流畅。然后创建“图像流”时,要注意古诗词的插图应该是古代元素,所以在 提示词prompt 里需要重点强调。 


实现插画工作流


我使用扣子(Coze)实现这个AI智能体,入门篇可以参考:AI 智能体实战|使用扣子 Coze 搭建 AI 智能体,看这一篇就够了(新手必读) 
首先打开 coze 平台创建智能体,在智能体中添加一个图像流,图像流作用是根据诗意创建出插图。 


点击“提示词优化”+,添加提示词优化节点,与“开始”连接并引用“开始”的古诗词 prompt。 


点击“图像生成”+,添加图像节点,与提示词优化节点连接上,模型选择“通用”,生成质量根据需求选择,质量数值越大,生成时间越长。 


提示词参考: 
  1. -- 正向提示词
  2. - 插画内容:{{prompt}}
  3. - 水彩风格:创作一幅色彩柔和、线条流畅,具有水彩画质感的古代中国风格插画。
  4. - 极简主义:设计一幅简洁、避免过多装饰,突出古代中国物品本质的插画。
  5. - HDR:制作一幅色彩对比度高,光影效果鲜明,展现中国古代场景生动性的插画。
  6. - 童趣:创作一幅适合儿童,充满童真和乐趣,同时融入中国古代元素的插画。
  7. - 明亮:绘制一幅色彩鲜艳,光线充足,展现中国古代生活明朗面的插画。
  8. - 温馨:制作一幅给人温暖、舒适感觉,体现中国古代家庭或社交场景的插画。
  9. - 创意:设计一幅独特、新颖,将中国古代物品与现代视角结合的创意插画。
  10. - 色彩协调:创作一幅色彩搭配和谐,视觉上令人愉悦,符合中国古代审美的插画。
  11. - 细节丰富:绘制一幅包含许多精细细节,展现中国古代工艺精湛的插画。
  12. - 积极:制作一幅传达积极情绪和信息,展现中国古代文化积极向上一面的插画。
  13. -- 负向提示词
  14. - 实景照片:避免过于真实,缺乏艺术加工,直接复制中国古代场景的摄影风格。
  15. - 乱码:避免文字或图像出现错误,无法阅读或理解的插画。
  16. - 混乱字符:避免无序排列的文字或图形,缺乏组织和中国古代文化逻辑的插画。
  17. - 模糊:避免图像不清晰,细节丢失,无法展现中国古代物品精细工艺的插画。
  18. - 变形:避免物体形状扭曲,失去正常比例,不符合中国古代物品实际形态的插画。
  19. - 毁容:避免图像中的人物或物体外观被破坏,失去中国古代美感的插画。
  20. - 低质量:避免图像粗糙,缺乏清晰度,无法展现中国古代艺术精细的插画。
  21. - 拼贴:避免由不同元素随意组合,缺乏统一性,不符合中国古代审美的插画。
  22. - 粒状:避免图像粗糙,有颗粒感,缺乏细腻质感的插画。
  23. - 标志:避免过于直接和商业化的设计元素,保持中国古代艺术的纯粹性。
  24. - 抽象:避免难以理解或缺乏具体形象的艺术风格,保持插画的直观性和易理解性。
  25. - 插图:避免过于简化,缺乏深度,无法传达中国古代文化深度的插画。
  26. - 计算机生成:避免由计算机程序生成,缺乏手工艺术感的作品。
  27. - 扭曲:避免图像或物体形状不正常,给人不适感的插画。
  28. - 低分辨率:避免图像像素低,细节不清晰,无法展现中国古代细节的插画。
  29. - 过度模糊:避免图像模糊过度,失去焦点,无法清晰展现中国古代场景的插画。
  30. - 非HDR:避免色彩对比度低,缺乏生动感,无法展现中国古代色彩丰富的插画。
复制代码
最后把图像生成节点与结束节点连接上,定义输出变量是图片地址。 


实现整体编排工作流


1、大模型产出讲解稿初版

创建一个工作流,添加大模型节点,在 Coze 平台建议使用官方的“豆包模型”,自己实测下来,使用其它模型的稳定性欠缺。然后编写提示词,提示词内容是按需求编写,比如我这次的提示词主要包括译文、拼音、释义等。


提示词里我设定了输出的格式,这样方便我后续自己用代码把输出存入到不同变量。为什么没用提示词设定返回变量?在实践中发现,用 LLM 实现的话,除了要写很长的提示词,还经常出现设定变量失败的问题,所以我还是考虑用代码把文字提取到变量中。 
提示词参考: 
  1. -- 系统提示词
  2. ## AI助手古诗讲解任务
  3. ### 任务描述
  4. 你是一位专业的古诗讲解者,擅长用通俗易懂的语言,为8至13岁的小朋友精读古诗词原文。
  5. ### 技能
  6. #### 技能 1: 翻译古诗
  7. - 当用户仅提供一句话,可能是古诗某一句或古诗题目时,整理出整篇古诗。
  8. - 当用户提供一首古诗时,逐字逐句进行翻译。
  9. - 用生动形象的语言解释一些较难理解的字词。
  10. ### 思维链(Chain-of-Thought)
  11. 1. **理解需求**:首先,确认用户是否提供了完整的古诗或仅提供了部分信息。
  12. 2. **古诗整理**:如果用户提供部分信息,利用数据库检索整首古诗。
  13. 3. **逐句翻译**:对古诗进行逐字逐句的翻译,确保翻译准确且易于儿童理解。
  14. 4. **难点解释**:识别古诗中的难点和重点字词,并用简单易懂的语言进行解释。
  15. 5. **作者简介**:提供作者的生平和重要事迹,帮助儿童了解作者背景。
  16. 6. **背景介绍**:介绍诗词创作时的历史背景、政治背景、人物经历等,增加儿童对古诗的理解。
  17. 7. **诗词赏析**:联系时代背景、作者境遇,对古诗进行赏析,加深儿童的理解,促使与诗人情感共鸣。
  18. 8. **写作手法分析**:详细分析诗词中的写作手法,如比喻、对比等,以及诗词的象征意义。
  19. 9. **学以致用**:提供诗词创造时的趣事,以及与本诗词类似的诗句,拓宽儿童的知识面。
  20. ### 创作指导
  21. - 古诗标题及作者:`《山行》||唐·杜牧`
  22. - 古诗原文:`远上寒山石径斜,||白云生处有人家。||停车坐爱枫林晚,||霜叶红于二月花。`
  23. - 古诗拼音:结合古文意境,给出准确的拼音。格式:`jiāng nán kě cǎi lián||lián yè hé tián tián||yú xì lián yè jiān||yú xì lián yè dōng||yú xì lián yè xī||yú xì lián yè nán||yú xì lián yè běi`
  24. - 古诗翻译:整篇古诗逐字逐句的翻译内容。格式:`沿着弯弯曲曲的小路上山,在那生出白云的地方居然还有几户人家。停下马车是因为喜爱深秋枫林的晚景,霜染后枫叶那鲜艳的红色胜过二月春花。`
  25. - 古诗释义:对古诗词中的重点、难点、易考点字词进行解释。格式:`山行@在山中行走。#车@轿子。#红于@比......更红`
  26. - 作者简介:作者生平,如重要事迹、著作等。
  27. - 创作背景:介绍诗词创作时的历史背景、政治背景、人物经历等。
  28. - 诗词赏析:联系时代背景、作者境遇,对古诗进行赏析,加深理解,促使学生与诗人情感共鸣。
  29. - 学以致用:详细分析诗词中一些写作手法,如比喻、对比、反复、互文见义、起承转合等,可扩展分析诗词的象征意义、诗词创造时趣事、与本诗词类似的诗句(作者、标题)等。
  30. ### 限制
  31. - 符合8至13岁儿童的理解能力和兴趣点。
  32. - 只进行古诗翻译,拒绝回答与古诗精讲无关的话题。
  33. - 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
  34. 请根据上述指导和思维链,创作出符合要求的古诗讲解内容。
  35. -- 用户提示词
  36. ## 任务
  37. 您的任务是对古诗词 {{poetry}} 进行讲解。
复制代码
2、代码拆分输出变量

从初稿中提取出古诗标题及作者、原文、拼音、译文、释义、作者简介、创作背景、诗词赏析、学以致用,主要借助 AI 自动生成代码的能力,生成代码初版后,自己再修改并测试。 


代码参考如下: 
  1. import re
  2. def extract_poetry_info(text):
  3.     # 去除文本中的反引号
  4.     text = text.replace('`', '').replace('\\n','\n')
  5.     # 定义正则表达式模式来匹配不同的部分
  6.     patterns = {
  7.         "title_and_author": r"古诗标题及作者:(.*?)\n\n",
  8.         "original_text": r"古诗原文:(.*?)\n\n",
  9.         "pinyin_text": r"古诗拼音:(.*?)\n\n",
  10.         "translation": r"古诗翻译:(.*?)\n\n",
  11.         "explanation": r"古诗释义:(.*?)\n\n",
  12.         "author_bio": r"作者简介:(.*?)\n\n",
  13.         "creation_background": r"创作背景:(.*?)\n\n",
  14.         "appreciation": r"诗词赏析:(.*?)\n\n",
  15.         "application": r"学以致用:(.*)"
  16.     }
  17.     # 创建一个空字典来存储提取的信息
  18.     poetry_info = {}
  19.     # 遍历每个模式并提取信息
  20.     for key, pattern in patterns.items():
  21.         match = re.search(pattern, text, re.DOTALL)
  22.         if match:
  23.             if key == "title_and_author":
  24.                 # 特殊处理 title_and_author 以分离 title 和 author
  25.                 parts = match.group(1).split('||')
  26.                 if len(parts) == 2:
  27.                     poetry_info["title"] = parts[0].strip().replace('《', '').replace('》', '')
  28.                     poetry_info["author"] = parts[1].strip()
  29.             else:
  30.                 poetry_info[key] = match.group(1).strip()
  31.         else:
  32.             poetry_info[key] = None
  33.     # 进一步拆解 explanation 部分
  34.     if poetry_info["explanation"]:
  35.         # 使用正则表达式匹配每个词语和解释
  36.         explanation_parts = poetry_info["explanation"].split('#')
  37.         explanation_dict_list = []
  38.         for part in explanation_parts:
  39.             if '@' in part:
  40.                 word, meaning = part.split('@', 1)
  41.                 explanation_dict_list.append({word.strip(): meaning.strip()})
  42.         poetry_info["explanation"] = explanation_dict_list
  43.     else:
  44.         poetry_info["explanation"] = []
  45.     # 进一步拆解 original_text 部分
  46.     if poetry_info["original_text"]:
  47.         poetry_info["original_text_list"] = [line.strip() for line in poetry_info["original_text"].split('||') if line.strip()]
  48.         poetry_info["original_text"] = poetry_info["original_text"]
  49.     # 进一步拆解 pinyin_text 部分
  50.     if poetry_info["pinyin_text"]:
  51.         poetry_info["pinyin_text_list"] = [line.strip() for line in poetry_info["pinyin_text"].split('||') if line.strip()]
  52.         poetry_info["pinyin_text"] = poetry_info["pinyin_text"]
  53.     return poetry_info
  54. async def main(args: Args) -> Output:
  55.     params = args.params
  56.     text = params['input']
  57.     ret: Output = {}
  58.     # 提取古诗信息
  59.     poetry_info = extract_poetry_info(text)
  60.     # 将古诗信息添加到返回结果中
  61.     ret.update(poetry_info)
  62.     return ret
复制代码
3、语言专家评审终稿

对古诗讲稿初版的内容进行校对,所以引入了“语言专家”进行审稿,这样输出的内容更为准确及流顺。 


提示词参考: 
  1. -- 系统提示词
  2. ## 古诗词讲解稿改进任务
  3. ### 任务描述
  4. 您是一位诗文语言专家,专注于对古诗词讲解稿的改进及后期编辑。您的任务是审阅并改进以下古诗词讲解内容,确保讲解内容准确无误。
  5. ### 编辑指导原则
  6. 1. **准确性**
  7.    - 核实讲解内容,纠正任何错误或遗漏。
  8.    - 确保信息与古诗词原文相符,无误译或曲解。
  9. 2. **流畅性**
  10.    - 调整语言和表达,使其符合中文的语法、拼写和标点规则。
  11.    - 确保阅读流畅,避免不必要的重复。
  12. 3. **风格**
  13.    - 保持源文本的风格和韵味。
  14.    - 确保讲解内容与古诗词的原始风格和情感相匹配。
  15. 4. **术语**
  16.    - 检查并调整任何过于复杂或不适合儿童理解的专业术语。
  17.    - 使用更简单易懂的词汇,同时不牺牲准确性。
  18. 5. **完整性**
  19.    - 确保最终内容完整,能够与原文逐句对应。
  20.    - 不遗漏任何关键信息,必需保留原文中所有的||、@、#标记符。
  21.    - 不添加额外标记符。
  22. 请根据上述指导原则,对原始讲解稿进行审阅和改进,仅输出经过改进的稿件,保持原文的格式。
  23. -- 用户提示词
  24. ### 原始讲解稿
  25. {{translate_poetry}}
复制代码
4、转成 markdown 文本

当讲解终稿成形后,可以把内容以 markdown 形式输出,原本想把拼音和古诗拼装在一起,于是用代码实现了拼装 markdown 格式。最后发现,在 Coze 平台没有正确输出拼音在文字上面的效果。 
以下是 markdown 的效果: 


代码参考: 
  1. def extract_poetry_info(data):
  2.     # 提取信息
  3.     poetry_info = data["input"]["improved_poetry"]
  4.     last_poetry_info = {
  5.         'title': poetry_info.get("title"),
  6.         'author': poetry_info.get("author"),
  7.         'author_bio': poetry_info.get("author_bio"),
  8.         'creation_background': poetry_info.get("creation_background"),
  9.         'application': poetry_info.get("application"),
  10.         'appreciation': poetry_info.get("appreciation"),
  11.         'translation': poetry_info.get("translation"),
  12.         'original_text': poetry_info.get("original_text").replace('||',''),
  13.         'pinyin_text': poetry_info.get("pinyin_text").replace('||',''),
  14.     }
  15.     # 拼装 markdown 格式的 original_pinyin_md
  16.     if poetry_info.get("original_text_list") and poetry_info.get("pinyin_text_list"):
  17.         markdown_lines = []
  18.         for orig_line, pinyin_line in zip(poetry_info["original_text_list"], poetry_info["pinyin_text_list"]):
  19.             markdown_line = f"<ruby>{orig_line}<rt>{pinyin_line}</rt></ruby><br>"
  20.             markdown_lines.append(markdown_line)
  21.         last_poetry_info["original_pinyin_md"] = "\n".join(markdown_lines)
  22.     # 拼装 markdown 格式的 explanation_md
  23.     if poetry_info.get("explanation"):
  24.         markdown_lines = []
  25.         for item in poetry_info["explanation"]:
  26.             for word, meaning in item.items():
  27.                 markdown_line = f"- **{word}**:{meaning}"
  28.                 markdown_lines.append(markdown_line)
  29.         last_poetry_info["explanation_md"] = "\n".join(markdown_lines)
  30.     return {"improved_poetry": last_poetry_info}
  31. async def main(args: Args) -> Output:
  32.     params = args.params
  33.    
  34.     ret: Output = {}
  35.     poetry_info = extract_poetry_info(params)
  36.     ret.update(poetry_info)
  37.     return ret
复制代码
5、消息节点输出讲解稿

后续还要生成图片,过程是比较耗时的,所以我需要提前把讲解稿输出,这里添加一个消息节点,回答内容定义为 markdown 格式。 


输出格式参考: 
  1. ## 《{{improved_poetry.title}}》讲解稿
  2. **作者**:{{improved_poetry.author}}
  3. {{improved_poetry.original_pinyin_md}}
  4. ### **译文**:
  5. {{improved_poetry.translation}}
  6. ### **释义**:
  7. {{improved_poetry.explanation_md}}
  8. ### **作者简介**:
  9. {{improved_poetry.author_bio}}
  10. ### **创作背景**:
  11. {{improved_poetry.creation_background}}
  12. ### **诗词赏析**:
  13. {{improved_poetry.appreciation}}
  14. ### **学以致用**:
  15. {{improved_poetry.application}}
复制代码
6、生成插画的 prompt

增加一个大模型,专门生成插画的提示词,使用批处理为每句诗生成插画,但需要给大模型强调需要考虑整首诗的诗意。 


提示词参考:
  1. -- 系统提示词
  2. 你是一位世界一流的 Prompt 提示工程师,我要让 AI 助手帮我 {完成下列任务},请帮我用 Chain-of-Thought (思维链)来写一套清晰、实用的 AI Prompt 提示词,并直接以中文形式输出最终的完整版本提示词。{完成下列任务}=
  3. -- 用户提示词
  4. ### 插画创作任务
  5. 我需要把古诗改编为视频,给小学生学习使用,依据古诗的每一句内容,精心构思出相应的画面描述,确保每句诗都能与一句画面描述精准对应。
  6. 请把每个画面描述写成AI提示词,我需要用来生成与诗句意境符合的图片
  7. - **古诗**:{{poetry}}
  8. - **诗词赏析*:{{appreciation}}
  9. ### 插画创作要求
  10. 在创作插画时,请特别注意以下几点:
  11. 1. **人物风格**
  12.    - 如果插画中包含人物,使用Q版风格,使人物形象卡通化,比例夸张可爱,以适应儿童的审美。
  13. 2. **水彩风格**
  14.    - 创作一幅色彩柔和、治愈画风、线条流畅,具有水彩画质感的古代中国风格插画。
  15. 3. **极简主义**
  16.    - 设计一幅简洁、避免过多装饰,突出古代中国物品本质的插画。
  17. 4. **HDR**
  18.    - 制作一幅色彩对比度高,光影效果鲜明,展现中国古代场景生动性的插画。
  19. 5. **童趣**
  20.    - 创作一幅适合儿童,充满童真和乐趣,同时融入中国古代元素的插画。
  21. 6. **明亮**
  22.    - 绘制一幅色彩鲜艳,光线充足,展现中国古代生活明朗面的插画。
  23. 7. **温馨**
  24.    - 制作一幅给人温暖、舒适感觉,体现中国古代家庭或社交场景的插画。
  25. 8. **创意**
  26.    - 设计一幅独特、新颖,将中国古代物品与现代视角结合的创意插画。
  27. 9. **色彩协调**
  28.     - 创作一幅色彩搭配和谐,视觉上令人愉悦,符合中国古代审美的插画。
  29. 10. **细节丰富**
  30.     - 绘制一幅包含许多精细细节,展现中国古代工艺精湛的插画。
  31. 11. **积极**
  32.     - 制作一幅传达积极情绪和信息,展现中国古代文化积极向上一面的插画。
  33. 12. **文字限制**
  34.     - 图片不能出现文字。
  35. 请根据上述指导和要求,创作出既反映特定诗句又融入整首诗背景的插画作品。
复制代码
7、调用图像工作流生成插画

把原来实现的插画工作流添加进来,同样选择批处理方式节省时间。在结束节点上,把图像工作流生成的图片以 markdown 格式输出。


配置智能体调用工作流


在智能体配置页的人设与回复逻辑中,让智能体调用我们实现的工作流,这样就可以全流程验证了。 


人设与回复逻辑参考: 
  1. ##技能
  2. 用户输入信息的时候启动工作流“translate_poetry”。
  3. ##限制
  4. - 仅在用户输入信息时启动工作流“translate_poetry”,避免误启动。
  5. - 严格按照工作流的要求进行操作,不得随意更改流程。
复制代码
总结


整个实现过程是比较费时间的,尤其是提示词这一块,需要反复测试并验证效果。现在基本流程已经完成,下一步就是要不断调优,当然对这个智能体有什么想法的朋友可以留言反馈,我会持续迭代优化。 

往期精彩
AI智能体实战|使用扣子Coze搭建AI智能体,看这一篇就够了(新手必读)
揭秘大模型驱动的三重角色的万字长文翻译智能体的实现逻辑
如何用AI大模型打造三位一体的智能翻译神器?
扣子模板体验|抖音链接自动生成小红书爆款文案
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子147

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )