# llm_chat **Repository Path**: software-engineering-pre-project/llm_chat ## Basic Information - **Project Name**: llm_chat - **Description**: 大语言模型对话 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-11-02 - **Last Updated**: 2025-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LLM Chat - 智能聊天系统 一个基于大型语言模型的智能聊天系统,支持工具调用、对话摘要和网络搜索功能。 ## 🌟 项目特性 - **智能对话**: 基于 LangChain 和 LangGraph 的智能对话系统 - **工具集成**: 内置网络搜索、时间获取、应用管理等实用工具 - **对话管理**: 支持多线程对话、历史记录和对话摘要 - **流式响应**: 支持 Server-Sent Events (SSE) 流式响应 - **配置灵活**: 支持多种 LLM 模型配置和 API 服务设置 - **数据持久化**: 使用 SQLite 进行对话状态持久化 ## 🏗️ 项目架构 ``` llm_chat/ ├── api/ # FastAPI 接口层 │ ├── app.py # FastAPI 应用实例 │ ├── dependencies.py # 依赖注入管理 │ ├── models/ # 数据模型定义 │ └── routes/ # API 路由实现 ├── core/ # 核心功能模块 │ ├── config.py # 统一配置管理 │ ├── graph.py # 状态图构建 │ └── tools.py # 工具定义 ├── configs/ # 配置文件目录 ├── main.py # 服务启动入口 ├── test_client.py # 终端聊天客户端 └── generate_openapi.py # OpenAPI 文档生成 ``` ## 🚀 快速开始 ### 环境要求 - Python 3.11+ - uv (推荐) 或 pip ### 安装依赖 ```bash # 使用 uv uv sync ``` ### 启动服务 ```bash # 使用 uv uv run python main.py ``` 服务将在 `http://127.0.0.1:30701` 启动。 ### 使用终端客户端 ```bash # 运行交互式终端客户端 uv run test_client.py ``` ## 📦 程序打包 使用 PyInstaller 生成可在 Windows 上直接运行的无控制台可执行程序: ```bash # 依赖已经写入 pyproject.toml,若尚未安装需先执行 uv add pyinstaller # 生成 onedir 结构的无控制台 exe,依赖保留在旁边的 _internal 目录 uv run pyinstaller main.py --name Agent_FloatAI --noconsole --clean ``` - 打包结果位于 `dist/Agent_FloatAI`,入口为 `Agent_FloatAI.exe`,同目录下 `_internal` 文件夹包含 Python 运行时与依赖库。 - 若日志配置提示缺失 `tzdata`,可执行 `uv add tzdata` 后重新打包,或在命令中加上 `--hidden-import tzdata`。 - 可修改生成的 `Agent_FloatAI.spec` 并运行 `uv run pyinstaller Agent_FloatAI.spec` 以复用配置、进一步裁剪依赖。 ## 🔧 配置说明 ### LLM 配置 支持配置多种 LLM 模型,包括 DeepSeek、OpenAI 等: ```python # 通过 API 接口配置 POST /llm/init { "model": "deepseek-chat", "base_url": "https://api.deepseek.com/v1", "api_key": "your-api-key", "temperature": null # 可选,省略则使用模型默认温度 } ``` ### 工具配置 - **Tavily 搜索**: 需要配置 Tavily API Key - **外部工具 API**: 可配置外部应用管理服务的地址 ### 数据库配置 - 使用 SQLite 进行对话状态持久化 - 支持配置数据库路径和连接超时时间 ### 摘要配置 可配置对话摘要的触发条件和保留消息数量: - 消息数量阈值 - Token 数量阈值 - 保留最近消息数 ## 📡 API 接口 ### 核心接口 - `POST /chat` - 单次聊天完成 - `POST /chat/stream` - 流式聊天 (SSE) - `POST /summary` - 生成对话摘要 - `GET /threads` - 获取会话列表 - `GET /threads/{thread_id}/messages` - 获取会话历史 - `POST /llm/init` - 初始化 LLM 配置 - `POST /tools/tavily/init` - 初始化 Tavily API Key ### 完整 API 文档 访问 `http://127.0.0.1:30701/docs` 查看交互式 API 文档,或查看项目根目录的 `openapi.json` 文件。 ## 🛠️ 内置工具 ### 1. 网络搜索 (`web_search`) - 使用 Tavily 搜索引擎进行网络搜索 - 支持基础搜索和高级搜索模式 - 返回搜索结果概览和详细链接 ### 2. 时间获取 (`current_time`) - 获取当前时间信息 - 支持本地时间、UTC 时间和指定时区 - 返回格式化时间和 ISO 时间戳 ### 3. 应用管理 - `get_exe_path`: 获取可执行文件路径列表 - `open_app`: 根据名称打开应用程序 - 需要配合外部应用管理服务使用 ## 💻 开发指南 ### 项目结构说明 - **api/**: FastAPI 接口层,负责 HTTP 请求处理和响应 - **core/**: 核心业务逻辑,包括配置管理、状态图构建和工具定义 - **configs/**: 配置文件存储目录 - **main.py**: 服务启动入口 - **test_client.py**: 终端聊天客户端示例 ### 添加新工具 1. 在 `core/tools.py` 中定义新的工具函数 2. 使用 `@tool` 装饰器标记工具 3. 将工具添加到 `tools` 列表和 `tools_by_name` 字典 ### 状态图工作流程 1. **消息接收**: 接收用户输入消息 2. **摘要检查**: 检查是否需要生成对话摘要 3. **模型调用**: 调用 LLM 模型生成响应 4. **工具调用**: 如需工具调用,执行相应工具 5. **响应返回**: 返回最终响应给用户 ## 🔒 安全说明 - API Key 等敏感信息通过环境变量或配置接口设置 - 不会在日志中记录敏感信息 - 支持运行时配置更新,无需重启服务 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request 来改进项目。 ## 🆘 常见问题 ### Q: 模型初始化失败怎么办? A: 请检查 API Key 是否正确设置,以及网络连接是否正常。 ### Q: 如何切换不同的 LLM 模型? A: 使用 `/llm/init` 接口可以动态切换模型配置。 ### Q: 对话摘要功能如何使用? A: 系统会根据配置的消息数量阈值自动触发摘要,也可以手动调用 `/summary` 接口查看摘要。 ### Q: 如何查看对话历史? A: 使用 `/threads/{thread_id}/messages` 接口可以获取指定会话的历史记录。