Skip to content

libaze/LLChat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLChat - 智能对话系统

基于 FastAPI 和 LangChain 构建的智能 Agent 系统,提供强大的 AI 对话、知识库管理、智能体配置等功能。

🚀 项目特性

  • 智能对话系统 - 支持多轮对话,具备长期记忆和短期记忆能力
  • 智能体管理 - 可创建、配置个性化的 AI 智能体,自定义系统提示词和工具集
  • 知识库管理 - 支持文档上传、向量检索、在线预览,构建专属知识底座
  • 工具生态系统 - 内置多种实用工具(搜索、计算器、天气、时间等),支持 MCP 协议扩展
  • 用户认证系统 - JWT Token 认证,安全的权限管理
  • 实时通信 - SSE (Server-Sent Events) 实时推送对话进度
  • 文档处理 - PDF 等文档解析、向量化存储、智能检索
  • 中间件架构 - 日志记录、安全审计、验证、优化等多层中间件

📋 技术栈

后端框架

  • FastAPI - 现代高性能 Web 框架
  • LangChain - LLM 应用开发框架
  • SQLAlchemy - ORM 数据库工具
  • MySQL - 关系型数据库
  • ChromaDB - 向量数据库
  • Redis - 缓存和消息队列

AI 相关

  • OpenAI API / 阿里云通义千问 - 大语言模型
  • Tavily API - 网络搜索服务
  • MCP (Model Context Protocol) - 模型上下文协议

其他技术

  • JWT - 身份认证
  • Jinja2 - 模板引擎
  • Pydantic - 数据验证

🏗️ 项目结构

LLChat/
├── app/
│   ├── api/                # API 路由层
│   │   └── v1/            # v1 版本接口
│   │       ├── agent.py   # 智能体管理接口
│   │       ├── chat.py    # 聊天接口
│   │       ├── knowledge.py # 知识库接口
│   │       ├── tool.py    # 工具接口
│   │       └── user.py    # 用户接口
│   ├── llm/               # LLM 相关模块
│   │   ├── middleware/    # 中间件
│   │   │   ├── logging_middleware.py      # 日志中间件
│   │   │   ├── security_middleware.py     # 安全中间件
│   │   │   ├── validation_middleware.py   # 验证中间件
│   │   │   └── optimization_middleware.py # 优化中间件
│   │   ├── tools/         # 内置工具
│   │   │   ├── calculator_tool.py  # 计算器
│   │   │   ├── search_tool.py      # 网络搜索
│   │   │   ├── time_tool.py        # 时间查询
│   │   │   └── weather_tool.py     # 天气查询
│   │   ├── agent_core.py  # Agent 核心逻辑
│   │   ├── llm_factory.py # LLM 工厂
│   │   └── tool_registry.py # 工具注册表
│   ├── models/            # 数据模型
│   │   ├── agent.py       # 智能体模型
│   │   ├── chat.py        # 聊天模型
│   │   ├── knowledge.py   # 知识库模型
│   │   └── user.py        # 用户模型
│   ├── schemas/           # Pydantic 模式
│   ├── services/          # 业务逻辑层
│   ├── utils/             # 工具函数
│   │   ├── action_logger.py    # 操作日志
│   │   ├── cache_manager.py    # 缓存管理
│   │   ├── doc_parser.py       # 文档解析
│   │   ├── jwt_util.py         # JWT 工具
│   │   ├── redis_client.py     # Redis 客户端
│   │   ├── sse_util.py         # SSE 工具
│   │   └── vector_util.py      # 向量工具
│   ├── config.py          # 配置管理
│   ├── database.py        # 数据库连接
│   └── dependencies.py    # 依赖注入
├── static/                # 静态资源
├── templates/             # HTML 模板
│   ├── login.html         # 登录页
│   ├── chat.html          # 聊天页
│   ├── agent.html         # 智能体管理页
│   └── knowledge.html     # 知识库管理页
├── uploads/               # 上传文件目录
├── vector_store/          # 向量存储目录
├── .env                   # 环境变量配置
├── main.py                # 应用入口
└── requirements.txt       # 依赖列表

