提示工程架构师实战:用Rasa+LangChain构建智能家居Agentic AI对话系统
一、引言 (Introduction)
钩子 (The Hook)
想象一下这样的场景:你刚下班回家,手里拎着外卖,对着智能音箱说:“我到家了,帮我打开客厅的灯,把空调调到25度,再播放我喜欢的音乐。”
如果是传统智能音箱,可能会逐个处理请求——先开灯,再调空调,最后放音乐,甚至可能漏掉其中一个;如果是Agentic AI对话系统,它会瞬间理解你的整体需求,自主调用灯、空调、音乐播放器的控制接口,一次性完成所有任务,还会回复:“欢迎回家!客厅灯已打开,空调调到25度,正在播放你喜欢的《加州旅馆》。”
是不是更智能、更贴心?这就是Agentic AI(代理型AI)的魅力——它像人类助手一样,能理解复杂需求、自主决策、调用工具,彻底解决传统对话系统“笨手笨脚”的痛点。
定义问题/阐述背景 (The “Why”)
传统智能家居对话系统的三大痛点:
- 单一意图限制:只能处理“打开灯”“调空调”等简单请求,无法理解组合需求(如“到家场景”);
- 上下文缺失:无法关联历史对话,比如你说“把它关掉”,它不知道“它”指的是灯还是空调;
- 无自主决策:需要手动触发每一步操作,无法根据外部信息(如天气)自动调整(如“下雨了,自动关闭窗户”)。
Agentic AI的出现解决了这些问题。它具备三大核心能力:
- 目标导向:能理解用户的最终需求(如“我要睡觉了”=“设置夜间场景”);
- 工具调用:能自主调用外部工具(如家电控制API、天气接口);
- 上下文记忆:能记住对话历史,处理多轮交互(如“关掉灯”→“哪个房间的?”→“卧室”)。
亮明观点/文章目标 (The “What” & “How”)
本文将带你从0到1构建一个智能家居Agentic AI对话系统,核心工具是:
- Rasa:开源对话AI框架,负责意图识别、实体提取、对话管理(前端交互);
- LangChain:工具链框架,负责连接LLM、调用外部工具、自主决策(后端代理)。
读完本文,你将学会:
- 用Rasa定义智能家居领域的意图和实体;
- 用LangChain构建能调用工具的Agent;
- 整合Rasa与LangChain,实现端到端的智能对话;
- 优化系统性能,避免常见陷阱。
二、基础知识/背景铺垫 (Foundational Concepts)
在开始实战前,需要明确几个核心概念:
1. Agentic AI(代理型AI)
Agentic AI是一种能自主完成任务的AI系统,核心逻辑是:
- 感知:接收用户输入(文本、语音等);
- 决策:根据输入和上下文,决定下一步动作(调用工具/直接回复);
- 执行:调用工具(如API)或生成自然语言回复;
- 反馈:根据执行结果调整后续决策。
相比传统对话系统(规则/简单ML),Agentic AI更像“有思维的助手”。
2. Rasa:对话管理的“大脑”
Rasa是开源对话AI框架的“天花板”,主要功能包括:
- 意图识别(Intent Classification):判断用户输入的目的(如“打开灯”→
turn_on_device); - 实体提取(Entity Extraction):从输入中提取关键信息(如“客厅的灯”→
device_type=light、location=living_room); - 对话管理(Dialogue Management):通过
stories(对话流程)和rules(规则)控制对话逻辑(如缺少实体时,自动询问用户)。
3. LangChain:工具调用的“桥梁”
LangChain是连接LLM与外部工具的“中间层”,主要功能包括:
- 工具封装(Tool Wrapping):将外部API(如家电控制、天气查询)封装成可调用的工具;
- 代理逻辑(Agent Logic):通过Prompt引导LLM自主决策(如“是否需要调用工具?调用哪个?”);
- 结果整合(Result Synthesis):将工具返回的结果整理成自然语言回复。
4. 技术分工:Rasa vs LangChain
| 模块 | Rasa职责 | LangChain职责 |
|---|---|---|
| 前端交互 | 处理用户输入,识别意图/实体 | 无 |
| 对话流程 | 控制多轮对话(如询问缺失的实体) | 无 |
| 后端决策 | 无 | 决定是否调用工具,调用哪个工具 |
| 工具调用 | 无 | 封装并调用外部API |
| 结果返回 | 将LangChain的结果发给用户 | 生成自然语言回复 |
三、核心内容/实战演练 (The Core - “How-To”)
接下来进入实战环节,我们将构建一个**能处理“控制家电”“设置场景”“查询状态”**的智能家居Agent。
准备工作:环境搭建
- 安装依赖:
pipinstallrasa langchain openai requests python-dotenv - 创建Rasa项目:
rasa init --no-prompt# 快速初始化项目,无需交互 - 设置API密钥:
创建.env文件,添加OpenAI API密钥(用于LangChain调用LLM):OPENAI_API_KEY=your-openai-api-key
步骤一:用Rasa定义智能家居领域模型
领域模型(Domain)是Rasa的核心,定义了意图、实体、对话流程等内容。我们需要先明确:
- 意图(Intents):用户的需求类型(如
turn_on_device=打开设备、set_scene=设置场景); - 实体(Entities):需求中的关键信息(如
device_type=设备类型、location=位置); - Slots:存储对话中的临时信息(如用户提到的“卧室灯”,
slots会保存device_type=light、location=bedroom); - Responses:系统的回复模板(如缺少实体时,回复“你想控制什么设备?”)。
1. 修改domain.yml(核心配置文件)
打开rasa/domain.yml,替换为以下内容:
# 意图:用户的需求类型intents:-turn_on_device:# 打开设备use_entities:[device_type,location]# 需要提取的实体-turn_off_device:# 关闭设备use_entities:[device_type,location]-check_device_status:# 查询设备状态use_entities:[device_type,location]-set_scene:# 设置场景use_entities:[scene_type]-inform:# 用户提供信息(如“卧室的灯”)use_entities:[device_type,location,scene_type]# 实体:需求中的关键信息entities:-device_type# 设备类型(light/air_conditioner/tv)-location# 位置(bedroom/living_room/kitchen)-scene_type# 场景类型(morning/night/party)# Slots:存储对话临时信息(影响对话流程)slots:device_type