基于 LangChain 和 LangGraph 构建的分层架构聊天框架,支持多模型切换、多轮对话记忆、对话历史管理等功能。
e:\镜像\de\Langchain\
├── core/ # 🔧 算子层 - 核心组件
│ ├── __init__.py # 包初始化文件
│ ├── model_manager.py # 模型管理器 - 统一管理AI模型
│ ├── graph_builder.py # 图构建器 - 构建LangGraph对话图
│ ├── memory_manager.py # 内存管理器 - 管理对话记忆
│ ├── logger.py # 分层日志管理系统
│ ├── decorators.py # 日志装饰器 - 自动化日志记录
│ ├── mysql.py # MySQL数据库配置管理
├── logic/ # 🧠 逻辑层 - 业务逻辑
│ ├── __init__.py # 包初始化文件
│ ├── chat_framework.py # 聊天框架 - 统一对话接口
│ └── conversation.py # 对话管理器 - 处理对话状态和历史
├── apps/ # 🖥️ 应用层 - 用户界面
│ ├── __init__.py # 包初始化文件
│ └── chat_app.py # 聊天应用 - 交互式用户界面
├── main.py # 🚀 主入口文件
└── README.md # 📖 项目文档
- ✅ 多模型支持: 支持 Gemini、GPT-4、GPT-3.5、Claude 等多种AI模型
- ✅ 动态模型切换: 运行时无缝切换不同的AI模型
- ✅ 多轮对话记忆: 基于LangGraph的会话记忆功能
- ✅ 多会话管理: 支持多个独立的对话会话
- ✅ 对话历史导出: 支持JSON和文本格式的历史记录导出
- ✅ 统计信息: 提供对话统计和分析功能
- ✅ 分层架构: 清晰的算子层、逻辑层、应用层分离
- ✅ 分层日志系统: 按项目结构自动分层记录日志
- ✅ 数据库持久化: 支持SQLite和PostgreSQL数据库存储
- ✅ 自动日志装饰器: 通过装饰器自动记录函数执行过程
- Python 3.8+
- 相关AI模型的API密钥(OpenAI、Anthropic等)
pip install langchain langgraph langchain-core dotenv
# 可选:PostgreSQL支持
pip install psycopg2-binary
创建 .env
文件:
# AI模型API密钥
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
# 数据库配置(可选)
# SQLite配置(默认)
SQLITE_DB_DIR=data
SQLITE_DB_NAME=conversations.db
# PostgreSQL配置(可选)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=langchain_chat
DB_USER=postgres
DB_PASSWORD=your_password
python main.py
核心组件层,提供基础的原子操作功能。
职责: 统一管理和调用各种AI模型
主要功能:
- 支持多种AI模型的统一接口
- API密钥自动管理
- 模型实例缓存
- 自定义模型配置
核心类:
class ModelManager:
def get_model(self, model_key="gemini") # 获取模型实例
def list_supported_models(self) # 列出支持的模型
def add_custom_model(self, key, config) # 添加自定义模型
def clear_cache(self) # 清空模型缓存
支持的模型:
gemini
: Google Gemini 2.5 Flashgpt4
: OpenAI GPT-4gpt3.5
: OpenAI GPT-3.5 Turboclaude
: Anthropic Claude 3 Sonnet
职责: 构建和管理LangGraph对话图结构
主要功能:
- 创建简单聊天图
- 创建带记忆的聊天图
- 自定义图结构构建
核心方法:
class GraphBuilder:
@staticmethod
def create_simple_chat_graph(model) # 创建简单聊天图
@staticmethod
def create_memory_chat_graph(model, memory) # 创建带记忆聊天图
@staticmethod
def create_custom_graph(model, config) # 创建自定义图
职责: 管理对话记忆和会话状态
主要功能:
- 内存存储器管理
- 多会话记忆隔离
- 线程配置管理
- 记忆清理功能
核心方法:
class MemoryManager:
def get_memory_saver(self, memory_type="default") # 获取内存存储器
def clear_memory(self, memory_type="default") # 清空指定记忆
def get_thread_config(self, thread_id) # 获取线程配置
def list_memory_types(self) # 列出记忆类型
业务逻辑层,提供高级的业务功能。
职责: 提供统一的对话接口,协调各个组件
主要功能:
- 集成模型管理、图构建、内存管理
- 提供异步对话接口(始终带记忆)
- 模型动态切换
- 记忆管理
核心方法:
class ChatFramework:
def __init__(self, model_key="gemini") # 初始化框架
async def chat(self, message, thread_id="default") # 对话(异步,始终带记忆)
def switch_model(self, model_key) # 切换模型
def get_current_model(self) # 获取当前模型
def list_available_models(self) # 列出可用模型
def clear_memory(self, memory_type) # 清空记忆
职责: 处理对话状态、历史记录、统计信息
主要功能:
- 对话历史跟踪
- 消息发送和接收
- 历史记录导出
- 对话统计分析
核心方法:
class Conversation:
def __init__(self, framework, thread_id) # 初始化对话
async def send_message(self, message) # 发送消息(异步,始终带记忆)
def get_history(self) # 获取历史记录
def export_history(self, format="json") # 导出历史记录
def get_stats(self) # 获取统计信息
def clear_history(self) # 清空历史记录
用户交互层,提供具体的应用界面。
职责: 提供交互式的聊天用户界面
主要功能:
- 交互式菜单系统
- 对话会话管理
- 模型切换界面
- 历史记录导出界面
- 统计信息展示
核心类:
class ChatApplication:
def __init__(self) # 初始化应用
def show_main_menu(self) # 显示主菜单
def start_conversation(self) # 开始对话
def switch_model(self) # 切换模型
def show_statistics(self) # 显示统计信息
def export_history(self) # 导出历史记录
def clear_memory(self) # 清空记忆
def run(self) # 运行应用
职责: 应用程序启动入口
功能: 导入并启动聊天应用
-
启动应用 (
main.py
)- 导入聊天应用
- 启动主界面
-
初始化框架 (
logic/chat_framework.py
)- 创建模型管理器
- 创建内存管理器
- 构建对话图
-
用户交互 (
apps/chat_app.py
)- 显示菜单选项
- 处理用户输入
- 管理对话会话
-
对话处理 (
logic/conversation.py
)- 跟踪对话历史
- 调用框架进行对话
- 记录和管理消息
-
模型调用 (
core/model_manager.py
)- 获取指定模型
- 处理API调用
- 管理模型缓存
from logic.chat_framework import ChatFramework
from logic.conversation import Conversation
# 创建框架和对话
framework = ChatFramework("gemini")
conversation = Conversation(framework, "my_session")
# 发送消息
response = conversation.send_message("你好,我是小明")
print(response)
# 带记忆的后续对话
response = conversation.send_message("我刚才说我叫什么?")
print(response) # AI会记住你叫小明
# 切换到GPT-4
framework.switch_model("gpt4")
# 继续对话
response = conversation.send_message("现在使用什么模型?")
print(response)
# 导出为JSON格式
json_history = conversation.export_history("json")
with open("chat_history.json", "w") as f:
f.write(json_history)
# 导出为文本格式
text_history = conversation.export_history("text")
with open("chat_history.txt", "w") as f:
f.write(text_history)
在 core/model_manager.py
中的 SUPPORTED_MODELS
字典中定义:
SUPPORTED_MODELS = {
"gemini": {
"model_name": "gemini-2.5-flash",
"provider": "openai",
"api_key_env": "OPENAI_API_KEY"
},
# ... 其他模型配置
}
model_manager.add_custom_model(
key="my_model",
model_name="my-custom-model",
provider="custom_provider",
api_key_env="MY_API_KEY"
)
- 分层架构: 清晰的职责分离,便于维护和扩展
- 模块化设计: 每个组件都可以独立使用和测试
- 统一接口: 不同的AI模型通过统一接口访问
- 内存管理: 智能的对话记忆管理和会话隔离
- 可扩展性: 易于添加新模型、新功能和新应用
- 记忆持久性: 当前使用内存存储,程序重启后记忆会丢失
- API密钥: 需要正确配置相应模型的API密钥
- 依赖管理: 确保安装了所需的Python包
- 会话隔离: 不同的thread_id拥有独立的对话记忆
- 添加数据库持久化存储
- 支持更多AI模型
- 添加Web界面
- 实现对话搜索功能
- 添加对话分析和洞察功能
该项目基于 LangChain 和 LangGraph 构建,提供了一个灵活、可扩展的聊天框架基础。