ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

自建家庭AI助手:腾讯开源平台部署与多用户共享实战

自建家庭AI助手:腾讯开源平台部署与多用户共享实战 上个月整理家庭支出时我发现全家四口人的手机里装了五个 AI 相关应用。孩子查作文素材要会员、我自己写文档要会员、老婆整理菜谱和营养搭配要会员连我妈想看清楚药盒上的成分说明都得拿我的账号登录。一个账号全家轮着用既不方便又怕串数据各买各的更离谱一个月加起来比宽带费还贵。后来我在 GitHub 热榜上刷到腾讯开源的那个 3.6K 星标全家共享平台才真正想明白家庭里的 AI 助手完全可以自建一套统一接模型、统一管账号、统一收知识库把重复订阅的钱全部省下来。这篇文章我不打算写成一个介绍新项目式的科普而是把我自己从算账、选型、部署、接本地开源模型、配多用户权限再到中文知识库踩坑的完整过程记录下来。没有 GPU 也能跟着走到一半条件好一点的可以直接上 14B 模型体验会再上一个台阶。1. 全家 AI 支出失控先算清楚这笔账再决定要不要自建1.1 我家真实的订阅清单先说一个挺扎心的数字我家今年上半年在 AI 上的订阅支出是 2487 元。拆开来看非常有意思我自己的写作与编程助手年费 1468 元这是最贵的一份老婆用的生活类助手包年 399 元功能其实有一半和我重复孩子用的学习类助手包年 299 元无非是把题目拍照上传然后得到解析我妈不算订阅但经常让我帮我问一下本质上也在消耗我的会员额度。最让我难受的不是钱本身而是大量功能在互相重复。孩子那个学习助手能做的题目解析我自己那个也能做只是 UI 做得更适合小孩老婆用的菜谱生成我给点提示词也能给她做出一桌不重样的菜单。每多一个人就多一份订阅可底层大模型的能力并没有本质差别。1.2 为什么重复付费这件事必然发生市面上大多数 AI 助手产品都是全家桶绑定的你买了它的会员就只能用它的应用界面、它的知识库格式、它的模型调度。我换个助手聊天记录不互通收藏不互通家庭成员之间的数据也不互通。于是每多用一个产品就得重新注册、重新调教、重新付费这就是数字时代的重复基建。更重要的问题是配额。一个会员账号一天能问多少次、能生成多少 token都是写死的。家里三个人共用我那个主力账号经常聊到一半被限流体验很差可要是给每个人都充一个会员费用直接翻三四倍。这个问题本质上是产品化带来的限制——会员是卖给个人的不是卖给家庭的。你想让全家共享平台不愿意因为它就是按人头收费的。1.3 腾讯开源平台的切入点是什么腾讯开源的这个 3.6K 星标平台思路和买会员完全不同。它不做传统意义上全家桶应用而是做了一个自托管的中枢你自己决定接哪个模型、给谁开放哪个模型的权限、让全家共用一个知识库。孩子问作业的时候走本地小模型大人工作的时候才调用更强的商业 API钱花在刀刃上而不是被平均摊到每一个人头上。我第一次看到这个项目时最惊讶的不是功能列表而是它的定位——它承认不同家庭成员对 AI 的需求和成本敏感度是不同的。这是我用过那么多商业助手产品从来没有过的体验。2. 拆开这个平台模型调度中心 知识库 多租户权限2.1 核心思路不是再造一个助手而是做一个路由中枢商业 AI 助手是把模型、界面、知识库、账号体系全部封装在一起卖给你。腾讯开源的这个项目反过来了界面只是入口背后真正核心的是一套模型路由器。当家庭成员在对话框里发出一条消息平台会根据配置好的规则判断这条消息应该发给谁——是发给本地刚部署的 7B 模型还是发给云端 API又或是先从知识库里检索相关文档再让大模型生成这些都由你自己控制。补一句不同模型还有不同的计费方式和隐私属性。本地模型完全免费、数据不出门但智力水平有限商业 API 能力更强但按量计费。让全家人始终都用最强模型是对算力的浪费也是对自己钱包的不尊重。2.2 主要组件分工我部署完把整个平台拆开看了一下它其实是由几个职责清晰的模块组成的组件作用我家的实际对应Web 界面家庭成员看到的对话窗口、知识库管理界面手机、平板、电脑都能开模型适配层把统一请求格式翻译成各家模型能理解的形式支持兼容 OpenAI 接口的云端/本地模型路由与配额引擎决定每个用户的请求去哪个模型、用多少额度孩子走本地大人走商业 API知识库引擎文档解析、分块、向量化、检索召回用药手册、教材、家庭文档向量数据库存储知识库向量供检索使用一开始用轻量方案后面换了专业的用户与权限模块多账号、分组、个人令牌家长/孩子/访客三组这个结构其实不复杂难点全在细节。比如孩子走本地模型听起来简单实际还要考虑如果本地模型答得不好要不要自动降级到更强模型要不要限制孩子每天只能问 30 次知识库里的资料哪些孩子可见、哪些只有家长可见这些都是在配置阶段才暴露出来的问题。2.3 和单独装一个 APP的本质区别商业 APP 是别人帮你做好饭你按月交饭钱这类开源共享平台是你自己开一家小食堂桌子椅子、锅碗瓢盆、菜谱采购都归你管。前者省心但按人头算钱后者前期花点时间但每多一个人使用边际成本几乎为零。这正好命中别再给 AI 助手单独付费这个痛点平台本身的软件和基础能力是免费的你只需要承担服务器电费和所使用的商业 API 费用。家里三个人用一个 API Key 和每人各买一个会员成本差别是数量级的。3. 自己动手部署一台小主机 docker compose 跑通的完整过程3.1 硬件与系统配置我用的机器是一台旧的迷你小主机CPU 是 8 核 16 线程内存 16G没有独立显卡。这套配置跑 3B 和 7B 的量化模型没问题跑 14B 就会比较吃力。如果你有一张 8G 以上显存的显卡建议直接给 Docker 开 GPU 支持体验会完全不同。系统我选的是 Ubuntu Server 22.04 LTS理由很实际Docker 支持最稳、远程管理方便、占资源少。Windows 也可以装但 WSL2 和 GPU 透传的配置细节多一些对只想快点跑起来的人来说不友好。按官方 README 准备好 Docker 和 Compose 插件然后用 git 拉取仓库代码即可。新装系统后建议先做两件事一是把系统更新好二是确认 Docker 服务开机自启。很多人部署到一半发现容器老是失联其实不是项目的问题是机器配置阶段就没弄干净。3.2 用 docker compose 拉起核心服务整个项目提供了一组容器编排文件我读了一下主要包括后端 API、前端 Web、向量数据库、Redis 和定时任务这几个服务。你可以直接用现成的编排文件也可以按自己的机器配置删减资源占用大的服务。# 以下是我根据官方模板改出来的精简版 # 具体镜像名和版本请以仓库里的 README 和 release 为准 services: api: image: your-registry/weknora-api:latest ports: - 8080:8080 env_file: .env depends_on: - vector-db - redis web: image: your-registry/weknora-web:latest ports: - 3000:3000 vector-db: image: your-registry/vector-db:latest volumes: - vector-data:/data redis: image: redis:7-alpine volumes: - redis-data:/data volumes: vector-data: redis-data:启动之前需要把.env文件里的密钥、数据库地址、API Key 填好。第一次部署最容易踩的坑就是环境变量漏填比如向量数据库的连接串没写后端起来了也连不上。3.3 首次启动要做的五个检查跑起来之后不要马上去聊天先把基础功能验一遍。我总结了一个固定的启动检查清单容器状态执行docker compose ps确认所有服务状态都是 healthy而不是一直在 restart。日志扫描docker compose logs -f看一下有没有明显的 ERROR尤其是数据库连接和密钥初始化。Web 登录用默认管理员账号登进后台马上改掉默认密码。模型连通性在后台配置好一个模型发一条测试消息确认返回正常。知识库功能上传一个小文档建第一个知识库问一个能从文档里找到答案的问题。如果你发现容器反复重启不要急着重装。先看日志绝大多数情况是环境变量写错了或者某个服务端口冲突。我那次卡了半小时最后只是 Redis 的密码没配对。4. 一家人共用而不互扰多用户、令牌与配额配置4.1 先想清楚家庭成员怎么分组这个平台的账号体系是支持分组和权限的。我建议在创建成员之前先花十分钟把需求想清楚而不是问一个人建一个账号。我家分了三个组parents我和老婆能调用所有模型包括最强的商业 API能看到所有知识库kids孩子只能走本地开源模型知识库只开放教材和课外阅读资料guest来家里的亲戚临时用每天有次数限制不开放隐私知识库。这种分组的价值在于家庭成员之间可见的数据和可用的算力是隔离的。孩子不会在大人的知识库里看到不该看的内容客人也不会消耗掉每天的高价模型额度。4.2 共享令牌与个人令牌的选择平台里有两种令牌一种是管理员创建的共享令牌所有走 API 的请求都统一用它另一种是绑定到具体用户的个人令牌。对纯 Web 界面使用来说共享令牌就够了系统会把你登录的账号自动映射到对应的分组策略。但如果你想让家庭成员通过 API 方式调用平台比如孩子学校作业要求调接口那就必须给个人令牌。个人令牌的好处是精确计费、精确限流某个令牌被泄漏也可以单独吊销不影响其他人使用。我把孩子的个人令牌每天的配额设置为 30 次超出之后平台会直接返回提示而不是无限调用。4.3 配额与模型路由规则配额控制是这个平台最实用的功能之一。它的原理是每个用户/分组绑定一条模型路由规则而规则里可以写每日最大消息数、最大 token 数、可用的模型列表。我整理了一个简化版路由规则思路和平台后台配置是一致的{ routes: [ { group: parents, model: cloud-strong-api, daily_message_limit: 200, daily_token_limit: 500000 }, { group: kids, model: local-ollama-7b, daily_message_limit: 30, daily_token_limit: 10000 }, { group: guest, model: local-ollama-3b, daily_message_limit: 10, daily_token_limit: 3000 } ] }配置完路由之后平台会严格按照优先级匹配。我建议把更贵的模型放在高优先级但只分配给可信分组同时给每个分组设置合理的 token 上限。这样就算家里某个人突然批量生成文本最多消耗当天额度不会造成月底账单爆炸。4.4 实际运营下来的观察这样的配置跑了两个月最直观的数据是商业 API 的消耗量比原来全部人共用时降低了大概 70%但全家人的满意度反而更高。因为孩子用本地模型回答日常问题足够大人才会在真正需要深度推理时才调用高级模型。原来那种所有人都得用最强模型的思路本质上是对资源的浪费。5. 本地开源模型接入Ollama 选型与实测5.1 为什么要把本地模型纳入全家共享聊到这一步本地模型就显得格外重要。全家的日常问答里很大一部分是这个字怎么读三年级应用题怎么做西红柿炒蛋是先放蛋还是先放西红柿这类问题它们不需要超级大模型只需要能正常理解中文、语气友好就够了。把这些请求全部走商业 API一个月的 token 消耗量其实不小。而本地模型完全免费、数据不出服务器、断网也能用对孩子和老人尤其合适。这也是我把 Ollama 作为本地推理引擎接进平台的原因。5.2 Ollama 的安装与模型拉取Ollama 的安装非常简单Linux 服务器上一条命令就能装好Windows 和 macOS 也有安装包。装完之后拉取模型同样是一条命令# 拉取 3B 模型适合低配机器 ollama pull qwen2.5:3b # 拉取 7B 模型均衡选择 ollama pull qwen2.5:7b拉下来以后可以直接用ollama run qwen2.5:7b在终端里试几句感受一下模型的中文水平和响应速度。注意第一次拉模型会花一些时间这取决于你的带宽和模型大小属于正常现象。5.3 不同参数模型的取舍我在实际使用中测过不同大小的模型整理了一张比较实用的表模型量化级别内存/显存需求实际体验qwen2.5:3bQ43G 左右快速、词穷适合简单问答和分类任务qwen2.5:7bQ45G 左右性价比最高日常作文、常识问答都够用qwen2.5:14bQ49G 左右推理能力明显更好但需要好显卡glm4:9bQ46G 左右中文写作更自然但速度比 qwen 略慢我的建议是先按你的内存/显存选一个能跑的不要一上来就追求最大模型。本地模型在全家共享平台里扮演的是兜底角色不是所有问题的最佳答案。先把链路跑通再考虑换更强的模型。5.4 平台对接 Ollama 的地址配置因为我用 Docker 部署的 Ollama 和平台在同一个虚拟网络里对接非常方便。Ollama 提供了兼容 OpenAI 格式的接口在后台配置模型时base URL 直接填服务名和端口就行# 示例Ollama 服务在 docker 网络内 http://ollama:11434/v1注意不要填localhost因为在 Docker 容器里localhost指向的是容器自身而不是宿主机。我见过太多人卡在这一步其实只要把地址改成 compose 网络里的服务名就能解决。配置好之后建议再发一条测试消息确认模型返回正常。6. 中文知识库最容易翻车的三个地方6.1 分块切分不能直接套英文方案知识库是全家共享平台里最有长期价值的部分。我把家里的用药手册、学校通知、家庭菜谱、旅游攻略全导进去了。但第一次建知识库的时候效果惨不忍睹——问题是文档分块策略。很多开源项目默认的分块方式是按固定的 token 数量硬切英文环境问题不大但中文一句话表达的信息密度很高硬切很容易把一句完整的话从中间劈开。比如一段用药说明如果饭后服用和每日两次被切到两个块里检索时就会丢关键信息。我的解决办法是优先按文档的标题和段落边界切分同时设置适当的重叠。对于中文重叠区最好在 50 到 100 个字符之间这样即使检索命中了块边界也能把上下文带出来而不是只看到半句话。6.2 向量模型一定要选中文友好的知识库能不能答非所问很大程度上取决于向量模型。如果用只针对英文优化的向量模型来处理中文文档检索质量会非常不稳定。我给这个环节更换了智源 BGE 系列的中文向量模型效果提升非常明显。向量模型的作用是把文本变成一串数字让计算机能够计算语义相似度。中文和英文的语言结构不同同一个词在不同语言里表达的信息也不一样。选用在中文语料上训练过的向量模型检索出来的结果才符合人的语义直觉。如果你的知识库以中文为主不要偷懒用默认配置。6.3 回答引用了错误来源时的排查链路知识库上线后最常遇到的诡异问题是平台给出的答案表面上看起来正确但点击引用的文档来源发现引用的段落和问题毫无关系。这时候不要急着调大模型先查检索环节。我再三排查后养成了固定流程打开检索调试看召回出来的 Top 5 分块是什么检查这些分块是否真的有语义相关性还是只是关键词撞上了如果 Top 5 都不对说明分块策略或向量模型有问题如果 Top 5 有正确答案但大模型没用上说明提示词或上下文拼接逻辑有问题。有一次我家药品知识库回答感冒能不能吃这个药平台引用的竟然是另一盒药的说明书。最后查下来是 PDF 扫描版识别时页码错位文本里的药名被识别错了。知识库的坑往往不在算法在数据清洗。6.4 建议定期重建索引还有一个容易被忽略的操作当你更新了知识库里的文档要记得重建向量索引而不是只替换原文件。平台有重建索引的入口操作不复杂但不做的话新的内容不会生效旧的删除内容还会被检索到。我每个月整理一次家庭文档顺手重建一次索引期间花不了几分钟但能避免很多诡异问题。7. 安全底线与用了两个月的体会7.1 自建平台的安全清单自建平台就意味着自己和家里人负责安全不能只图方便。我总结了五条底线改默认密码部署完成后第一时间改别让管理后台暴露在公网上用反向代理加 HTTPS如果有公网访问需求把 Web 端口藏在 Nginx 后面配上证书而不是直接裸端口开放个人令牌单独管理谁用谁的令牌泄漏了单独吊销不影响全局定期备份知识库和数据库知识库才是最有价值的资产机器坏了模型可以重新拉文档库里积累的资料丢了很难恢复升级前看 changelog3.6K 星标的项目迭代速度很快升级前留意是否有破坏性变更先备份再动手。这些看起来都是老生常谈但正因为是老生常谈才说明每条背后都有人摔过跤。7.2 用了两个月家里真实的变化现在我家里的使用状态是孩子放学回来直接打开平板跟学习角里的知识库对话问错题、查古诗背景、了解天气和植物老婆在厨房用手机语音问菜谱平台会把步骤念出来我妈偶尔过来问我家里的血压计说明书在哪我直接让她在对话框里搜我自己写稿前会把草稿丢进私有知识库让平台帮我查资料和理脉络。最让我意外的是老人使用成本并没有想象中高。语音输入加上简单明了的界面我妈第一次独立查药品说明时还挺兴奋说这不就是家里的智能管家么。最后说一个我的私藏小技巧每周日早上我会让平台把一周内全家的问答记录导出一份摘要看看大家都在关心什么。这个习惯帮我发现了不少潜在需求比如孩子连着三天问为什么天上会有彩虹我就知道该给他找一本天气科普书了。开源项目的好处是这种小需求完全可以自己加功能怎么顺心怎么来。
返回列表