🔧 安装与部署

环境要求

  • Python 3.9+
  • MySQL 5.7+
  • Redis (可选,用于缓存)

安装步骤

  1. 克隆项目
git clone <repository-url>
cd fastapi-langchain-agent
  1. 安装依赖
pip install -r requirements.txt
  1. 配置环境变量

复制 .env.example.env,并根据实际情况修改配置:

# 数据库配置
DATABASE_URL=mysql+pymysql://root:password@localhost/llchat

# 大模型配置
LLM_PROVIDER=openai
LLM_API_KEY=your-api-key
LLM_MODEL=qwen-plus
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

# Tavily 搜索 API 配置
TAVILY_API_KEY=your-tavily-api-key

# MCP 配置
MCP_SERVER_URL=http://localhost:8080
MCP_ENABLED=false

# JWT 配置
JWT_SECRET_KEY=your-secret-key-here-change-in-production
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=600

# 向量库配置
VECTOR_STORE_PATH=./vector_store
EMBEDDING_MODEL=text-embedding-v3

# 日志配置
LOG_LEVEL=INFO

# 上传文件配置
UPLOAD_DIR=./uploads
MAX_UPLOAD_SIZE=10485760

# Redis 配置
REDIS_URL=redis://localhost:6379/0

# 邮件配置
SMTP_SERVER=smtp.qq.com
SMTP_PORT=465
SENDER_EMAIL=your-email@qq.com
SENDER_PASSWORD=your-smtp-password

# 验证码配置
VERIFICATION_CODE_EXPIRE_MINUTES=5

# 长期记忆配置
CONVERSATION_MEMORY_ENABLED=true
MEMORY_TOP_K=3
MEMORY_SIMILARITY_THRESHOLD=0.3

# 短期记忆配置
SHORT_TERM_MEMORY_LIMIT=20
NIGHT_MEMORY_LIMIT=10
  1. 初始化数据库

创建 MySQL 数据库:

CREATE DATABASE llchat CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. 启动应用
python main.py

或使用 uvicorn:

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

应用启动后访问:http://localhost:8000

📖 API 接口

用户接口

  • POST /api/v1/user/register - 用户注册
  • POST /api/v1/user/login - 用户登录
  • GET /api/v1/user/profile - 获取用户信息
  • PUT /api/v1/user/profile - 更新用户信息

聊天接口

  • POST /api/v1/chat/session - 创建会话
  • GET /api/v1/chat/sessions - 获取会话列表
  • GET /api/v1/chat/{session_id} - 获取会话详情
  • DELETE /api/v1/chat/{session_id} - 删除会话
  • POST /api/v1/chat/{session_id}/message - 发送消息(支持 SSE)

智能体接口

  • POST /api/v1/agent/ - 创建智能体
  • GET /api/v1/agent/ - 获取智能体列表
  • GET /api/v1/agent/{agent_id} - 获取智能体详情
  • PUT /api/v1/agent/{agent_id} - 更新智能体
  • DELETE /api/v1/agent/{agent_id} - 删除智能体

知识库接口

  • POST /api/v1/knowledge/upload - 上传文档(支持 SSE 进度)
  • GET /api/v1/knowledge/list - 获取知识列表
  • DELETE /api/v1/knowledge/{knowledge_id} - 删除知识
  • POST /api/v1/knowledge/search - 搜索知识

工具接口

  • GET /api/v1/tool/list - 获取可用工具列表
  • POST /api/v1/tool/invoke - 调用工具

🛠️ 内置工具

1. 搜索工具 (search_tool)

使用 Tavily API 进行网络搜索,获取实时信息。

2. 计算器工具 (calculator_tool)

执行数学计算,支持复杂表达式。

3. 时间工具 (time_tool)

查询当前时间、日期等信息。

4. 天气工具 (weather_tool)

查询指定城市的天气情况。

5. MCP 工具

支持通过 MCP 协议扩展外部工具。

