当前位置: 首页 > news >正文

【基于 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.25OpenAIGeoNamesOpenWeatherMap


🗂️ 项目目录结构

weather_app/

├── chat_runnable.py             # 通用聊天对话功能的核心模块
├── main.py                            # 主程序入口(支持语音/文本输入)

├── history_manager.py         # 历史对话处理
├── weather_runnable.py       # 封装 Agent

相关文章:

  • MYSQL语句,索引,视图,存储过程,触发器(一)
  • 07.three官方示例+编辑器+AI快速学习webgl_buffergeometry_attributes_integer
  • 【Flask开发踩坑实录】pip 安装报错:“No matching distribution found” 的根本原因及解决方案!
  • Qt 中 QWidget涉及的常用核心属性介绍
  • Qt模块化架构设计教程 -- 轻松上手插件开发
  • 英伟达微调qwen2.5-32B模型,开源推理模型:OpenCodeReasoning-Nemotron-32B
  • DINOv2
  • Nipype使用:从安装配置到sMRI处理
  • C++:流插入、流提取操作符
  • Wordpress头像无法加载太慢问题解决方式
  • Quartus与Modelsim-Altera使用手册
  • 数值运算的误差估计
  • 深入理解深度循环神经网络(Deep RNN)
  • 4.4 os模块
  • 3. 仓颉 CEF 库封装
  • FME处理未知或动态结构教程
  • 微机系统:第二章节:16位的intel8086处理器
  • MLU实现 comfyui+wan2.1 完成图生视频创作
  • 写屏障和读屏障的区别是什么?
  • Javascript基础语法
  • 英国首相斯塔默一处房产发生火灾
  • 2025年度十大IP!IP SH荣膺文化综合类TOP10
  • 尹锡悦涉嫌发动内乱案举行第三次庭审
  • 家电维修担心遇“李鬼”?上海推动“物业+专业服务”进社区
  • 第三届“老山国际春茶节”活动在云南麻栗坡举办
  • 王受文已任全国工商联党组成员