版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AI智慧课堂content目录01功能与设计分析02主体功能开发03出题和考试功能04登录与Token鉴权05定时任务处理功能与设计分析01核心功能列表(1)老师授课时进行录屏或者录音,建议进行录屏,这样不仅可以快速获取当次课堂的主要内容,也可以让学生在需要的时候回看视频,以加深对课堂内容的理解。(2)提取出视频的关键帧,用于快速预览当次视频的主要内容。(3)抽取视频中的音频,进行语音识别,这部分内容在第5章中已经做了介绍。本章直接使用语音识别技术即可。(4)将识别到的视频或音频中的文字交由大模型进行总结,形成课堂笔记,并以HTML或Markdown格式输出,在前端对HTML或Markdown格式的文档进行渲染,让内容的可读性更强。(5)为课堂内容总结出一个核心关键字,并利用在线搜索拓展课堂内容,用于出题或进行话题拓展,并将搜索出来的结果作为扩展阅读在前端界面中显示出来,供学生访问。(6)利用总结的内容通过大模型生成思维导图,学生不仅可以下载思维导图文件,还可以在线预览思维导图的内容。(7)利用大模型基于当次课堂的内容生成考题,包括单选题和简答题等题型。学生可以在线答题,并交由AI进行自动阅卷和评分。核心功能列表AI智慧课堂的界面如图7-1所示。整体实现思路(1)抽取视频中的音频。该部分功能不需要AI的介入,只需要使用Python的moviepy库就可以非常方便地将视频中的语音提取出来,并保存为MP3文件。提取完成后,可以利用Whisper进行本地语音识别,或利用Paraformer进行准确率更高的语音识别,将其转换为文本,后续的所有操作均基于该文本内容。(2)提取视频的关键帧用于快速预览视频的大致内容。这一功能并没有那么重要,因此本章主要演示一下其用法。目前比较常用的方案是使用OpenCV读取视频帧,如每隔10秒读取一帧,并计算相邻帧之间的颜色直方图差异,如果差异较大,说明是不同的画面,则截取该帧并保存为图像。OpenCV中有封装好的函数可以直接用于计算直方图和两张图之间的差异。(3)对识别到的文字进行整理总结并生成课堂笔记,这是大模型所擅长的,将原文内容结合提示词交给大模型处理即可,没有额外的操作。此处有一点需要注意,为了让前端的笔记内容可读性更强,通常建议让大模型将其生成为HTML格式,并在前端渲染出来。整体实现思路(4)大模型生成思维导图。其实大模型本身的输入只能是提示词,输出只能是文本或JSON数据,无法直接生成思维导图。获取到JSON数据后,可利用Python的xmind库将其转换为思维导图文件(XMIND文件)。生成XMIND文件后,学生即可在前端下载及使用该文件。(5)搜索出来的结果既可以用于完善出题的内容和范围,又可以将搜索结果列表呈现到前端作为学生的拓展学习内容。(6)关于AI出题和评分,首先,需要给定JSON格式的提示词模板让大模型返回。其次,针对AI评分功能,单选题本质上不需要AI进行评分,系统通过对比答案即可完成,所以AI评分的核心是对简答题进行评分。只需要通过提示词将学生答案和标准答案进行对比,就可以得到一个相对准确的分值。最后,需要通过Web系统和对数据库的操作,将这些功能整合起来,使AI智慧课堂的完成度更高。数据库设计数据库设计数据库设计完成数据表的定义和创建后,即可在model.py文件中定义数据映射关系,代码如下。主体功能开发02视频文件预处理首先,创建一个公共模块文件module.py,用于进行各种处理,以便在main.py中进行调用。在module.py模板文件中实现提取音频和音频转文字的功能。视频文件预处理其次,新建一个FastAPI项目并开发后端接口与前端进行交互。实现首页的渲染、视频上传和预处理等功能的后端接口代码。视频文件预处理再次,创建首页的模板界面,该界面用于视频文件上传及显示视频信息。由于后续功能较多,因此这里将HTML、CSS和JavaScript分为3个文件分别进行保存。将首页命名为index.html,代码如下。视频文件预处理该界面引入的JavaScript源文件script.js中的代码如下。视频文件预处理此时,用户登录功能暂时还不需要,可以先不实现。接下来实现整个界面的CSS,文件名为style.css,内容如下。视频文件预处理最后,测试首页、后端视频转语音以及语音识别成文字的功能是否正常。如果代码运行正常,则运行结果如图7-2所示。生成课堂笔记以下代码在module.py中添加了一个函数summarize(),用于对当次课堂的内容进行摘要。该代码的功能就是让大模型对文本内容进行总结,其重点在于编写一段清晰明了的提示词指令,让大模型清楚自己的任务。示例代码如下。生成课堂笔记课堂笔记生成成功后,需要将其在数据库中保存起来。因为上述代码最好在上传视频成功后就进行调用,所以需要对后端接口/upload进行修改,代码如下。生成课堂笔记为了将课堂笔记在前端界面中正常显示出来,还需要开发一个后端接口和一个前端模板界面。后端接口从前端获取参数videoid,并查询该视频的信息,并将其填充到模板界面中,代码如下。生成课堂笔记模板界面文件detail.html的源代码如下。生成思维导图利用大模型生成思维导图数据生成思维导图利用大模型生成思维导图数据生成JSON数据后,同样需要将其保存到数据库中。在main.py的/upload接口中保存该JSON字符串,相关代码如下。生成思维导图生成思维导图文件有了正确的JSON数据后,即可利用Python中的xmind库生成思维导图文件。这一过程的关键操作就是利用递归来读取JSON数据中的层级,并通过xmind库的各类接口写入对应的内容,代码如下。生成思维导图前端渲染与下载前端要渲染思维导图,需要将数据库中的JSON数据读取到前端,并利用jsmind库进行渲染。此处需要在detail.html模板界面中先引入jsmind库的CSS样式和JavaScript库文件,实现代码如下。生成思维导图前端渲染与下载在前端渲染的思维导图效果如图7-4所示。生成视频关键帧视频关键帧的提取主要依赖OpenCV库。OpenCV库的VideoCapture()函数不仅可以获取摄像头数据,还可以获取视频数据。以下代码展示了如何提取关键帧,并将其保存到对应的以视频文件名命名的文件夹中。生成视频关键帧视频帧率的截取代码可以放到视频上传之后。在前端界面中遍历并显示图像时,只需要前端添加模板渲染部分的代码,并以视频的文件名进行关联。生成视频关键帧同时,需要在后端接口/detail中添加一段代码,用以读取和生成模板界面可用的keyframes。修改后的完整代码如下。生成视频关键帧视频关键帧展示的运行结果如图7-5所示。拓展知识引用首先,利用关键字在线搜索并获取搜索结果,将其保存到视频信息表的reference列中。其次,更新/upload接口,保存生成的搜索结果,与前面生成的课堂笔记和思维导图的保存方式完全一致。拓展知识引用最后,实现/detail接口更新和前端界面显示功能。/detail接口代码如下。建议将detail.html前端界面显示代码添加到界面末尾。出题和考试功能03生成考题以下代码(位于module.py文件中)演示了如何让大模型生成考题并按照指定格式输出。生成考题考题生成后需要保存到数据库中,此处将考题的JSON数据保存到视频信息表的examjson列中。修改/upload接口代码,保存考题并调用insert_exam()函数对考题进行解析,保存每一道考题信息到考题信息表中。生成考题接下来在module.py中新增函数insert_exam(),通过解析考题的JSON字符串内容,提取每一道考题并将其作为一行数据保存到考题信息表中。前端渲染考题以下代码实现了/exam后端接口。前端渲染考题后端接口完成后,继续开发前端模板界面exam.html,代码及注释如下。前端渲染考题上述HTML界面对应的CSS如下。提交试卷并评分一般可以通过遍历界面中的单选框的值和文本域的内容,对采集到的答案进行提交。以下代码为doExam()函数的JavaScript代码。提交试卷并评分提交答案时,上述代码构建的JSON数据格式如下。登录与Token鉴权04Token处理机制1.存储型Token存储型Token极为简单的方案就是生成一串随机字符,或者利用用户名、时间戳等元素来生成一串散列字符串,以确保唯一性。这样下次进行权限验证时,只需将前端传递过来的Token与数据库中保存的Token进行比较,找到对应的用户信息,就可以获取当前登录的用户是哪一位,其角色权限有哪些,并进行各种接口的判断。存储型Token与Session校验在机制上非常类似,主要区别在于Session是由Web服务器维护的,可定制性较弱,而Token是由系统程序维护的,可以操作的空间更大。例如,存储型Token可以将随机字符保存到Redis服务器中供各类应用程序调用,这一操作是普通的Session无法做到的。Token处理机制2.解密型Token解密型Token是指用户首次完成登录验证后,对Token进行可逆运算的加密处理,生成一个密文,该密文可以由用户名、ID、角色、时间戳等各种信息汇集后生成。这样在进行解密时,就可以解密出原始的用户名、ID、角色、时间戳等信息,并用于系统。解密型Token不需要存储,只需要生成一次后响应给前端,后续前端每次都会携带该Token用于认证。服务器解密后就可以了解是哪一位用户,以进行后续处理。通常解密型Token最好带有一个有效期信息,以便让登录信息定期失效,防止出现Token泄露后永久可用的情况。加密与解密处理目前的密码应用领域主要使用两种加密算法。第一种是不可逆加密算法,如常见的MD5、安全散列算法(SecureHashAlgorithm,SHA)等算法就是不可逆加密算法,也称为摘要算法。所谓不可逆是指无法根据密文反向解密出明文,通常这种加密算法可以应用于数字指纹识别或密码保存、密码对比等场景。在进行登录验证时,只需对用户输入的密码进行MD5加密,再与数据库中的密码字段进行比较即可确定用户输入的密码是否正确。加密与解密处理第二种加密算法通常称为可逆加密算法,即可以根据密文解密出明文,这通常用于数据通信过程的加密。加密本身只是为了通信过程的安全,最终都需要解密以获取原始数据。所谓对称加密,是指加密和解密使用相同的密钥,如主流的加密算法——高级加密标准(AdvancedEncryptionStandard,AES)算法。非对称加密,是指加密时会生成一对公私钥,使用公钥加密,使用私钥解密,如主流的RSA算法。登录与Token认证首先,后端进行AES的加解密处理。建议在.env环境变量文件中添加以下两个AES加密时会用到的参数,以便于维护AES密钥和初始向量。其次,编写以下代码对AES的加解密进行封装,解析解密后的内容,返回程序需要的信息。登录与Token认证再次,实现登录的后台接口和前端操作。在main.py中新建一个/login接口,用于登录校验和Token生成。登录与Token认证最后,处理前端登录请求,在script.js中添加以下代码。前后端校验处理除了实现登录和退出操作,还需要在每个模板界面中添加一段JavaScript代码,用于更新登录成功后的状态。将以下代码添加到各个模板界面的顶部<script>标签中。定时任务处理05定时任务处理定时任务的功能应该如何实现呢?只需要循环获取视频信息表中内容为空的所有字段,如果content为空,则说明未执行语音转文字的任务,此时定时任务调用audio_text()函数来完成该任务。如果summary为空,则说明语音转文字任务已经完成,但是未完成课堂笔记,此时可调用summarize()函数来完成该任务,以此类推。定时任务处理新建一个源文件schedule.py,编写以下代码实现定时任务的处理。智能在线客服content目录01功能与设计分析02LlamaIndex框架应用03向量数据库04项目功能实现05扩展功能优化功能与设计分析01RAG与向量数据库要计算用户提问与文档片段之间的相似度,首先需要将文本向量化,这一过程称为词嵌入。在AI模型中,针对文本的训练和推理,首先需要将文本向量化。以下代码演示了如何通过Ollama的词嵌入接口获取某个Token的词向量。理解词嵌入RAG与向量数据库可以看出,“国”和“家”两个Token的向量是不一样的,同时每个Token的向量有4096个维度。Token的向量是将文字转换为数字的极为重要的手段,只有转换为数字后才能进行运算。同时,不同的模型,其向量的维度是不同的。这里的4096仅代表“qwen3:8b”这个模型的向量维度为4096。另外,这个维度的含义是用4096个数字来描述一个Token,其中的数字均是模型训练后的结果。输出的内容大致为RAG与向量数据库计算相似度主要有以下3种方法。(1)欧氏距离:测量向量之间的直接距离,距离越短,说明相似度越高。(2)余弦相似度:关注向量之间的角度,角度越小,说明相似度越高。(3)点积相似度:通过计算两个向量的点积来判断其相似度,点积值越大,意味着两组向量越相似。向量相似度RAG与向量数据库RAG工作流程核心功能列表以蜗牛学苑的智能在线客服系统为例进行讲解。该系统主要包含以下功能。(1)管理员可以上传新的文档并进行分段保存,也可以查询文档内容和分段内容等。(2)普通用户可以通过AI对话窗口提任意问题。(3)提供联网搜索功能,以拓展AI的知识面,针对一些文档中不存在但是网络中可能存在的内容,可以进行额外补充。(4)不仅要能准确回答用户的问题,还需要能够引起用户兴趣,或促进后续流程,如建议用户到实地考察,或者要求用户留下手机号或微信号等联系方式。(5)当发现用户留下了联系方式后,应将联系方式通过FunctionCalling向某位用户发送邮件提醒。同时,为了便于后续咨询时及时掌握用户的需求,将保存当次对话的记录。整体实现思路(1)管理员可以通过Web界面对私有知识库进行管理,主要实现文档的上传、分段、修改和查询等功能。修改功能可以由删除和新增功能来代替。此处的文档在完成分段后将主要保存到向量数据库中,以便于后续操作。(2)普通用户与智能在线客服系统进行对话时,与真人对话一样,也要综合考虑各种可能的情况。这部分并没有技术难度,在AI问答系统中已经完成了相应的功能,包括联网搜索功能,此处仅需要加上知识库并完善提示词。(3)给予用户建议或者试图获取用户的联系方式,这些功能均可以通过大模型的提示词达成。(4)当用户留下联系方式后,需要通过FunctionCalling来进行函数调用,让大模型解析出联系方式并保存到数据库中。LlamaIndex框架应用02LlamaIndex概述LlamaIndex的功能与特点主要包括以下几点。(1)支持多种索引类型。LlamaIndex支持多种索引结构,包括列表索引、树形索引、图索引等,以满足不同场景下的数据管理需求。(2)灵活的数据源集成。无论是结构化数据还是非结构化数据,LlamaIndex都能轻松对接,如文档、数据库、API返回的数据等。(3)增强的检索与问答能力。LlamaIndex提供了基于上下文的增强型检索策略,使得大模型在回答用户问题时能够提供更相关、更精确的答案。(4)模块化设计。LlamaIndex的组件设计非常灵活,开发者可以根据自己的需求自定义数据处理管道、索引构建流程等。(5)开源与社区支持。LlamaIndex是开源项目,拥有活跃的社区支持和不断更新的文档,开发者可以轻松获取帮助和资源。LlamaIndex核心操作LlamaIndex的核心功能是读取文档、分段文档、建立索引、检索分段等。所以要使用LlamaIndex,必须先在项目目录下创建一个目录docs,用于存放各种文档,如Word、Markdown、PDF、TXT文档等。另外,默认情况下,LlamaIndex只支持使用OpenAI进行词嵌入和大模型对话,所以需要提前配置好Ollama环境。LlamaIndex核心操作上述代码的处理过程主要包含以下4个步骤。(1)定义词嵌入模型和AI对话模型Ollama。上述代码中虽然两者都使用了同一个模型qwen3:8b,但是其实这两个过程是独立的。词嵌入模型用于将文档转换为词向量,不同的模型词向量的结果也不同。(2)使用LlamaIndex内置的文档读取器来加载文档内容。LlamaIndex支持读取各类文档,如Word、PDF、Markdown等,在模块llama_index.readers.file中可以查看所有支持的Reader对象。当然,有些文档的读取除了需要这些支持的Reader对象,还需要额外安装Python库。(3)读取文档后,接下来需要进行向量化处理,并创建索引。创建索引只是为了让后续检索效率更快。创建完索引后即可进行持久化保存。默认情况下,LlamaIndex内置了一个轻量级的向量数据库,用于将向量和索引保存到JSON文件中。(4)通过提示词检索相关文档分段,并通过大模型进行回复。此过程通过index.as_query_engine()进行了封装,其实可以细分为3个步骤:根据用户的问题检索相似度最高的文档片段,将文档片段作为提示词的一部分提交给大模型,由大模型根据用户提问和文档片段构成的提示词进行回复。LlamaIndex核心操作上述代码的运行结果如下。文档分段与检索当LlamaIndex加载一份文档后,首先需要对文档进行分段。之所以要进行分段,核心目的就是将长文档变成文档片段,进而检索出与提示词关联度较高的片段用于大模型对话处理。以下代码可以查看文档的分段数据。文档分段文档分段与检索当文档分段完成后,即可对分段文档建立索引,那么此时需要依赖词嵌入模型对文档进行索引和向量化保存。默认情况下,LlamaIndex使用的是OpenAI的词嵌入模型,而通常国内无法正常访问到OpenAI,导致连接失败。因此,需要在代码中通过Settings指定为Ollama词嵌入模型,当然,也可以指定为国内可访问的其他模型。以下代码演示了创建索引的过程。创建索引文档分段与检索当完成索引的创建与保存后,即可进行文档检索。以下代码演示了对已保存的索引进行检索,并将匹配成功的文档片段输出的过程。文档检索文档分段与检索第一种方案是增加检索结果的返回数量,修改index.as_retriever()的参数similarity_top_k=5,可以按照相似度排序检索出5篇文档,如果仍然检索不出来,则增加值到10、20或者更大;第二种方案是修改用户提问,使之更加匹配原始文档内容,但是该方法不存在通用性,因为系统无法控制用户提出什么样的问题。优化检索结果文档分段与检索上述代码的运行结果如下。优化检索结果处理流式响应利用LlamaIndex内置函数index.as_chat_engine()创建流式响应的具体实现代码如下。处理流式响应基于检索结果自行拼接提示词,并调用对话模型来实现流式响应的具体实现代码如下。处理流式响应既然可以使用Ollama来处理流式响应,那么可以对上述代码加以修改,使用通义千问的云端模型来进行回复,具体代码如下。文档分段策略1.分段策略概述文档分段主要存在以下4个方面的问题。(1)段落过大:可能导致检索到的文档包含过多无关信息,增加了大模型理解语义的难度,降低了答案的准确性,甚至超出了大模型上下文大小的限制。(2)段落过小:可能导致检索到的文档只包含部分信息,无法全面回答用户所提的问题。(3)分段不当:可能会破坏语义的连贯性,导致原本一个完整的知识被拆分到多个段落中。(4)忽略文档结构:通常很多文档是有章节划分的,一章或者一节通常就是一个完整的话题,如果分段不当,则该结构就会被破坏,进而导致分段不当。大致了解了文档的结构后,有以下结论:文档遵守Markdown格式,有明确的层次结构,且属于问答式的内容,可以非常容易地将问题和答案放到同一个段落中,既不会导致分段不当,又可以实现高效检索。下面基于上述文档来进一步学习各种分段策略具体是如何切分文档的。文档分段策略2.Token级固定大小分段使用TokenTextSplitter()按照Token数量来进行固定大小的分段。该方案仅供演示,实际使用过程中不建议使用,因为它只关注Token,而不会关注句子,常常将一个句子从中间截断,导致AI完全无法正确、完整地表达语句。文档分段策略3.语句级固定大小分段SentenceSplitter()也是一种固定大小的分段策略,该方案相对于TokenTextSplitter()来说,最大的优势在于不会将一个句子从中间截断,无论段落划分效果如何,至少可以保证段末的语句是完整的。所以,虽然设置了chunk_size=500,但是并不保证每一段的字数均为500。文档分段策略4.语义分段语义分段指根据文本的语义进行切分,将语义关联紧密的句子或段落聚合在一起。通常做法是先将文本分成基础单元(如句子),再计算相邻单元的语义相似度,如果相似度高于某个阈值,则合并这些单元,直到相似度显著下降时才创建一个新的块。该分段方案适用于长文本文档,不太适用于短文本文档,所分段落通常较长。同时,因为需要使用相似度来比较语句和段落,所以必须使用词嵌入模型,导致分段过程运算量较大,所花费的时间也比较长。以下代码对WoniuAI-V6.txt这个较长的文档进行分段,共分出了13个段落。文档分段策略5.递归分段递归分段采用“分而治之”的策略。首先,尝试使用一组优先级较高的、较大的文本分隔符(如段落标记、章节标记)来分割文本。其次,检查分割出的每个段落的大小。如果某个段落仍然超过预设的大小限制,则换用下一组更低优先级、更细粒度的分隔符(如句子结束符、换行符)对其进行更细粒度的分割,此过程递归进行,直到所有块都满足大小要求(注意:所得段落大小并不严格一致,而是大小不一)。此分段策略会对文档进行多粒度分段,以便检索时可以检索到最相关的文档片段。文档分段策略6.文档结构分段文档结构分段是指基于文档原本的章节层次或标签元素等进行分段。在LlamaIndex中,主要针对Markdown、HTML、JSON等文档进行结构分段。此处需要注意的是,针对HTML、JSON文档时,需要使用FlatReader对象来读取文档。Markdown文档的分段规则是按照章节层次分段,这在前面已经有所介绍。HTML文档是根据常用的段落标签(如P、H1~H6、Li、Section等)进行分段。JSON文档的分段是严格按照列表中的项目数量进行分段,如果顶层为字典,则只会分为一段。以下代码演示了这3种文档的结构分段。文档分段策略7.混合策略分段混合策略分段是指对上述各种分段策略进行混合处理,在创建索引时将各种分隔器通过参数transformations指定。以下代码演示了结合文档结构分段与语义分段两种策略来创建索引的过程。检索结果重排序在RAG技术体系中,可以优化的位置其实有两个:第一个是如何实现合理分段,第二个是如何实现精准检索。目前已经介绍了不同的分段策略,下面从检索精准度的角度来分析一下还有哪些方面可以优化。默认情况下,LlamaIndex将根据向量相似度评分来对检索结果进行排序,进而实现top_k的选择和使用。使用该对象时,需要加载一个语言模型来分析检索结果与问题的语义相关性,进而实现重排序。本书推荐使用模型BAAI/bge-reranker-v2-m3。该模型对中英文的支持效果较好。通过以下代码可完成模型的自动下载。向量数据库03Chroma的核心操作Chroma的安装非常简单,运行“pipinstallchromadb”命令即可安装。下面来看看Chroma如何对文档创建索引并进行相似度查询。Chroma的核心操作上述代码只演示了基础使用过程,一切都在内存中操作。而真实情况下肯定不能将数据仅保存到内存中,必须进行持久化存储。同时,为了让语义更加准确,建议使用Ollama作为词嵌入模型。下述代码完善了这两个功能。Chroma的核心操作上述代码运行后,会在./dbstore/chroma目录下创建向量和索引文件等内容,还会有一个chroma.sqlite3的SQLite数据库文件,其中保存了很多基础信息。如果读者想查看该数据库中的内容,则必须先安装工具DBBrowserforSQLite。该数据库中保存的数据如图8-4所示。Chroma的核心操作当完成文档添加并创建好索引后,即可对持久化向量数据进行查询,以下是查询部分的代码。Chroma的核心操作通过对比发现,使用Ollama的qwen3:8b模型进行词嵌入时,对中文的支持更完善。相较默认的all-MiniLM-L6-v2词嵌入模型,qwen3:8b可以提供更加精确的语义理解,且其计算出来的距离值更小。以下是qwen3:8b模型的输出示例。上述输出结果中的distances对应的值就是距离,距离值越小,表示相似度越高。而这个距离值在all-MiniLM-L6-v2模型中为[0.40570804476737976,1.0304499864578247]。当完成查询后,即可将查询出来的结果交由大模型处理。自行分段实现RAG以下代码演示了如何实现完整的文档分段功能和AI对话功能。Qdrant的核心操作Qdrant只支持C/S架构的访问,使其更加适用于企业级的应用。在Windows中将文件解压到任意目录,并在该目录中新建一个配置文件production.yaml,内容为Qdrant的核心操作启动Qdrant后会有两个端口,一个是HTTP端口6333,另一个是高性能远程过程调用(GoogleRemoteProcedureCall,GRPC)协议端口6334。在Python中,这两个端口均可以连接到Qdrant,但GRPC的运行速度更快。要在Python中正常访问Qdrant,必须安装Python客户端,安装命令为pipinstallqdrant-client。以下代码演示了Qdrant独立使用的过程。LlamaIndex整合Chroma为了让知识库的搭建更加高效,建议使用LlamaIndex与Chroma整合的方案来进行处理。LlamaIndex本身提供了对Chroma的支持,因此只需要运行“pipinstallllama-index-vector-stores-
chroma”命令安装、整合所需的库。新增文档并创建索引的代码如下。项目功能实现04Web前端实现以下为修改过后的HTML部分代码,CSS部分暂时不做任何调整。Web前端实现而对应的JavaScript代码可基于AI问答系统的代码进行修改,删除不必要的功能和函数,只保留对话最核心的功能,最终调整后的代码如下。用户端功能实现其次,新建一个模块文件module.py,并定义chat_llm()函数用于对话。因为此处的代码均为之前学习过的内容,所以将重点放到提示词的构建上。提示词是关系AI智能体能否良好工作的关键,必须引起重视。文档上传并建立索引首先,文档上传需要登录才可以进行操作,主要实现的功能是对文档的管理,包括上传文档、建立索引等功能。另外,智能在线客服系统要额外保存的数据信息并不多,主要是原始文档信息和文档分段内容。此处为了不再使用额外的数据库,将登录的账号信息直接固化在代码中,同时将文档信息保存到一个JSON文件中,用以代替数据库。登录的后端接口代码如下。文档信息处理文档上传的前端界面admin.html的实现代码如下。文档信息处理与之对应的CSS也与AI智慧课堂的保持一致。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 档案室借阅管理制度
- 专科刑侦档案管理制度
- 创建办档案管理制度
- 公司档案利用管理制度
- 档案馆延时服务制度
- 禁毒档案室管理制度
- 雷电安全档案管理制度
- 幼儿园档案库管理制度
- 档案室信息上报制度
- 人事档案保管保密制度
- 车厢余煤清扫协议书
- 拆除油罐协议书
- 患者心理护理要点解析
- DB13∕T 6060-2025“一河(湖)一策”方案编制技术导则
- 中国自有品牌发展研究报告2025-2026
- 2024-2025学年北京朝阳区九年级初三(上)期末历史试卷(含答案)
- GB/T 5758-2023离子交换树脂粒度、有效粒径和均一系数的测定方法
- 防雷装置维护保养制度
- 中医治疗“膏淋”医案67例
- 黄金冶炼行业三废处理综述
- 统编版高中语文选择性必修上册 在民族复兴的历史丰碑上-2020中国抗疫记 教学课件
评论
0/150
提交评论