实用教程用开源工具链搭建专属全能个人AI助理关键词开源AI助理、Ollama、LangChain、ChromaDB、微调LLM、Whisper语音、Streamlit部署摘要你有没有幻想过拥有一个像《钢铁侠》贾维斯那样懂你、听话、不用联网可选的专属AI助理从管理日程、整理笔记、翻译文档到陪你聊兴趣爱好、帮你写代码片段、甚至读取你本地PDF里的关键信息——这一切今天都可以用完全免费的开源工具链实现本文将像玩乐高积木一样带你从“零件”Ollama部署本地大模型开始“拼接”核心交互框架LangChain串联逻辑、“加装记忆库”ChromaDB向量数据库存本地知识库、“升级语音模块”OpenAI Whisper本地语音识别ElevenLabs替代方案Edge-TTS语音合成最后“装个漂亮的外壳”Streamlit快速搭建可视化界面整个过程无门槛小白也能跟着100%完成文章还会讲解背后的核心原理让你不仅会“搭积木”还懂“积木的工作原理”甚至能自己“设计新积木块”背景介绍目的和范围目的解决小白入门难问题目前很多AI助理要么付费昂贵比如ChatGPT Plus、Claude Pro要么依赖稳定的国外网络比如访问OpenAI、Anthropic官网要么配置复杂到劝退99%的非程序员比如从零部署Llama 3、Qwen 2。本文的目的就是用一键安装的工具傻瓜式的配置清晰的步骤图完整的可运行代码让任何会用电脑的人都能在2小时内如果网速好模型下载快的话1小时内拥有自己的专属AI助理满足隐私敏感需求很多人担心把自己的日程、笔记、病历、财务数据上传到云端会泄露隐私——毕竟前段时间ChatGPT的隐私泄露事件、国内AI大模型的合规问题都层出不穷。本文搭建的AI助理可以完全断网运行如果用本地模型本地向量数据库本地语音模块的话你的所有数据都只存在自己的电脑硬盘里绝对安全兼顾可扩展性和可玩性本文搭建的AI助理不是一个“死东西”而是一个“活框架”——你可以随意替换里面的大模型比如从Llama 3 8B换成Qwen 2 72B量化版或者换成专门做代码的StarCoder 2、随意添加新功能比如图片识别、视频总结、邮件自动回复、智能家居控制接口、甚至可以用自己的数据微调大模型让它变成真正“懂你的专属AI”范围本文的核心范围是搭建一个包含以下基础功能3个可选进阶功能的个人AI助理基础功能必做文字交互像和ChatGPT聊天一样和你的AI助理打字交流本地知识库问答上传你自己的PDF、Word、TXT、Markdown等文档AI助理能“读”懂这些文档并基于文档内容回答你的问题比如你上传了考研数学复习笔记问它“泰勒公式在极限中的应用有哪些”它会直接从你的笔记里找答案上下文记忆AI助理能记住你们之前的聊天内容比如你之前问它“明天下午三点有什么安排”它回答“有和张医生的预约”你接着问“需要带什么东西”它会知道你问的是“和张医生的预约需要带什么”可选进阶功能选做语音交互用本地麦克风和AI助理说话语音识别用OpenAI Whisper完全免费本地运行语音合成用Edge-TTS微软官方提供的免费API支持中文、英文等多种语言和多种音色多模型切换一键切换不同的本地大模型比如切换成专门做代码的、专门做翻译的、专门做文案的简单日程管理通过文字或语音让AI助理添加、查询、删除日程日程数据存本地SQLite数据库同样绝对安全预期读者本文的预期读者非常广泛包括但不限于完全不懂编程的小白本文会提供一键安装脚本、傻瓜式配置文件、每一步的截图提示小白只需要跟着“复制粘贴-点击下一步”就能完成想入门AI开发的初学者本文会讲解每一个工具的核心原理比如什么是大模型、什么是向量数据库、什么是LangChain并提供完整的、带详细注释的Python代码初学者可以通过修改代码来学习AI开发隐私敏感的上班族/学生党/自由职业者本文搭建的AI助理可以完全断网运行完全不用担心隐私泄露想玩开源AI的极客本文会提供可选进阶功能的实现代码极客可以在此基础上添加自己想要的任何功能文档结构概述本文的结构就像玩乐高积木的步骤准备零件第2章介绍我们需要用到的所有开源工具Ollama、LangChain、ChromaDB、Whisper、Edge-TTS、Streamlit并讲解它们的核心原理和安装方法搭建底座第3章用Ollama部署第一个本地大模型测试它能不能正常运行拼接核心框架第4章用LangChain串联本地大模型、上下文记忆模块、向量数据库模块实现基础的文字交互和本地知识库问答功能加装功能模块第5章讲解可选进阶功能的实现方法语音交互、多模型切换、简单日程管理装个漂亮的外壳第6章用Streamlit快速搭建一个可视化界面让你的AI助理看起来更专业、更易用测试和优化第7章测试你的AI助理的所有功能并讲解一些优化方法比如提高大模型的回答速度、提高本地知识库问答的准确率未来的玩法第8章讲解一些进阶玩法比如用自己的数据微调大模型、添加图片识别功能、添加智能家居控制接口总结和思考题第9章总结本文的主要内容并提出一些思考题鼓励读者进一步思考和应用所学知识术语表为了让小白也能看懂本文会把所有的专业术语都用“生活中的例子”解释一遍但为了方便以后查阅这里先列出一个术语表核心术语定义大语言模型LLM简单来说大语言模型就是一个“读了很多很多书的超级学霸”——它读了互联网上几乎所有的公开内容比如维基百科、新闻、小说、代码库学会了人类的语言和逻辑能够根据你的输入生成合理的输出比如回答问题、写文章、写代码、翻译文档常见的开源大语言模型有Llama 3Meta开发、Qwen 2阿里开发、Gemma谷歌开发、MistralMistral AI开发等本地部署简单来说本地部署就是把“超级学霸”请到你自己的家里电脑硬盘里而不是让它住在别人家的别墅里云端服务器里——这样你和它交流的时候就不用花钱也不用担心别人偷听你们的对话量化模型简单来说量化模型就是把“超级学霸”的大脑“压缩”一下——原来的超级学霸可能需要100GB的硬盘空间才能住下压缩之后可能只需要8GB、4GB甚至2GB虽然压缩之后超级学霸的智商可能会稍微下降一点点但对于普通人的日常使用来说完全足够了常见的量化格式有GGUF之前叫GGML、GPTQ、AWQ等向量数据库简单来说向量数据库就是一个“超级智能的书架”——普通的书架只能按照书名、作者、出版日期来分类放书而超级智能的书架能按照“书的内容意思”来分类放书比如你把《红楼梦》、《三国演义》、《西游记》、《水浒传》这四本书放在普通书架上它们可能会按书名拼音排序但放在超级智能的书架上它们会因为“都是中国古典四大名著”而放在一起当你问超级智能的书架“有没有讲孙悟空的书”它会直接把《西游记》找出来当你问“有没有讲贾宝玉和林黛玉爱情故事的书”它会直接把《红楼梦》找出来常见的开源向量数据库有ChromaDB、Milvus、FAISS等嵌入模型简单来说嵌入模型就是一个“翻译官”——它能把人类的语言文字翻译成“超级智能的书架”能看懂的“数字密码”向量比如“孙悟空”这三个字嵌入模型会把它翻译成一串数字比如[0.123, -0.456, 0.789, …, 0.987]“贾宝玉”这三个字嵌入模型会把它翻译成另一串数字因为“孙悟空”和“猪八戒”都是《西游记》里的人物所以它们的“数字密码”会很接近而“孙悟空”和“林黛玉”的“数字密码”会差得很远常见的开源嵌入模型有all-MiniLM-L6-v2Sentence-Transformers开发、gte-large阿里开发、bge-large智谱AI开发等LangChain简单来说LangChain就是一个“积木连接器”——它能把各种AI工具比如大语言模型、向量数据库、嵌入模型、语音识别模型、语音合成模型像搭积木一样拼在一起组成一个完整的AI应用比如你可以用LangChain把大语言模型、向量数据库、嵌入模型拼在一起组成一个本地知识库问答系统你也可以用LangChain把大语言模型、语音识别模型、语音合成模型拼在一起组成一个语音交互系统Streamlit简单来说Streamlit就是一个“快速装修师”——它能在几分钟内把你的Python代码变成一个漂亮的、可交互的网页界面不用懂HTML、CSS、JavaScript只需要写几行Python代码就能生成一个包含输入框、按钮、下拉菜单、图表等元素的网页相关概念解释上下文窗口简单来说上下文窗口就是大语言模型的“短期记忆容量”——比如一个上下文窗口为8K的大语言模型最多只能记住你们之前8000个左右的字符中文大概4000个词英文大概8000个词的对话内容如果超过了这个容量它就会忘记之前的内容常见的开源大语言模型的上下文窗口有8K、16K、32K、128K甚至1M等检索增强生成RAG简单来说检索增强生成就是“先找书再回答问题”——当你问大语言模型一个问题时它不会直接回答而是先去“超级智能的书架”向量数据库里找和这个问题相关的内容然后把找到的内容和你的问题一起发给“超级学霸”大语言模型让“超级学霸”基于找到的内容回答你的问题这样做的好处是一是大语言模型不会“胡说八道”因为它的回答是基于你提供的本地文档的二是大语言模型能回答它之前没学过的内容比如你上传了自己公司的内部制度文档问它“请假流程是什么”它会直接从内部制度文档里找答案缩略词列表LLMLarge Language Model大语言模型GGUFGGML Universal FormatGGML通用格式一种常见的量化模型格式RAGRetrieval-Augmented Generation检索增强生成APIApplication Programming Interface应用程序编程接口简单来说就是两个软件之间的“通信接口”SQLite一种轻量级的本地数据库不需要安装服务器只需要一个文件就能运行核心概念与联系故事引入今天我们要讲的故事发生在一个叫“小明”的高中生身上——小明是一个“科技迷”也是一个“数学渣”他一直梦想着拥有一个像《哆啦A梦》里的“竹蜻蜓”、“时光机”那样神奇的道具但他最想要的还是一个像“哆啦A梦”那样懂他、听话、能帮他解决各种问题的“专属AI助手”有一天小明在网上看到了一篇关于“开源AI”的文章文章说“现在你不用花钱买哆啦A梦也不用找蓝胖子的口袋只用几个免费的开源工具就能自己搭一个专属AI助手”小明看完之后兴奋得跳了起来他立刻按照文章里的步骤开始操作——首先他找来了一个“超级学霸”开源大语言模型Llama 3 8B量化版并把它请到了自己的电脑里本地部署然后他找来了一个“超级智能的书架”开源向量数据库ChromaDB和一个“翻译官”开源嵌入模型all-MiniLM-L6-v2并把自己的数学复习笔记、英语单词表、语文作文范文都“翻译”成“数字密码”向量存到了“超级智能的书架”里接着他找来了一个“积木连接器”开源工具LangChain把“超级学霸”、“超级智能的书架”、“翻译官”拼在了一起最后他找来了一个“快速装修师”开源工具Streamlit给这个“拼好的积木”装了一个漂亮的、可交互的网页界面就这样小明的“专属AI助手”诞生了——小明给它起了个名字叫“小红”小红不仅能帮小明解答数学题比如“泰勒公式在极限中的应用有哪些”小红会直接从数学复习笔记里找答案、背英语单词比如“给我抽10个高中英语高频词并造10个句子”、写语文作文范文比如“给我写一篇关于‘我的梦想’的高中作文范文字数800字左右”还能记住小明之前的聊天内容比如小明之前问小红“明天下午三点有什么安排”小红回答“有数学辅导班”小明接着问“需要带什么东西”小红会知道小明问的是“数学辅导班需要带什么”后来小明又给小红“加装”了“语音模块”——用本地麦克风和小红说话小红会用温柔的女声回答小明还给小红“加装”了“多模型切换模块”——一键切换成专门做数学题的大模型、专门做英语翻译的大模型、专门写代码的大模型还给小红“加装”了“简单日程管理模块”——通过文字或语音让小红添加、查询、删除日程现在小红已经成了小明最好的朋友和学习助手——小明的数学成绩从原来的及格边缘提高到了班级前10名英语成绩也提高了很多语文作文更是经常被老师当作范文在全班朗读听完这个故事你是不是也想拥有一个像小红那样的专属AI助手别急接下来我们就一步一步来用和小明一样的开源工具链搭建属于你自己的专属AI助手核心概念解释像给小学生讲故事一样为了让你完全听懂接下来我们再用“小学生能理解的比喻”把刚才故事里提到的核心概念再解释一遍核心概念一大语言模型LLM——读了很多很多书的超级学霸想象一下你有一个超级厉害的同桌他从出生到现在每天除了吃饭睡觉就是在读书——他读了语文课本、数学课本、英语课本、物理课本、化学课本、生物课本、历史课本、地理课本、政治课本还读了《西游记》、《红楼梦》、《三国演义》、《水浒传》、《哈利·波特》、《名侦探柯南》甚至还读了《Python编程从入门到实践》、《Java核心技术》、《算法导论》这个超级厉害的同桌就是大语言模型LLM你问他任何问题他都能根据自己读的书给你一个合理的答案——比如你问他“11等于几”他会说“等于2”你问他“孙悟空的师傅是谁”他会说“菩提祖师和唐僧”你问他“如何用Python写一个‘Hello World’程序”他会直接给你写一段代码你问他“给我写一篇关于‘我的暑假生活’的小学作文字数400字左右”他会直接给你写一篇作文不过这个超级厉害的同桌也有几个缺点他可能会“胡说八道”因为他读的书太多了有时候他会把不同书里的内容混在一起或者编造一些不存在的内容——比如你问他“中国第一个登上月球的人是谁”他可能会说“杨利伟”杨利伟是中国第一个登上太空的人不是第一个登上月球的人他的“短期记忆容量”有限比如你和他聊了1000句话之后他可能会忘记你第1句话说的是什么他不知道你自己的“私人信息”比如你问他“我妈妈的生日是哪一天”他肯定不知道因为他读的书里没有你的私人信息核心概念二本地部署——把超级学霸请到你自己的家里刚才那个超级厉害的同桌原来住在很远很远的“云端学校”里——你要和他交流必须先通过“互联网电话”打给他而且有时候“互联网电话”会占线有时候会断线有时候还要花钱才能打给他现在你可以把这个超级厉害的同桌请到你自己的家里——这就是本地部署把超级学霸请到家里之后你和他交流就不用花钱了也不用担心“互联网电话”占线或断线了甚至可以在“断网”的情况下和他交流不过把超级学霸请到家里也有一个条件——你的家里电脑必须有足够大的“房间”硬盘空间和足够强的“空调”显卡或CPU比如原来的超级学霸Llama 3 8B完整版需要大约64GB的“房间”才能住下而且需要非常强的“空调”至少RTX 3090显卡才能正常工作但如果我们把他的“大脑”压缩一下变成量化版他可能只需要大约8GB的“房间”就能住下而且只需要普通的“空调”至少RTX 3060显卡甚至只需要CPU就能正常工作核心概念三向量数据库——超级智能的书架想象一下你有一个普通的书架上面放了你的语文课本、数学课本、英语课本、笔记本、漫画书等等——普通的书架只能按照“书名拼音”、“作者”、“出版日期”来分类放书如果你想找“关于泰勒公式的内容”你必须一本一本地翻数学课本和笔记本非常麻烦现在你有了一个超级智能的书架——这就是向量数据库这个超级智能的书架能按照“书的内容意思”来分类放书——比如它会把“关于泰勒公式的内容”、“关于洛必达法则的内容”、“关于导数的内容”都放在一起因为它们都是“数学微积分的内容”它会把“关于孙悟空的内容”、“关于猪八戒的内容”、“关于唐僧的内容”都放在一起因为它们都是“《西游记》的内容”它会把“关于Python的内容”、“关于Java的内容”、“关于C的内容”都放在一起因为它们都是“编程语言的内容”更神奇的是当你问超级智能的书架“有没有关于泰勒公式的内容”它会直接把所有“关于泰勒公式的内容”找出来并按照“和问题的相关程度”排序——最相关的内容排在最前面最不相关的内容排在最后面核心概念四嵌入模型——把文字翻译成数字密码的翻译官刚才那个超级智能的书架它看不懂人类的文字——它只能看懂“数字密码”向量那怎么把人类的文字翻译成“数字密码”呢这时候就需要一个翻译官——这就是嵌入模型嵌入模型会把每一段文字比如一句话、一段话、一页书都翻译成一串数字比如[0.123, -0.456, 0.789, …, 0.987]——这串数字就叫“向量”比如“孙悟空”会被翻译成向量A“猪八戒”会被翻译成向量B“林黛玉”会被翻译成向量C因为“孙悟空”和“猪八戒”都是《西游记》里的人物所以它们的向量A和向量B会很接近而“孙悟空”和“林黛玉”的向量A和向量C会差得很远超级智能的书架就是通过比较“问题的向量”和“书架里所有内容的向量”的“距离”来判断哪些内容和问题最相关的——“距离”越近相关程度越高“距离”越远相关程度越低核心概念五LangChain——把各种AI工具拼在一起的积木连接器想象一下你有很多乐高积木块——比如“超级学霸”积木块、“超级智能的书架”积木块、“翻译官”积木块、“麦克风”积木块、“扬声器”积木块等等——但这些积木块都是分开的你不知道怎么把它们拼在一起组成一个完整的AI应用现在你有了一个积木连接器——这就是LangChainLangChain能把各种AI工具像搭乐高积木一样拼在一起组成一个完整的AI应用——比如你可以用LangChain把“超级学霸”、“超级智能的书架”、“翻译官”拼在一起组成一个“本地知识库问答系统”你也可以用LangChain把“超级学霸”、“麦克风”、“扬声器”拼在一起组成一个“语音交互系统”你还可以用LangChain把这两个系统拼在一起组成一个“既可以文字交互又可以语音交互的本地知识库问答系统”核心概念六Streamlit——快速装修师刚才那个“拼好的积木”虽然功能很强大但看起来很丑——就像一个没有装修的毛坯房现在你有了一个快速装修师——这就是StreamlitStreamlit能在几分钟内把你的Python代码变成一个漂亮的、可交互的网页界面——不用懂HTML、CSS、JavaScript只需要写几行Python代码就能生成一个包含输入框、按钮、下拉菜单、图表、文件上传框等元素的网页比如你可以用Streamlit生成一个“聊天界面”——左边是“本地知识库上传区域”右边是“聊天窗口”下面是“文字输入框”和“语音输入按钮”你也可以用Streamlit生成一个“设置界面”——可以切换大模型、可以调整大模型的参数、可以选择嵌入模型等等核心概念之间的关系用小学生能理解的比喻刚才我们讲解了6个核心概念接下来我们用“小学生能理解的比喻”讲解它们之间的关系核心概念关系总览想象一下你要开一个“私人咨询公司”——**大语言模型LLM**是你的“首席顾问”本地部署是把“首席顾问”请到你的“私人办公室”电脑里向量数据库是你的“私人图书馆”嵌入模型是你的“图书管理员助理”负责把图书翻译成“首席顾问”和“私人图书馆”都能看懂的“数字密码”LangChain是你的“总经理”负责协调“首席顾问”、“私人图书馆”、“图书管理员助理”之间的工作Streamlit是你的“前台接待员”负责接待客户你把客户的问题传达给“总经理”再把“总经理”的回答传达给客户核心概念一和核心概念三、四的关系首席顾问和私人图书馆、图书管理员助理的关系当客户你问“总经理”LangChain一个问题时——如果是“普通问题”比如“11等于几”、“孙悟空的师傅是谁”“总经理”会直接把问题传达给“首席顾问”LLM“首席顾问”会根据自己的知识给你一个答案如果是“私人问题”比如“我妈妈的生日是哪一天”、“泰勒公式在极限中的应用有哪些”——这里的“泰勒公式在极限中的应用”是你自己的数学复习笔记里的内容属于你的“私人知识”“总经理”会先让“图书管理员助理”嵌入模型把问题翻译成“数字密码”然后让“私人图书馆”向量数据库找和这个“数字密码”最相关的“私人图书内容”接着把找到的“私人图书内容”和问题一起传达给“首席顾问”最后“首席顾问”会基于找到的“私人图书内容”给你一个答案这个过程就叫检索增强生成RAG核心概念一和核心概念五的关系首席顾问和总经理的关系“总经理”LangChain负责协调“首席顾问”LLM的工作——比如给“首席顾问”设定“工作规则”比如“你是一个专门帮小明解决数学题的AI助手你的回答要简洁明了要有步骤”给“首席顾问”提供“上下文信息”比如“小明之前问了你‘泰勒公式是什么’你回答了‘泰勒公式是用多项式函数来近似表示一个复杂函数的公式’现在小明问了你‘泰勒公式在极限中的应用有哪些’”给“首席顾问”提供“检索到的私人图书内容”比如“这是小明数学复习笔记里关于泰勒公式在极限中的应用的内容……”把“首席顾问”的回答传达给“前台接待员”Streamlit核心概念五和核心概念六的关系总经理和前台接待员的关系“前台接待员”Streamlit负责接待客户你并和“总经理”LangChain沟通——比如客户你通过“文字输入框”或“语音输入按钮”输入问题“前台接待员”把问题传达给“总经理”“总经理”处理完问题之后把答案传达给“前台接待员”“前台接待员”把答案显示在“聊天窗口”里或者通过“扬声器”播放出来核心概念原理和架构的文本示意图专业定义为了让想入门AI开发的初学者也能看懂接下来我们用“专业定义”和“文本示意图”讲解核心概念的原理和架构核心概念原理的文本示意图专业定义个人AI助理系统原理文本示意图 用户端你 | v 1. 输入层Streamlit |-- 文字输入用户通过Streamlit的text_input或text_area组件输入文字 |-- 语音输入用户通过Streamlit的microphone组件或自定义组件输入语音然后用Whisper将语音转换成文字 |-- 文件上传用户通过Streamlit的file_uploader组件上传本地文档PDF、Word、TXT、Markdown等 | v 2. 预处理层 |-- 文字预处理如果输入是文字直接进入下一步如果输入是语音用Whisper将语音转换成文字 |-- 文档预处理如果用户上传了本地文档用LangChain的DocumentLoader加载文档用TextSplitter将文档切分成小块Chunk用嵌入模型将小块转换成向量然后将向量存入ChromaDB向量数据库 | v 3. 核心处理层LangChain |-- 意图识别判断用户的输入是“普通问题”、“私人问题”还是“日程管理请求”可选 |-- 上下文记忆管理用LangChain的ConversationBufferMemory或ConversationSummaryMemory管理用户和AI的聊天历史 |-- 检索增强生成RAG如果是“私人问题”用LangChain的RetrievalQA链或ConversationalRetrievalChain链从ChromaDB向量数据库中检索相关的文档小块然后将检索到的文档小块、聊天历史和用户的问题一起发给LLM |-- 日程管理可选如果是“日程管理请求”用LangChain的SQLDatabaseChain链或自定义链操作本地SQLite数据库 | v 4. 生成层Ollama本地LLM |-- 接收LangChain发来的信息聊天历史、用户的问题、检索到的文档小块、日程管理请求等 |-- 根据信息生成合理的输出文字 | v 5. 输出层Streamlit |-- 文字输出将LLM生成的文字显示在Streamlit的chat_message组件里 |-- 语音输出可选用Edge-TTS将LLM生成的文字转换成语音然后用Streamlit的audio组件播放出来核心概念架构的文本示意图专业定义个人AI助理系统架构文本示意图 ┌─────────────────────────────────────────────────────────────────────────┐ │ 用户界面层UI │ │ Streamlit │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ 文件上传区域 │ │ 聊天窗口 │ │ 设置面板 │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ | v ┌─────────────────────────────────────────────────────────────────────────┐ │ 应用逻辑层LangChain │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ 意图识别模块 │ │ 上下文记忆模块 │ │ 日程管理模块 │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 检索增强生成RAG链 │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐│ │ │ │ │ 文档加载器 │ │ 文档切分器 │ │ 向量检索器 ││ │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘│ │ │ └──────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ | v ┌─────────────────────────────────────────────────────────────────────────┐ │ 模型和数据层Data Model │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ Ollama本地LLM │ │ 嵌入模型 │ │ ChromaDB向量数据库│ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ Whisper语音识别 │ │ Edge-TTS语音合成│ │ │ └──────────────────┘ └──────────────────┘ │ │ ┌──────────────────┐ │ │ │ SQLite日程数据库│ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘Mermaid 流程图核心交互流程接下来我们用Mermaid流程图更直观地展示个人AI助理的核心交互流程——从用户输入问题到AI输出答案的完整过程上传文档输入问题有无是否是否用户输入问题或上传文档判断输入类型用LangChain加载文档用TextSplitter切分文档成小块用嵌入模型将小块转换成向量将向量存入ChromaDB向量数据库返回文档上传成功提示是否有上下文记忆从上下文记忆中提取聊天历史继续下一步是否需要检索本地知识库用嵌入模型将问题转换成向量从ChromaDB向量数据库中检索相关的文档小块将聊天历史、问题和检索到的文档小块打包成提示词将聊天历史和问题打包成提示词通过Ollama API调用本地LLM本地LLM生成文字答案将文字答案存入上下文记忆是否需要语音输出用Edge-TTS将文字答案转换成语音用Streamlit播放语音并显示文字剩余内容包括开发环境搭建、核心算法原理、项目实战代码、实际应用场景、工具推荐、未来趋势等因篇幅限制可通过继续提问获取完整10000字左右的教程
实用教程:用开源工具链搭建个人AI助理
发布时间:2026/6/6 12:19:27
实用教程用开源工具链搭建专属全能个人AI助理关键词开源AI助理、Ollama、LangChain、ChromaDB、微调LLM、Whisper语音、Streamlit部署摘要你有没有幻想过拥有一个像《钢铁侠》贾维斯那样懂你、听话、不用联网可选的专属AI助理从管理日程、整理笔记、翻译文档到陪你聊兴趣爱好、帮你写代码片段、甚至读取你本地PDF里的关键信息——这一切今天都可以用完全免费的开源工具链实现本文将像玩乐高积木一样带你从“零件”Ollama部署本地大模型开始“拼接”核心交互框架LangChain串联逻辑、“加装记忆库”ChromaDB向量数据库存本地知识库、“升级语音模块”OpenAI Whisper本地语音识别ElevenLabs替代方案Edge-TTS语音合成最后“装个漂亮的外壳”Streamlit快速搭建可视化界面整个过程无门槛小白也能跟着100%完成文章还会讲解背后的核心原理让你不仅会“搭积木”还懂“积木的工作原理”甚至能自己“设计新积木块”背景介绍目的和范围目的解决小白入门难问题目前很多AI助理要么付费昂贵比如ChatGPT Plus、Claude Pro要么依赖稳定的国外网络比如访问OpenAI、Anthropic官网要么配置复杂到劝退99%的非程序员比如从零部署Llama 3、Qwen 2。本文的目的就是用一键安装的工具傻瓜式的配置清晰的步骤图完整的可运行代码让任何会用电脑的人都能在2小时内如果网速好模型下载快的话1小时内拥有自己的专属AI助理满足隐私敏感需求很多人担心把自己的日程、笔记、病历、财务数据上传到云端会泄露隐私——毕竟前段时间ChatGPT的隐私泄露事件、国内AI大模型的合规问题都层出不穷。本文搭建的AI助理可以完全断网运行如果用本地模型本地向量数据库本地语音模块的话你的所有数据都只存在自己的电脑硬盘里绝对安全兼顾可扩展性和可玩性本文搭建的AI助理不是一个“死东西”而是一个“活框架”——你可以随意替换里面的大模型比如从Llama 3 8B换成Qwen 2 72B量化版或者换成专门做代码的StarCoder 2、随意添加新功能比如图片识别、视频总结、邮件自动回复、智能家居控制接口、甚至可以用自己的数据微调大模型让它变成真正“懂你的专属AI”范围本文的核心范围是搭建一个包含以下基础功能3个可选进阶功能的个人AI助理基础功能必做文字交互像和ChatGPT聊天一样和你的AI助理打字交流本地知识库问答上传你自己的PDF、Word、TXT、Markdown等文档AI助理能“读”懂这些文档并基于文档内容回答你的问题比如你上传了考研数学复习笔记问它“泰勒公式在极限中的应用有哪些”它会直接从你的笔记里找答案上下文记忆AI助理能记住你们之前的聊天内容比如你之前问它“明天下午三点有什么安排”它回答“有和张医生的预约”你接着问“需要带什么东西”它会知道你问的是“和张医生的预约需要带什么”可选进阶功能选做语音交互用本地麦克风和AI助理说话语音识别用OpenAI Whisper完全免费本地运行语音合成用Edge-TTS微软官方提供的免费API支持中文、英文等多种语言和多种音色多模型切换一键切换不同的本地大模型比如切换成专门做代码的、专门做翻译的、专门做文案的简单日程管理通过文字或语音让AI助理添加、查询、删除日程日程数据存本地SQLite数据库同样绝对安全预期读者本文的预期读者非常广泛包括但不限于完全不懂编程的小白本文会提供一键安装脚本、傻瓜式配置文件、每一步的截图提示小白只需要跟着“复制粘贴-点击下一步”就能完成想入门AI开发的初学者本文会讲解每一个工具的核心原理比如什么是大模型、什么是向量数据库、什么是LangChain并提供完整的、带详细注释的Python代码初学者可以通过修改代码来学习AI开发隐私敏感的上班族/学生党/自由职业者本文搭建的AI助理可以完全断网运行完全不用担心隐私泄露想玩开源AI的极客本文会提供可选进阶功能的实现代码极客可以在此基础上添加自己想要的任何功能文档结构概述本文的结构就像玩乐高积木的步骤准备零件第2章介绍我们需要用到的所有开源工具Ollama、LangChain、ChromaDB、Whisper、Edge-TTS、Streamlit并讲解它们的核心原理和安装方法搭建底座第3章用Ollama部署第一个本地大模型测试它能不能正常运行拼接核心框架第4章用LangChain串联本地大模型、上下文记忆模块、向量数据库模块实现基础的文字交互和本地知识库问答功能加装功能模块第5章讲解可选进阶功能的实现方法语音交互、多模型切换、简单日程管理装个漂亮的外壳第6章用Streamlit快速搭建一个可视化界面让你的AI助理看起来更专业、更易用测试和优化第7章测试你的AI助理的所有功能并讲解一些优化方法比如提高大模型的回答速度、提高本地知识库问答的准确率未来的玩法第8章讲解一些进阶玩法比如用自己的数据微调大模型、添加图片识别功能、添加智能家居控制接口总结和思考题第9章总结本文的主要内容并提出一些思考题鼓励读者进一步思考和应用所学知识术语表为了让小白也能看懂本文会把所有的专业术语都用“生活中的例子”解释一遍但为了方便以后查阅这里先列出一个术语表核心术语定义大语言模型LLM简单来说大语言模型就是一个“读了很多很多书的超级学霸”——它读了互联网上几乎所有的公开内容比如维基百科、新闻、小说、代码库学会了人类的语言和逻辑能够根据你的输入生成合理的输出比如回答问题、写文章、写代码、翻译文档常见的开源大语言模型有Llama 3Meta开发、Qwen 2阿里开发、Gemma谷歌开发、MistralMistral AI开发等本地部署简单来说本地部署就是把“超级学霸”请到你自己的家里电脑硬盘里而不是让它住在别人家的别墅里云端服务器里——这样你和它交流的时候就不用花钱也不用担心别人偷听你们的对话量化模型简单来说量化模型就是把“超级学霸”的大脑“压缩”一下——原来的超级学霸可能需要100GB的硬盘空间才能住下压缩之后可能只需要8GB、4GB甚至2GB虽然压缩之后超级学霸的智商可能会稍微下降一点点但对于普通人的日常使用来说完全足够了常见的量化格式有GGUF之前叫GGML、GPTQ、AWQ等向量数据库简单来说向量数据库就是一个“超级智能的书架”——普通的书架只能按照书名、作者、出版日期来分类放书而超级智能的书架能按照“书的内容意思”来分类放书比如你把《红楼梦》、《三国演义》、《西游记》、《水浒传》这四本书放在普通书架上它们可能会按书名拼音排序但放在超级智能的书架上它们会因为“都是中国古典四大名著”而放在一起当你问超级智能的书架“有没有讲孙悟空的书”它会直接把《西游记》找出来当你问“有没有讲贾宝玉和林黛玉爱情故事的书”它会直接把《红楼梦》找出来常见的开源向量数据库有ChromaDB、Milvus、FAISS等嵌入模型简单来说嵌入模型就是一个“翻译官”——它能把人类的语言文字翻译成“超级智能的书架”能看懂的“数字密码”向量比如“孙悟空”这三个字嵌入模型会把它翻译成一串数字比如[0.123, -0.456, 0.789, …, 0.987]“贾宝玉”这三个字嵌入模型会把它翻译成另一串数字因为“孙悟空”和“猪八戒”都是《西游记》里的人物所以它们的“数字密码”会很接近而“孙悟空”和“林黛玉”的“数字密码”会差得很远常见的开源嵌入模型有all-MiniLM-L6-v2Sentence-Transformers开发、gte-large阿里开发、bge-large智谱AI开发等LangChain简单来说LangChain就是一个“积木连接器”——它能把各种AI工具比如大语言模型、向量数据库、嵌入模型、语音识别模型、语音合成模型像搭积木一样拼在一起组成一个完整的AI应用比如你可以用LangChain把大语言模型、向量数据库、嵌入模型拼在一起组成一个本地知识库问答系统你也可以用LangChain把大语言模型、语音识别模型、语音合成模型拼在一起组成一个语音交互系统Streamlit简单来说Streamlit就是一个“快速装修师”——它能在几分钟内把你的Python代码变成一个漂亮的、可交互的网页界面不用懂HTML、CSS、JavaScript只需要写几行Python代码就能生成一个包含输入框、按钮、下拉菜单、图表等元素的网页相关概念解释上下文窗口简单来说上下文窗口就是大语言模型的“短期记忆容量”——比如一个上下文窗口为8K的大语言模型最多只能记住你们之前8000个左右的字符中文大概4000个词英文大概8000个词的对话内容如果超过了这个容量它就会忘记之前的内容常见的开源大语言模型的上下文窗口有8K、16K、32K、128K甚至1M等检索增强生成RAG简单来说检索增强生成就是“先找书再回答问题”——当你问大语言模型一个问题时它不会直接回答而是先去“超级智能的书架”向量数据库里找和这个问题相关的内容然后把找到的内容和你的问题一起发给“超级学霸”大语言模型让“超级学霸”基于找到的内容回答你的问题这样做的好处是一是大语言模型不会“胡说八道”因为它的回答是基于你提供的本地文档的二是大语言模型能回答它之前没学过的内容比如你上传了自己公司的内部制度文档问它“请假流程是什么”它会直接从内部制度文档里找答案缩略词列表LLMLarge Language Model大语言模型GGUFGGML Universal FormatGGML通用格式一种常见的量化模型格式RAGRetrieval-Augmented Generation检索增强生成APIApplication Programming Interface应用程序编程接口简单来说就是两个软件之间的“通信接口”SQLite一种轻量级的本地数据库不需要安装服务器只需要一个文件就能运行核心概念与联系故事引入今天我们要讲的故事发生在一个叫“小明”的高中生身上——小明是一个“科技迷”也是一个“数学渣”他一直梦想着拥有一个像《哆啦A梦》里的“竹蜻蜓”、“时光机”那样神奇的道具但他最想要的还是一个像“哆啦A梦”那样懂他、听话、能帮他解决各种问题的“专属AI助手”有一天小明在网上看到了一篇关于“开源AI”的文章文章说“现在你不用花钱买哆啦A梦也不用找蓝胖子的口袋只用几个免费的开源工具就能自己搭一个专属AI助手”小明看完之后兴奋得跳了起来他立刻按照文章里的步骤开始操作——首先他找来了一个“超级学霸”开源大语言模型Llama 3 8B量化版并把它请到了自己的电脑里本地部署然后他找来了一个“超级智能的书架”开源向量数据库ChromaDB和一个“翻译官”开源嵌入模型all-MiniLM-L6-v2并把自己的数学复习笔记、英语单词表、语文作文范文都“翻译”成“数字密码”向量存到了“超级智能的书架”里接着他找来了一个“积木连接器”开源工具LangChain把“超级学霸”、“超级智能的书架”、“翻译官”拼在了一起最后他找来了一个“快速装修师”开源工具Streamlit给这个“拼好的积木”装了一个漂亮的、可交互的网页界面就这样小明的“专属AI助手”诞生了——小明给它起了个名字叫“小红”小红不仅能帮小明解答数学题比如“泰勒公式在极限中的应用有哪些”小红会直接从数学复习笔记里找答案、背英语单词比如“给我抽10个高中英语高频词并造10个句子”、写语文作文范文比如“给我写一篇关于‘我的梦想’的高中作文范文字数800字左右”还能记住小明之前的聊天内容比如小明之前问小红“明天下午三点有什么安排”小红回答“有数学辅导班”小明接着问“需要带什么东西”小红会知道小明问的是“数学辅导班需要带什么”后来小明又给小红“加装”了“语音模块”——用本地麦克风和小红说话小红会用温柔的女声回答小明还给小红“加装”了“多模型切换模块”——一键切换成专门做数学题的大模型、专门做英语翻译的大模型、专门写代码的大模型还给小红“加装”了“简单日程管理模块”——通过文字或语音让小红添加、查询、删除日程现在小红已经成了小明最好的朋友和学习助手——小明的数学成绩从原来的及格边缘提高到了班级前10名英语成绩也提高了很多语文作文更是经常被老师当作范文在全班朗读听完这个故事你是不是也想拥有一个像小红那样的专属AI助手别急接下来我们就一步一步来用和小明一样的开源工具链搭建属于你自己的专属AI助手核心概念解释像给小学生讲故事一样为了让你完全听懂接下来我们再用“小学生能理解的比喻”把刚才故事里提到的核心概念再解释一遍核心概念一大语言模型LLM——读了很多很多书的超级学霸想象一下你有一个超级厉害的同桌他从出生到现在每天除了吃饭睡觉就是在读书——他读了语文课本、数学课本、英语课本、物理课本、化学课本、生物课本、历史课本、地理课本、政治课本还读了《西游记》、《红楼梦》、《三国演义》、《水浒传》、《哈利·波特》、《名侦探柯南》甚至还读了《Python编程从入门到实践》、《Java核心技术》、《算法导论》这个超级厉害的同桌就是大语言模型LLM你问他任何问题他都能根据自己读的书给你一个合理的答案——比如你问他“11等于几”他会说“等于2”你问他“孙悟空的师傅是谁”他会说“菩提祖师和唐僧”你问他“如何用Python写一个‘Hello World’程序”他会直接给你写一段代码你问他“给我写一篇关于‘我的暑假生活’的小学作文字数400字左右”他会直接给你写一篇作文不过这个超级厉害的同桌也有几个缺点他可能会“胡说八道”因为他读的书太多了有时候他会把不同书里的内容混在一起或者编造一些不存在的内容——比如你问他“中国第一个登上月球的人是谁”他可能会说“杨利伟”杨利伟是中国第一个登上太空的人不是第一个登上月球的人他的“短期记忆容量”有限比如你和他聊了1000句话之后他可能会忘记你第1句话说的是什么他不知道你自己的“私人信息”比如你问他“我妈妈的生日是哪一天”他肯定不知道因为他读的书里没有你的私人信息核心概念二本地部署——把超级学霸请到你自己的家里刚才那个超级厉害的同桌原来住在很远很远的“云端学校”里——你要和他交流必须先通过“互联网电话”打给他而且有时候“互联网电话”会占线有时候会断线有时候还要花钱才能打给他现在你可以把这个超级厉害的同桌请到你自己的家里——这就是本地部署把超级学霸请到家里之后你和他交流就不用花钱了也不用担心“互联网电话”占线或断线了甚至可以在“断网”的情况下和他交流不过把超级学霸请到家里也有一个条件——你的家里电脑必须有足够大的“房间”硬盘空间和足够强的“空调”显卡或CPU比如原来的超级学霸Llama 3 8B完整版需要大约64GB的“房间”才能住下而且需要非常强的“空调”至少RTX 3090显卡才能正常工作但如果我们把他的“大脑”压缩一下变成量化版他可能只需要大约8GB的“房间”就能住下而且只需要普通的“空调”至少RTX 3060显卡甚至只需要CPU就能正常工作核心概念三向量数据库——超级智能的书架想象一下你有一个普通的书架上面放了你的语文课本、数学课本、英语课本、笔记本、漫画书等等——普通的书架只能按照“书名拼音”、“作者”、“出版日期”来分类放书如果你想找“关于泰勒公式的内容”你必须一本一本地翻数学课本和笔记本非常麻烦现在你有了一个超级智能的书架——这就是向量数据库这个超级智能的书架能按照“书的内容意思”来分类放书——比如它会把“关于泰勒公式的内容”、“关于洛必达法则的内容”、“关于导数的内容”都放在一起因为它们都是“数学微积分的内容”它会把“关于孙悟空的内容”、“关于猪八戒的内容”、“关于唐僧的内容”都放在一起因为它们都是“《西游记》的内容”它会把“关于Python的内容”、“关于Java的内容”、“关于C的内容”都放在一起因为它们都是“编程语言的内容”更神奇的是当你问超级智能的书架“有没有关于泰勒公式的内容”它会直接把所有“关于泰勒公式的内容”找出来并按照“和问题的相关程度”排序——最相关的内容排在最前面最不相关的内容排在最后面核心概念四嵌入模型——把文字翻译成数字密码的翻译官刚才那个超级智能的书架它看不懂人类的文字——它只能看懂“数字密码”向量那怎么把人类的文字翻译成“数字密码”呢这时候就需要一个翻译官——这就是嵌入模型嵌入模型会把每一段文字比如一句话、一段话、一页书都翻译成一串数字比如[0.123, -0.456, 0.789, …, 0.987]——这串数字就叫“向量”比如“孙悟空”会被翻译成向量A“猪八戒”会被翻译成向量B“林黛玉”会被翻译成向量C因为“孙悟空”和“猪八戒”都是《西游记》里的人物所以它们的向量A和向量B会很接近而“孙悟空”和“林黛玉”的向量A和向量C会差得很远超级智能的书架就是通过比较“问题的向量”和“书架里所有内容的向量”的“距离”来判断哪些内容和问题最相关的——“距离”越近相关程度越高“距离”越远相关程度越低核心概念五LangChain——把各种AI工具拼在一起的积木连接器想象一下你有很多乐高积木块——比如“超级学霸”积木块、“超级智能的书架”积木块、“翻译官”积木块、“麦克风”积木块、“扬声器”积木块等等——但这些积木块都是分开的你不知道怎么把它们拼在一起组成一个完整的AI应用现在你有了一个积木连接器——这就是LangChainLangChain能把各种AI工具像搭乐高积木一样拼在一起组成一个完整的AI应用——比如你可以用LangChain把“超级学霸”、“超级智能的书架”、“翻译官”拼在一起组成一个“本地知识库问答系统”你也可以用LangChain把“超级学霸”、“麦克风”、“扬声器”拼在一起组成一个“语音交互系统”你还可以用LangChain把这两个系统拼在一起组成一个“既可以文字交互又可以语音交互的本地知识库问答系统”核心概念六Streamlit——快速装修师刚才那个“拼好的积木”虽然功能很强大但看起来很丑——就像一个没有装修的毛坯房现在你有了一个快速装修师——这就是StreamlitStreamlit能在几分钟内把你的Python代码变成一个漂亮的、可交互的网页界面——不用懂HTML、CSS、JavaScript只需要写几行Python代码就能生成一个包含输入框、按钮、下拉菜单、图表、文件上传框等元素的网页比如你可以用Streamlit生成一个“聊天界面”——左边是“本地知识库上传区域”右边是“聊天窗口”下面是“文字输入框”和“语音输入按钮”你也可以用Streamlit生成一个“设置界面”——可以切换大模型、可以调整大模型的参数、可以选择嵌入模型等等核心概念之间的关系用小学生能理解的比喻刚才我们讲解了6个核心概念接下来我们用“小学生能理解的比喻”讲解它们之间的关系核心概念关系总览想象一下你要开一个“私人咨询公司”——**大语言模型LLM**是你的“首席顾问”本地部署是把“首席顾问”请到你的“私人办公室”电脑里向量数据库是你的“私人图书馆”嵌入模型是你的“图书管理员助理”负责把图书翻译成“首席顾问”和“私人图书馆”都能看懂的“数字密码”LangChain是你的“总经理”负责协调“首席顾问”、“私人图书馆”、“图书管理员助理”之间的工作Streamlit是你的“前台接待员”负责接待客户你把客户的问题传达给“总经理”再把“总经理”的回答传达给客户核心概念一和核心概念三、四的关系首席顾问和私人图书馆、图书管理员助理的关系当客户你问“总经理”LangChain一个问题时——如果是“普通问题”比如“11等于几”、“孙悟空的师傅是谁”“总经理”会直接把问题传达给“首席顾问”LLM“首席顾问”会根据自己的知识给你一个答案如果是“私人问题”比如“我妈妈的生日是哪一天”、“泰勒公式在极限中的应用有哪些”——这里的“泰勒公式在极限中的应用”是你自己的数学复习笔记里的内容属于你的“私人知识”“总经理”会先让“图书管理员助理”嵌入模型把问题翻译成“数字密码”然后让“私人图书馆”向量数据库找和这个“数字密码”最相关的“私人图书内容”接着把找到的“私人图书内容”和问题一起传达给“首席顾问”最后“首席顾问”会基于找到的“私人图书内容”给你一个答案这个过程就叫检索增强生成RAG核心概念一和核心概念五的关系首席顾问和总经理的关系“总经理”LangChain负责协调“首席顾问”LLM的工作——比如给“首席顾问”设定“工作规则”比如“你是一个专门帮小明解决数学题的AI助手你的回答要简洁明了要有步骤”给“首席顾问”提供“上下文信息”比如“小明之前问了你‘泰勒公式是什么’你回答了‘泰勒公式是用多项式函数来近似表示一个复杂函数的公式’现在小明问了你‘泰勒公式在极限中的应用有哪些’”给“首席顾问”提供“检索到的私人图书内容”比如“这是小明数学复习笔记里关于泰勒公式在极限中的应用的内容……”把“首席顾问”的回答传达给“前台接待员”Streamlit核心概念五和核心概念六的关系总经理和前台接待员的关系“前台接待员”Streamlit负责接待客户你并和“总经理”LangChain沟通——比如客户你通过“文字输入框”或“语音输入按钮”输入问题“前台接待员”把问题传达给“总经理”“总经理”处理完问题之后把答案传达给“前台接待员”“前台接待员”把答案显示在“聊天窗口”里或者通过“扬声器”播放出来核心概念原理和架构的文本示意图专业定义为了让想入门AI开发的初学者也能看懂接下来我们用“专业定义”和“文本示意图”讲解核心概念的原理和架构核心概念原理的文本示意图专业定义个人AI助理系统原理文本示意图 用户端你 | v 1. 输入层Streamlit |-- 文字输入用户通过Streamlit的text_input或text_area组件输入文字 |-- 语音输入用户通过Streamlit的microphone组件或自定义组件输入语音然后用Whisper将语音转换成文字 |-- 文件上传用户通过Streamlit的file_uploader组件上传本地文档PDF、Word、TXT、Markdown等 | v 2. 预处理层 |-- 文字预处理如果输入是文字直接进入下一步如果输入是语音用Whisper将语音转换成文字 |-- 文档预处理如果用户上传了本地文档用LangChain的DocumentLoader加载文档用TextSplitter将文档切分成小块Chunk用嵌入模型将小块转换成向量然后将向量存入ChromaDB向量数据库 | v 3. 核心处理层LangChain |-- 意图识别判断用户的输入是“普通问题”、“私人问题”还是“日程管理请求”可选 |-- 上下文记忆管理用LangChain的ConversationBufferMemory或ConversationSummaryMemory管理用户和AI的聊天历史 |-- 检索增强生成RAG如果是“私人问题”用LangChain的RetrievalQA链或ConversationalRetrievalChain链从ChromaDB向量数据库中检索相关的文档小块然后将检索到的文档小块、聊天历史和用户的问题一起发给LLM |-- 日程管理可选如果是“日程管理请求”用LangChain的SQLDatabaseChain链或自定义链操作本地SQLite数据库 | v 4. 生成层Ollama本地LLM |-- 接收LangChain发来的信息聊天历史、用户的问题、检索到的文档小块、日程管理请求等 |-- 根据信息生成合理的输出文字 | v 5. 输出层Streamlit |-- 文字输出将LLM生成的文字显示在Streamlit的chat_message组件里 |-- 语音输出可选用Edge-TTS将LLM生成的文字转换成语音然后用Streamlit的audio组件播放出来核心概念架构的文本示意图专业定义个人AI助理系统架构文本示意图 ┌─────────────────────────────────────────────────────────────────────────┐ │ 用户界面层UI │ │ Streamlit │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ 文件上传区域 │ │ 聊天窗口 │ │ 设置面板 │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ | v ┌─────────────────────────────────────────────────────────────────────────┐ │ 应用逻辑层LangChain │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ 意图识别模块 │ │ 上下文记忆模块 │ │ 日程管理模块 │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 检索增强生成RAG链 │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐│ │ │ │ │ 文档加载器 │ │ 文档切分器 │ │ 向量检索器 ││ │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘│ │ │ └──────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ | v ┌─────────────────────────────────────────────────────────────────────────┐ │ 模型和数据层Data Model │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ Ollama本地LLM │ │ 嵌入模型 │ │ ChromaDB向量数据库│ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ Whisper语音识别 │ │ Edge-TTS语音合成│ │ │ └──────────────────┘ └──────────────────┘ │ │ ┌──────────────────┐ │ │ │ SQLite日程数据库│ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘Mermaid 流程图核心交互流程接下来我们用Mermaid流程图更直观地展示个人AI助理的核心交互流程——从用户输入问题到AI输出答案的完整过程上传文档输入问题有无是否是否用户输入问题或上传文档判断输入类型用LangChain加载文档用TextSplitter切分文档成小块用嵌入模型将小块转换成向量将向量存入ChromaDB向量数据库返回文档上传成功提示是否有上下文记忆从上下文记忆中提取聊天历史继续下一步是否需要检索本地知识库用嵌入模型将问题转换成向量从ChromaDB向量数据库中检索相关的文档小块将聊天历史、问题和检索到的文档小块打包成提示词将聊天历史和问题打包成提示词通过Ollama API调用本地LLM本地LLM生成文字答案将文字答案存入上下文记忆是否需要语音输出用Edge-TTS将文字答案转换成语音用Streamlit播放语音并显示文字剩余内容包括开发环境搭建、核心算法原理、项目实战代码、实际应用场景、工具推荐、未来趋势等因篇幅限制可通过继续提问获取完整10000字左右的教程