🔐 安全特性

  • JWT 认证 - 基于 Token 的身份验证
  • 权限控制 - 细粒度的资源访问控制
  • 输入验证 - Pydantic 严格的数据验证
  • 安全中间件 - 请求审计、敏感内容过滤
  • CORS 配置 - 跨域请求控制
  • SQL 注入防护 - SQLAlchemy ORM 参数化查询

📊 数据库设计

主要数据表

  • users - 用户表
  • agents - 智能体表
  • chat_sessions - 聊天会话表
  • chat_messages - 聊天消息表
  • knowledges - 知识库表
  • action_logs - 操作日志表

🎨 前端界面

项目提供简洁的 Web 界面:

  • 登录页 (/login) - 用户登录/注册
  • 聊天页 (/chat) - 对话交互界面
  • 智能体管理页 (/agent) - 智能体配置管理
  • 知识库管理页 (/knowledge) - 知识文档管理

🔍 高级功能

1. 长期记忆系统

  • 自动保存重要对话内容到向量数据库
  • 基于相似度检索历史记忆
  • 支持记忆条数和相似度阈值配置

2. 短期记忆系统

  • 根据时段动态调整加载的消息数量
  • 白天模式:20 条最新消息
  • 夜晚模式:10 条最新消息

3. 文档处理流程

  • PDF 文档上传与解析
  • 自动向量化处理
  • ChromaDB 持久化存储
  • 在线预览功能
  • 智能去重机制

4. SSE 实时推送

  • 文档上传进度实时反馈
  • AI 回复流式输出
  • 工具调用状态通知

5. 中间件链

  • LoggingMiddleware - 详细日志记录
  • SecurityMiddleware - 安全审计和工具白名单
  • ValidationMiddleware - 内容验证和敏感话题检测
  • OptimizationMiddleware - 请求优化和重试机制

⚙️ 配置说明

大模型配置

支持多种大模型提供商:

  • OpenAI (GPT-4, GPT-3.5)
  • 阿里云通义千问
  • 其他兼容 OpenAI API 的模型

向量模型配置

  • 默认使用 text-embedding-v3
  • 支持自定义嵌入模型

记忆系统配置

# 长期记忆
CONVERSATION_MEMORY_ENABLED=true  # 启用长期记忆
MEMORY_TOP_K=3                    # 检索条数
MEMORY_SIMILARITY_THRESHOLD=0.3   # 相似度阈值

# 短期记忆
SHORT_TERM_MEMORY_LIMIT=20        # 白天加载条数
NIGHT_MEMORY_LIMIT=10             # 夜晚加载条数

知识库检索配置

knowledge_search_top_k=5          # 默认检索条数
knowledge_similarity_threshold=0.0 # 相似度阈值

🧪 测试

# 运行测试(如有)
pytest

# 或手动测试 API
curl http://localhost:8000/api/v1/tool/list

📝 开发指南

添加新工具

  1. app/llm/tools/ 目录下创建工具文件
  2. 实现工具类(继承 BaseTool)
  3. tool_registry.py 中注册工具
  4. 更新工具列表接口

添加新接口

  1. app/api/v1/ 下创建路由文件
  2. 定义 Schema(schemas 目录)
  3. 实现 Service 逻辑(services 目录)
  4. 注册路由到主应用

自定义中间件

  1. app/llm/middleware/ 创建中间件文件
  2. 实现中间件逻辑
  3. AgentCore._create_agent() 中注册

🐛 常见问题

数据库连接失败

检查 .env 中的 DATABASE_URL 配置,确保 MySQL 服务正常运行。

向量库初始化失败

确保 vector_store 目录存在且有写入权限。

API Key 无效

检查 .env 中的各类 API Key 是否正确配置。

CORS 错误

生产环境需要修改 main.py 中的 CORS 配置,设置允许的域名。

📄 许可证

本项目采用 MIT 许可证(如有)。

👥 贡献

欢迎提交 Issue 和 Pull Request!

📧 联系方式

🌟 致谢

感谢以下开源项目:


Built with ❤️ using FastAPI and LangChain

About

基于 FastAPI 和 LangChain 构建的智能 Agent 系统,提供强大的 AI 对话、知识库管理、智能体配置等功能。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors