Skip to content

加餐1 前两章课后题答案

你好,我是叶伟民。今天是国庆假期第二天,首先祝你国庆快乐。到今天为止,课程前两章的内容已经更新完了,期间我也收到了不少同学的留言评论,也期待我们能够持续交流。

你可以借着假期这段时间来查漏补缺,我也推荐你多动手操练一下,这样能帮你更好地掌握前两章的知识。

为了方便你参考对照,这次加餐,我把前两章的思考题答案集中发布出来。建议你先自己尝试思考、回答问题以后,再参考我提供的分析思路和问题解答,这样学习效果会更好。

热身赛 用 RAG 改造传统 MIS 系统

第1节课

Q:既然一个 RAG 应用无法一步到位,那么我们如何度过 RAG 应用不成熟的早期阶段呢?

A:找愿意拥抱新技术的用户作为种子用户,进行试点。一般来说,经过三个月或者半年,一个RAG应用就能在种子用户的帮助下成熟起来,可以推广给更多人用。在这个过程中,我们可以使用第7、19、20节课的知识点收集数据和反馈、制定评估指标,然后再使用第四章的知识点改进我们的RAG应用。

第2节课

Q:如果用户与 AI 进行了一万次对话(一万次应该超出了目前所有大模型的记忆上限),那么我们的应用如何处理呢?

A:好记性不如烂笔头,我们可以每十次对话就把前面的对话记录存进外部的知识库(数据库),然后根据相关问题从知识库里面检索出对应的对话记录,这样这个问题就转化为RAG问题了。

第3节课

Q:如果给了大模型一个示例,它还是无法正确输出。这时候有什么办法解决呢?

A:如果一个示例不够,那就给多几个示例,但是每个示例应该是不一样的。另外,就像我们编程不可能把所有代码写在一个函数或者类里面,整个系统也不可能只有一个提示语。我们可以像编程划分模块、类、函数一样,按模块、场景划分提示语,再根据不同模块、场景调用不同的提示语。这样的话,我们就能在不同的提示语里面给予对应的示例。

第4节课

Q:前面“调用大模型”一节中的 ernie_client_id 和 ernie_client_secret 是十分重要的,如果泄露出去会带来很大的麻烦,甚至带来金钱损失。所以在实际工作中这两个参数的具体值不应该直接写在代码里面,那么应该如何处理呢?

A:可以放在环境变量里面。然后在代码中调用环境变量来获取它们。具体实现代码如下。

ernie_client_id = os.getenv("baiduclientid")
ernie_client_secret = os.getenv("baiduclientsecret")

第5节课

Q:这节课的代码只支持销售管理模块,如果需要支持其他模块,例如生产管理模块,那该如何处理?

A:很简单,就两点。第一,把生产管理各个模块加进选项里面。第二,把生产管理的示例添加进示例里面。

第6节课

Q:如果有多个用户使用这个系统,那么如何判断哪条对话记录属于哪个用户?

A:我们可以在对话记录表里面多添加一个“用户”字段,然后根据这个字段来判断。

第7节课

Q:为了教学方便,代码中的数据库字段都是使用中文,但是实际工作中基本是英文,所以传给大模型的都会是英文而不是中文,如何处理这个问题?

A:可以写一个函数,建立一个中英文对照表,将英文替换成中文,这样大模型接收的数据库记录就变成中文了。

初级篇 开启一个全新的 RAG 项目

第8节课

Q:前面说到,在这个实战案例中,用户提问实际就是:今天的 CNET 有哪些新闻?请把这些新闻摘要并翻译成中文发给我。那么如果 CNET 每天的新闻有很多,有上千条的新闻,那么用户提问改成什么会比较合适呢?我们的实战案例又需要添加什么步骤呢?

A:很简单,假设你只对AI的新闻感兴趣,那么可以将提问改成:今天的CNET有哪些新闻 是跟AI相关的?请把这些新闻进行摘要,并翻译成中文发给我。

这时候我们的实战案例就需要多加一个步骤,从当天的所有新闻里面检索出跟AI相关的新闻,再交给AI处理,最终返回给用户。

第9节课

Q:前面我们添加了一个示例,当用户提问:前天的 CNET 新闻有哪些?应该返回序号、日期。那么如果用户提问:最近一周的 CNET 新闻有哪些?这时应该如何处理呢?

A:我们可以按照 第5节课 的学到的知识点,添加更多示例。

第10节课

Q:在新闻简报这个案例背景下,我们是否需要对所有文章都进行文本摘要呢?

A:如果一篇文章很短,例如很多“字越少,事越大”的那类新闻,就没有必要进行文本摘要了。所以在文本摘要之前,我们还需要对文章内容长度进行判断,只有长于最低长度的时候,才进行文本摘要。

第11~13节课都是动手练习的题目,相信经过练习,你也会对相关的知识点掌握得更加扎实。以上就是这次加餐的全部内容。下节课开始,我们将迎来第三个实战项目,辅助工单系统,敬请期待。