一、升级背景
v2.1 版本已完成 LMPI 情感推理引擎、人格系统、记忆系统和社交群聊的深度增强,花盆能像真正的生物一样感知环境、表达情绪、记住故事。但用户与花盆的日常对话中,频繁出现两类 v2.1 无法覆盖的需求:1) 养护知识问答:用户问“多肉怎么浇水”“叶子黄了怎么办”,花盆只能靠 LLM 通用知识回答,缺乏权威植物养护数据支撑。
2) 实时信息查询:用户问“今天天气怎么样”“最近有什么植物相关新闻”,LLM 训练数据截止日期前的知识无法回答。
v2.2 针对这两类需求,新增植物知识库检索、智谱联网搜索、智能意图识别和三级降级机制,补齐了 AI 对话系统的最后两块能力拼图。
二、植物知识库检索(16条结构化知识)
手写构建了一套覆盖常见养护场景的结构化植物知识库,按 services/knowledge.py 中 PLANT_KNOWLEDGE_BASE 字典管理,共 16 条:
| 分类 | 条目 |
|---|---|
| 浇水 | 通用浇水原则、多肉浇水、湿度判断 |
| 光照 | 光照需求分类、光照不足症状 |
| 土壤/施肥 | 土壤配比、施肥频率 |
| 病害 | 黄叶诊断、烂根急救、常见虫害 |
| 风水/文化 | 植物风水寓意、送礼花语 |
| 养护 | 换盆时机、修剪、过冬、度夏 |
| 趣闻/温度 | 植物冷知识、温度适应范围 |
每条知识包含 keywords(匹配用)、species(植物品种)、content(知识正文)。配合 10 种植物百科字典(含学名、科属、原产地、寿命、毒性),检索时采用四层匹配策略:精确关键词(权重1.0)+ 物种匹配(0.8)+ 分类匹配(0.5)+ Jaccard 词重叠(0.3)。
命中后,知识内容以系统提示词方式注入 LLM 上下文,花盆以第一人称自然表达,如"主人,多肉浇水要等土干透哦,我的根最怕泡在水里啦~"
三、智谱联网搜索(实时信息能力)
集成智谱 GLM 原生的 web_search 工具,在 llm.py 中新增 chat_with_web_search() 方法:
- 引擎选择:使用
search_std(标准搜索,0.01元/次),也可切换search_pro(高级搜索,0.03元/次) - 时效过滤:搜索结果限制为一周内(
search_recency_filter: oneWeek),避免过时信息 - 模型选择:使用
glm-4-flash免费模型降低成本 - 自动降级:联网搜索超时、HTTP错误或配置未启用时,自动回退到普通 LLM 对话
当用户询问“最近有什么植物相关的新闻”“今天天气适合给花浇水吗”时,系统自动识别为 news 意图,调用联网搜索获取实时信息,花盆能结合自身状态给出场景化回答。
四、智能意图识别(三类自动路由)
在 knowledge.py 中实现 detect_query_type() 方法,将用户消息自动分为三类:
| 意图类型 | 触发词数 | 路由目标 |
|---|---|---|
knowledge | 22个 | LLM + 知识库上下文注入 |
news | 12个 | 智谱联网搜索 + LLM 总结 |
normal | - | 普通 LLM 情感对话 |
关键词覆盖浇水、施肥、光照、黄叶、烂根、虫子、换盆、病害、过冬、风水等常见养护场景,以及新闻、热点、天气、预报等实时查询场景,其余自动归为普通闲聊。
五、三级自动降级机制
构建了完整的容错降级链,确保任何环节故障都不会导致对话中断:
- 联网搜索降级:智谱 API 超时/异常 → 自动回退 LLM 普通对话(
llm.py内嵌 try/except 兜底) - LLM 调用降级:DeepSeek/智谱 全部不可用 → 知识库命中则返回知识降级回复,无命中则使用 5 条预设拟人化 fallback 消息(按消息 hash 轮选)
- 数据库降级:PostgreSQL 不可用时,
get_db_safe()自动返回None,chat 端点进入纯 LLM 模式(不依赖数据库的传感器/心境/记忆上下文)
完整降级路径:联网搜索 → 知识库增强 → 普通 LLM → 离线内置回复,最差情况下用户也能收到花盆的亲切问候。
六、全链路流水线总览
用户消息 → 声纹识别 → 传感器+LMPI情感推理 → 记忆上下文
→ 意图识别 ─┬─ news → 智谱联网搜索 → LLM(失败降级)
├─ knowledge → LLM + 知识库上下文
└─ normal → 普通LLM情感对话
→ 保存记忆+人格演化 → LED光语 → TTS语音合成 → MQTT推送至此,v2.2 的 AI 对话系统已覆盖从传感器感知、情感推理、知识检索、实时搜索到语音合成的全链路能力,可支持任意养护问答和日常闲聊场景。


💬 过往技术交流