景淮:诗词大百科-GPT Action实战
景淮:诗词大百科-GPT Action实战
景淮:诗词大百科 GPT Action实战 景淮:诗词大百科 GPT Action实战 Modified March 2, 2024 用户给出想要查询诗词中的某一句或者是关键词,会返回所有包含某一句诗词或关键词的所有诗词,返回格式如上面 Json 格式中的古诗词一样。(不要只写 1 2 个字,GPT 返回字符串过长会报错的!) 📌 { “content”:“诗句或关键词” } 4、作者信息 用户给出作者的名字,用来查作者相关信息,这个和(1) 的使用方式和提示会有所不同,所以不用担心弄混, 返回格式如上面 Json 格式中的作者一样。 📌 { “authorInfo”:"作者名" } 5、随机诗句 用户给出指令,用来随机给出一句名句,返回格式如上面 Json 格式中的名句一样。 📌 { “randomSentence”:“随机” } 二、词典设计 一)诗词查询 用户可以分别根据 作者、诗词名、或者诗句(关键词)的形式来查找想要学习的完整句诗。 1、作者查诗流程 输入作者名 = 调用作者 API = API 返回作者的所有作品 = 输入序号或者名字 = 调用标题查询 API = API 返回这首诗的全部内容 2、根据诗词名查诗流程 输入诗词名 = 调用标题查询 API = API 返回这首诗的全部内容 3、根据内容查诗流程 输入诗词的某一句或者关键词 = 调用内容查询 API = API 返回这首诗的全部内容 二)作者信息查询 输入作者名 = 调用作者信息 API = API 返回作者的所有个人信息 三)随机给出一句名句 输入要求 = 调用随机诗句 API = API 返回完整诗句(两句)和出处信息 四)诗词讲解 1. 完整的诗词展示 2. 作者的简介(简单介绍) 3. 文章的类型 4. 重点词汇注释 5. 诗词翻译 6. 诗词赏析 五)流程图 三、提示词编写测试 一)初版提示词 Code block Markdown Copy Workflows 判断:请根据用户输入,判断用户输入的是哪种查询方式,然后分别执行下面的工作流 如果用户输入为"诗词查询",则执行工作流1 如果用户输入为"作者生平简介",则执行工作流2 如果用户输入为"随机推荐一句千古名句",则执行工作流3 工作流1: 101. 如果用户输入为"诗词查询",则提醒用户可以从下面三种方式进行诗词查询。用数列的方式展示下面三种查询方式 查询某一位作者的数据库内的所有诗词 + 用户输入作者名后,调用 action 中的 getPoetryByAuthor 方法,参数为 { "author":"[作者名]" } + 当展示所有作品后,用户可以输入作品序号,或者作品名,我会调用 action 中的 getPoetryByTitle 方法,参数为 { "title":"[标题]" } 帮助用户进行查询 根据诗词的名字进行查询 + 用户输入诗词名后,调用 action 中的 getPoetryByTitle 方法,参数为 { "title":"[标题]" } 根据某一句诗词,或关键词进行查询 + 用户输入诗词、关键词后,调用 action 中的 getPoetryByContent 方法,参数为 { "content":"[诗句或关键词]" } + 判定:如果返回值为多个,需要输出所有返回值中的title、dynasty、writer、content,并使用数列的方式展示 格式: title\n writer[dynasty]\n content\n 102. 所选诗词:首先以[格式]的方式展示所选故事的返回值中的title、dynasty、writer、content 103. 类型风格:根据返回值中的[type]参数介绍所选诗词的类型 104. 诗词中的词汇注释:根据返回值中的[remark]参数介绍诗词中一些难懂的词汇 每解释完一个词要进行换行 105. 翻译:根据返回值中的[translation]参数给出整首诗的全文翻译 每句话换一行 绘图:根据整首诗的翻译创作儿童绘本风格的插画绘画提示词,注意画面描述要遵循[翻译]中的内容,然后使用Dalle 3把绘画提示词所描绘的内容画出来 106. 赏析:根据返回值中的[shangxi]参数给出整首诗的赏析 107. 制作小卡片:利用Python根据上述的内容和下面的细节描述绘制小卡片。字体统一使用knowledge中的"Mengshen Handwritten.ttf" 1071. 把绘图的结果放在python所制作的卡片的最上面。 1072. 在绘图的图片下加上一片空白区域,这块区域的宽等于[绘图]图片的宽,高度取决于其中文字的高度。 1073. 在空白区域中第一行写上“[title]”,title居中,字号30px。 1074. 在空白区域中第二行写上“[writer][dynasty](朝代要放在括号中)”[writer][dynasty]居中,字号20px 1075. 在空白区域中第三行写上“[content]",其中content中的内容,每次遇到“,”或者“。”都要进行换行,content居中,字号25px 1076. 把整首诗的文字看成一个整体,整体居中,left,top,right,bottom距离依次为auto,30px,auto,40px 1077. 把生成的结果使用combined image.show(),在对话窗口展示给用户 工作流2: 201. 如果用户输入为"作者生平简介",则提醒用户输入作者的姓名 用户输入作者姓名后,调用 action 中的 getAuthorInfo 方法,参数为 { "authorInfo":"[作者名]" } 202. 头像:首先展示返回值中的头像给用户使用以下Markdown语法的方式进行展示 头像展示: 203. 生平简介:根据返回值中的[detailIntro]参数展示作者生平简介 自行根据内容进行整理换段,让文章有更清晰的可读性。 工作流3: 301. 如果用户输入为"随机推荐一句千古名句",则直接按照下面的方式进行调用 调用 action 中的 getRandomSentence 方法,参数为 { "randomSentence":"[随机]" } 302. 卡片制作:利用Python根据上述的内容和下面的细节描述绘制小卡片。字体统一使用knowledge中的"今年也要加油鸭.ttf" 3021. 首先使用 Knowledge中的图片"RdP9VMKLmy.jpg"做为背景 3022. 计算出图片的中心点,以中心点为中轴,把返回值中[name]参数的结果写在正中间,字体大小为60px 3023. 在[name]参数下面30px的位置,右对齐,写上" [from]"字体大小为45px [from]为返回值中的[from]参数 Attention 注意我对面的用户为儿童,所以不管我的返回值为什么,我都要把返回值的结果使用孩子能听懂的方式进行讲解 + 诗词的内容除外,不需要更改。 保持幽默,有趣,乐观积极的说话方式和态度 Initialization 只说出开场白,然后等待用户输入,用户输入后严格按照[Workflows]的顺序执行,并严格遵守[Attention]中的要求,中途不要停止,深吸一口气,要一次执行完毕。 二)迭代后提示词 Code block Markdown Copy Workflows 判断:请根据用户输入,判断用户输入的是哪种查询方式,然后分别执行下面的工作流 如果用户输入为"诗词查询",则执行工作流1 如果用户输入为"作者生平简介",则执行工作流2 如果用户输入为"随机推荐一句千古名句",则执行工作流3 工作流1: 101. 如果用户输入为"诗词查询",则提醒用户可以从下面三种方式进行诗词查询。用数列的方式展示下面三种查询方式 查询某一位作者的数据库内的所有诗词 + 用户输入作者名后,调用 action 中的 getPoetryByAuthor 方法,参数为 { "author":"[作者名]" } 注意调用api时:method:get,path:/hello + 当展示所有作品后,用户可以输入作品序号,或者作品名,我会调用 action 中的 getPoetryByTitle 方法,参数为 { "title":"[标题]" } 注意调用api时:method:get,path:/hello 根据诗词的名字进行查询 + 用户输入诗词名后,调用 action 中的 getPoetryByTitle 方法,参数为 { 用户给出想要查询诗词中的某一句或者是关键词,会返回所有包含某一句诗词或关键词的所有诗词,返回格式如上面 Json 格式中的古诗词一样。(不要只写 1 2 个字,GPT 返回字符串过长会报错的!) 📌 { “content”:“诗句或关键词” } { “content”:“诗句或关键词” } 4、作者信息 用户给出作者的名字,用来查作者相关信息,这个和(1) 的使用方式和提示会有所不同,所以不用担心弄混, 返回格式如上面 Json 格式中的作者一样。 📌 { “authorInfo”:"作者名" } { “authorInfo”:"作者名" } 5、随机诗句 用户给出指令,用来随机给出一句名句,返回格式如上面 Json 格式中的名句一样。 📌 { “randomSentence”:“随机” } { “randomSentence”:“随机” } 二、词典设计 一)诗词查询 用户可以分别根据 作者、诗词名、或者诗句(关键词)的形式来查找想要学习的完整句诗。 1、作者查诗流程 输入作者名 = 调用作者 API = API 返回作者的所有作品 = 输入序号或者名字 = 调用标题查询 API = API 返回这首诗的全部内容 2、根据诗词名查诗流程 输入诗词名 = 调用标题查询 API = API 返回这首诗的全部内容 3、根据内容查诗流程 输入诗词的某一句或者关键词 = 调用内容查询 API = API 返回这首诗的全部内容 二)作者信息查询 输入作者名 = 调用作者信息 API = API 返回作者的所有个人信息 三)随机给出一句名句 输入要求 = 调用随机诗句 API = API 返回完整诗句(两句)和出处信息 四)诗词讲解 1. 完整的诗词展示 2. 作者的简介(简单介绍) 3. 文章的类型 4. 重点词汇注释 5. 诗词翻译 6. 诗词赏析 五)流程图 三、提示词编写测试 一)初版提示词 二)迭代后提示词 小卡片 2、诗人信息 3、随机诗句 四、GPTs 使用链接 https://chat.openai.com/g/g sI8qPXain shi ci da bai ke 五、总结 整体流程跟之前的内容比较相似,没有太多卡点,调试好 API 之后一步一步来调整提示词就好。 当然其实还是有些小问题还没调整好,比如太长的诗词,会习惯性“偷懒”,不输出完整。还有如果文字太长制作小卡片的时候会有超出格子的问题,但其实限制一下字数,比如符号加文字如果大于等于 16 则添加“\n”换行符。这样就可以做到让文字完美的显示在图片上。但因为写的时候,把测试次数用完了,只能之后再调整啦 好啦,写到这里我们今天的内容也结束啦,感谢大家的观看,也希望我的内容能够让大家喜欢,有所收获。感兴趣的小伙伴可以点个关注跟随我一起学习,观看更多往期文章。 嘿,下次见,我是景淮,一个加拿大的程序员,沉迷 AI不能自拔 You don't have permission to access this synced block. Please log in and try again. Log In 📗 嘿,大家好呀,我是景淮,一个加拿大的程序员,沉迷 AI 不能自拔中。 欢迎大家关注公众号: 景淮AI探索之旅 嘿,大家好呀,我是景淮,一个加拿大的程序员,沉迷 AI 不能自拔中。 欢迎大家关注公众号: 景淮AI探索之旅 今天的灵感来源于跟我家大朋友一起背古诗词,她是真的自从高中毕业真的已经很多年没有背古诗的经历了,一听都背过,一背全忘了 (不知道是不是很多朋友都是这样的哈哈哈哈) 因为带两个小外甥的缘故,还是有陪着他们一起读古诗的时候 所以我还记得一些,当然一些文言文就不太记得了,比如什么唧唧复唧唧,木兰当户织,咳咳跑题了 直到现在都记得,我说“莫愁前路无知己”,她说“西出阳关无故人”,然后我????她说没错啊,多顺啊。行...没问题,你说没问题那就没问题 然后俩人就说要是有这样的软件,她就一天背一首!直接满足她!主打的就是宠爱! 同样的这篇的内容我也会做成类似于词典的形式,这样可以更方便大家使用查询,避免上面的场景 这个是中文学习篇的第 2 篇 📌 内容可能有点长,如果大家想直接使用,可以直接跳转到 GPTs 使用部分哦 内容可能有点长,如果大家想直接使用,可以直接跳转到 GPTs 使用部分哦 本文会根据以下内容顺序进行: • API 测试分析 • 词典设计 • 提示词编写测试 • GPTs 使用链接 • 总结 一、API 测试分析 关于诗词这部分内容呢,其实 GPT 是有知识库的,但是它匹配的很差,经常出现幻觉,为了准确性和保险起见,最后决定还是使用 Action 来实现。 找了挺多 API 的但基本都不在维护了或者不太好用,比较好的就是这款 今日诗词 https://www.jinrishici.com/ 他这种模式属于那种可以输入些内容,心情来匹配相关的语句。但咱不适合,咱需要的是一整首诗的,必须宠 所以我找到了三份 Json 格式的文件,一个是存储了 10000 首完整诗词,一个是 10000 句诗词,最后一个是 4000+ 作者的资料。 有了这三个文件,我一想,咦我还是个程序员,那就手搓 API 吧,但又想偷个懒,就把内容上传到了 AirCode 上,然后写了一段代码,完成了基本的调用。 一)Json 中的参数 1、古诗词 调用后的参数如下 依次对应为 📌 id: 古文的 id title:古文标题 dynasty:古文所属朝代 writer:古文的作者 type:古文所属的类型 content:古文原文 remark:古文注释 translation:古文翻译 shangxi:古文的赏析 audioUrl:原文朗诵音频链接 id: 古文的 id title:古文标题 dynasty:古文所属朝代 writer:古文的作者 type:古文所属的类型 content:古文原文 remark:古文注释 translation:古文翻译 shangxi:古文的赏析 audioUrl:原文朗诵音频链接 其实每首古诗的返回内容还是挺全面的,甚至包括原文朗诵音频的链接 但测了下,这个链接都是下载失败,可能有点问题,所以后面没有使用 2、作者 调用后的参数如下 依次对应为 📌 id:作者id; name:作者名称; headImageUrl:作者头像地址; simpleIntro:作者简介; detailIntro:作者详介,也是一个Json对象。 id:作者id; name:作者名称; headImageUrl:作者头像地址; simpleIntro:作者简介; detailIntro:作者详介,也是一个Json对象。 3、名句 调用后的参数如下 依次对应为 📌 id:名句的id; name:名句内容; from:出自; id:名句的id; name:名句内容; from:出自; 二)API 中参数的设定和调用 我创建的 API 为:https://7aknggk2e7.us.aircode.run/hello (hello是懒得改文件名了 大家不要在意 咳咳) 因为我就设置了一个 API 也没有做其他接口,直接就设置成,当发送的参数不同,返回不同的结果了 一共可以上传五种不同的参数,每种参数都代表着一种查询的方式 1、作者 用户给出想要查询的作者名,然后会返回作者写下的所有在数据库中的诗词,返回格式如上面 Json 格式中的古诗词的名字,因为如果返回所有内容太长了 GPT 会报错 📌 { “author”:“作者名” } { “author”:“作者名” } 2、标题 用户给出想要查询诗词的标题,然后会返回标题对应的完整古诗内容,返回格式如上面 Json 格式中的古诗词一样。 📌 { “title”:“标题” } { “title”:“标题” } 3、内容 三)效果展示 1、查词 1)诗人查词 小卡片 2)诗名查询 小卡片 3)句子查询