大家是否有这样的烦恼,每天会议或待办事项众多,为了把这些待办事项记住我们需要采用日历这些软件来帮我们管理或通知事项。那么问题来了,不同的人通知的不同事项写得五花八门,有没有办法把别人发过来的通知自动解析,自动推送到自己手机上呢?
答案是有的,我们采用大模型进行文本解析,然后结合检索增强生成(RAG)对LLM进行准确性提升,从而达到使用简单、准确性逐渐提高的目的。下面我将介绍如何完全基于免费公有云进行全流程开发。
一、 web和后台程序
Cloudflare Pages是Cloudflare公司推出的一个静态网站托管服务,专门为开发者提供构建和部署现代化、高性能网站的解决方案。随后在pages引入了funtion,至此也支持workers这样的应用,成为了一个前、后台应用都能实现的网站平台。
在使用的过程中我发现一个很厉害的功能,在本地调试时也能自动引用大模型生成能力。
二、大语言模型
Cloudflare 的Workers AI支持30多种20B以下模型,每天有足够的调用量,以学习为目的基本够用。根据提供的文本,LLM根据要求返回JSON格式的会议主题、开始时间、结束时间、会议地点等。模型采用@cf/qwen/qwen1.5-14b-chat-awq,提示词如下:
let messages = [
{ role: 'system', content: '你是一个AI日程安排助手,请根据我提供的内容提取日程信息,并用JSON格式返回, 格式为 {"SUMMARY":"日程主题、简介、总结或概括", "DTSTART":"日程开始时间,格式为:20240525T063000","DTEND":"日程结束时间,格式为:20240525T063000","DESCRIPTION","日程详细描述信息","LOCATION":"会议地点"}' },
{ role: 'system', content: '只回复json格式的内容即可,今天的日期是:' + getTodayDate() + ';如果没有说明会议结束时间或会议时长,默认为开始时间加1小时;如果没有说明会议具体几点开始则会议从当天0点开始24点结束,dtstart和dtend只能按要求的日期格式回答,采用东八区时间,不要采用,无法提取的内容不要回复该字段' }
]
三、 RAG
引入检索增强生成(RAG)目的时为了提升日程解析的准确性,当你使用越多的时候,系统会自动把你之前修正过的对话作为上下文提供给llm,从而快速提升模型输出的准确性,例如下图1,第一次问会议地点识别为“1会议室”,但是我们帮它修正为“第一会议室”,后续再问“1会”的时候LLM就会自动识别为“第一会议室”,这就是RAG能够减轻幻觉,提升准确性的好处。
RAG第一步是量化,直接采用Workers AI的量化模型,向量数据库采用https://qdrant.tech/免费服务,向量数据库是一种专门设计用于高效存储和查询高维向量的数据库。在传统的OLTP和OLAP数据库中数据以行和列的方式组织(这些被称为表),查询是基于这些列中的值进行的。然而,在某些应用中,如图像识别、自然语言处理和推荐系统,数据通常以高维空间中的向量形式表示,这些向量加上一个ID和有效负载,就是我们存储在类似于Qdrant的向量数据库中的元素。
四、 ICS文件保存
日历文件以ICS作为后缀,采用Cloudflare R2作为文件存储空间。