当前位置: 首页 > 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

http://www.xdnf.cn/news/391807.html

相关文章:

  • js的基本数据类型
  • opencascade.js stp vite 调试笔记
  • 使用 Java 反射动态加载和操作类
  • Ollama部署使用以及模型微调和本地部署
  • go语言对Cookie的支持
  • el-date-picker的type为daterange时仅对开始日期做限制
  • 【Java】线程实例化 线程状态 线程属性
  • AUTOSAR图解==>AUTOSAR_TR_HWTestManagementIntegrationGuide
  • REST/SOAP 协议介绍及开发示例
  • web animation API 锋利的css动画控制器 (更新中)
  • Python高级爬虫之JS逆向+安卓逆向2.1节: 网络爬虫核心原理
  • 【c++】【数据结构】二叉搜索树详解
  • InnoDB引擎
  • JVM规范之运行时数据区域
  • 【沉浸式求职学习day36】【初识Maven】
  • 低功耗蓝牙BLE之发射功率(mW/dBm)对应关系
  • jna总结1
  • 26考研——中央处理器_指令流水线_指令流水线的基本概念 流水线的基本实现(5)
  • 在C++中,符号位是否参与位运算
  • BUUCTF——Ezpop
  • [Java实战]Spring Boot 静态资源配置(十三)
  • Appium-OppoA92S-真机记坑
  • ARP协议的工作原理
  • Linux `uname` 指令终极指南
  • 无需大规模重训练!GraspCorrect:VLM赋能机器人抓取校正,抓取成功率提升18.3%
  • 如何使用 Netstat 查看监听端口
  • 环形链表(简单)
  • 谈程序的地址空间
  • 智能座舱开发工程师面试题
  • 代码随想录算法训练营第六十天| 图论7—卡码网53. 寻宝