【基于 LangChain 的异步天气查询5】多轮对话天气智能助手
目录
项目概述
1. 天气查询功能
2. 多轮对话与聊天
3. 语音输入与输出
4. 历史记录管理
5. 项目结构
6. 核心功能流程
7. 项目特色
🗂️ 项目目录结构
📄 chat_runnable.py
📄 main.py
📄 history_manager.py
📄 weather_runnable.py
📄 tools.py
📄 llm.py
📄 voice_utils.py(可选)
📄 .env
📄 requirements.txt
运行结果
项目概述
这个项目是一个多功能的智能聊天和天气查询助手,结合了文本和语音输入/输出,旨在提供一个互动式的对话体验。项目包括以下几个主要功能模块:
1. 天气查询功能
-
通过
fetch_weather
函数,使用 GeoNames API 和 OpenWeatherMap API 获取天气数据。 -
支持中文城市名查询,返回包括天气描述、温度、湿度、风速等信息。
-
天气查询是通过 LangChain 的
agent
模型来处理的,使用工具集 (Tool) 结合fetch_weather
功能。
2. 多轮对话与聊天
-
使用
RunnableWithMessageHistory
结合ChatMessageHistory
实现多轮对话,保存每次交互的聊天记录。 -
对话逻辑采用了基于
ChatPromptTemplate
的模板,确保对话内容格式化和连贯。 -
支持判断用户输入是否与天气相关,并相应地调用天气查询或聊天机器人响应。
3. 语音输入与输出
-
通过
speech_recognition
库实现语音识别,用户可以通过语音输入查询天气或与机器人对话。 -
使用
pyttsx3
库实现语音输出,机器人可以通过语音回应用户。
4. 历史记录管理
-
聊天历史被保存在本地的
chat_history.json
文件中,通过history_manager.py
加载、保存和附加聊天记录,保证多轮对话的上下文连贯性。
5. 项目结构
-
llm.py:配置 GPT-3.5 模型,用于生成聊天和天气相关的回答。
-
chat_runnable.py:封装聊天对话功能,管理对话历史并处理输入输出。
-
weather_runnable.py:封装天气查询功能,通过代理 (
agent
) 处理天气相关的请求。 -
tools.py:定义
fetch_weather
函数,负责调用外部 API 获取天气数据。 -
voice_utils.py:提供语音输入和输出功能。
-
history_manager.py:管理对话历史记录的加载、保存和附加功能。
-
main.py:主程序,控制对话流,包括用户输入的选择(语音或文字),处理天气查询和闲聊对话,调用相关模块进行响应。
6. 核心功能流程
-
用户选择输入方式(语音或文字),并可以选择是否启用语音播报。
-
程序根据用户输入判断是天气查询还是闲聊,天气相关的查询通过调用天气代理处理,其他输入则交给聊天代理。
-
对话记录保存在本地文件中,每次交互后都会更新记录。
-
语音输入通过
speech_recognition
库处理,语音输出通过pyttsx3
库朗读。
7. 项目特色
-
多语言支持:支持中文输入和输出,能够处理中文城市名称。
-
多轮对话:能够保持上下文,支持连贯的多轮对话。
-
语音交互:支持语音输入和输出,为用户提供更加自然的交互体验。
-
历史记录:能够保存聊天历史,方便用户查看和回溯之前的对话内容。
这个项目将不同的功能模块结合起来,提供了一个智能天气助手和多功能聊天机器人,支持语音和文本交互,具有良好的扩展性和灵活性。如果你有其他功能需求或改进建议,随时可以进一步扩展。异步多轮对话天气查询应用(支持中文城市) 的项目结构与每个模块的完整代码,基于 LangChain v0.3.25
、OpenAI
、GeoNames
和 OpenWeatherMap
。
🗂️ 项目目录结构
weather_app/
├── chat_runnable.py # 通用聊天对话功能的核心模块
├── main.py # 主程序入口(支持语音/文本输入)├── history_manager.py # 历史对话处理
├── weather_runnable.py # 封装 Agent