Warning
重要免责声明 / IMPORTANT DISCLAIMER
本项目仅供技术学习和研究之用,严禁用于任何商业或非法用途。 This project is for educational and research purposes ONLY. Commercial or illegal use is strictly prohibited.
微信聊天记录包含大量个人隐私信息。您在使用本项目时,必须承担所有数据安全和隐私泄露的风险。开发者不对任何数据丢失、泄露或滥用负责。 WeChat chat history contains extensive private information. By using this project, you assume all risks related to data security and privacy breaches. The developers are not responsible for any data loss, leakage, or misuse.
强烈建议您在完全隔离的本地环境中运行本项目,切勿将其部署在任何可公开访问的服务器上。 It is STRONGLY recommended that you run this project in a completely isolated, local environment. DO NOT deploy it on any publicly accessible server.
WeChat RAG Agent 是一个基于检索增强生成(RAG)技术的微信聊天记录智能问答系统。通过向量化微信聊天记录,结合先进的大语言模型,为用户提供基于历史聊天内容的智能问答服务。
现代化的聊天界面,支持实时流式回答和智能聊天记录检索
- 后端API服务: wechat-rag-agent (本项目)
- 前端Web界面: wechat-rag-frontend - Next.js构建的现代化聊天界面
- 微信数据提取: chatlog-new - 微信聊天记录提取工具,fork自原项目chatlog
- 🚀 高性能向量化处理:支持大规模微信聊天记录的并行向量化处理
- 🔍 智能检索增强:基于向量相似度搜索和重排序模型的精准内容检索
- ⚡ 实时流式问答:支持流式输出的自然语言问答体验
- 📈 增量同步机制:基于Redis的增量数据同步,避免重复处理
- 🎯 多AI提供商支持:支持多种向量化、重排序和语言模型提供商
- 🐳 容器化部署:Docker Compose一键部署,包含所有依赖服务
- 📊 实时进度监控:Server-Sent Events实时跟踪数据处理进度
- 🔧 模块化架构:清晰的三层架构设计,便于扩展和维护
- 🏭 工厂模式设计:支持多种嵌入、重排序和向量存储提供商
- 📝 时间查询解析:智能解析自然语言时间表达式
wechat-rag-agent/
├── agent-web/ # 主Web应用模块 (端口:8080) - 系统编排层
├── agent-datasync/ # 数据同步服务模块 - 向量化处理
├── agent-core/ # 核心RAG功能库 - 嵌入模型和查询处理
└── docker/ # Docker配置文件
模块依赖关系:
- agent-web: 主应用,依赖 agent-core 和 agent-datasync
- agent-datasync: 依赖 agent-core 进行嵌入向量化
- agent-core: 独立的共享库,无外部模块依赖
- 后端框架:Spring Boot 3.5.3 + WebFlux (响应式编程)
- AI框架:LangChain4j 1.1.0
- 运行环境:Java 21
- 向量数据库:Elasticsearch 8.18.1 / Chroma
- 缓存存储:Redis 7.2
- 容器化:Docker + Docker Compose
- 监控:Spring Boot Actuator + Micrometer
sequenceDiagram
participant User as 用户
participant WebApp as agent-web<br/>(端口8080)
participant DataSync as agent-datasync
participant WeChatAPI as 微信API服务<br/>(端口5030)
participant Embedding as SiliconFlow<br/>(向量化)
participant VectorDB as Elasticsearch
participant Redis as Redis<br/>(状态管理)
User->>WebApp: POST /api/vectorization/chatlog/stream
WebApp->>DataSync: 调用ChatlogVectorService
DataSync->>WeChatAPI: 分页请求聊天记录
WeChatAPI-->>DataSync: 返回聊天记录
DataSync->>DataSync: 并行处理(4线程)
DataSync->>Embedding: 批量文本向量化(50条/批)
Embedding-->>DataSync: 返回向量
DataSync->>VectorDB: 存储文档和向量
DataSync->>Redis: 更新同步检查点
DataSync-->>WebApp: 返回处理进度
WebApp-->>User: SSE流式推送进度
sequenceDiagram
participant User as 用户
participant WebApp as agent-web
participant Core as agent-core
participant QueryParser as QueryParser<br/>(查询解析)
participant TimeParser as TimeParser<br/>(时间解析)
participant Embedding as SiliconFlow<br/>(向量化)
participant VectorDB as Elasticsearch
participant Reranker as SiliconFlow<br/>(重排序)
participant LLM as OpenRouter<br/>(大语言模型)
User->>WebApp: GET /api/chat?question=...
WebApp->>Core: 调用Assistant
Core->>QueryParser: 解析查询意图
Core->>TimeParser: 解析时间表达式
Core->>Embedding: 向量化用户问题
Embedding-->>Core: 返回问题向量
Core->>VectorDB: 向量相似度搜索
VectorDB-->>Core: 返回相关文档
Core->>Reranker: 重排序文档
Reranker-->>Core: 返回优化后的文档
Core->>LLM: 构建增强Prompt
LLM-->>Core: 返回最终答案
Core-->>WebApp: 返回结构化响应
WebApp-->>User: 流式响应答案
- Docker & Docker Compose:版本20.0+
- Git:用于克隆项目
- 微信API服务 fork修改版:确保提前运行**HTTP服务(端口5030)**以及数据解密
- API密钥:
- OpenRouter API密钥 (用于大语言模型)
- SiliconFlow API密钥 (用于向量化和重排序)
git clone https://github.com/WechatRagAgent/agent
cd agent创建环境配置文件:
cd docker/ && cp .env.example .env编辑 .env 文件,添加您的API密钥:
# ============= AI服务密钥 =============
# 用于解析问题
# 推荐OpenRouter API密钥 (获取地址:https://openrouter.ai/keys)
RAG_PARSE_MODEL_API_KEY=your_openrouter_api_key
# 用于向量化模型和重排序模型服务
# 推荐SiliconFlow API密钥 (获取地址:https://cloud.siliconflow.cn/me/account/ak)
RAG_EMBEDDING_API_KEY=your_siliconflow_api_key
RAG_RERANK_API_KEY=your_siliconflow_api_key# 启动所有服务 (首次启动需要下载镜像,请耐心等待)
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f wechat-rag-agent检查服务健康状态:
# 检查应用健康状态
curl http://localhost:8080/actuator/health
# 检查Elasticsearch
curl http://localhost:9200/_cluster/health
# 检查Redis
docker exec redis redis-cli ping如果所有服务都正常运行,您应该看到类似以下的响应:
{
"status": "UP",
"components": {
"elasticsearch": {"status": "UP"},
"redis": {"status": "UP"}
}
}curl -X POST "http://localhost:8080/api/vectorization/chatlog/stream" \
-H "Content-Type: application/json" \
-d '{
"talker": "好友昵称",
"time": "2024-01-01~2024-01-31"
}'支持的时间格式:
- 单日:
2024-01-01 - 时间范围:
2024-01-01~2024-01-31
该接口返回Server-Sent Events (SSE) 流,实时推送处理进度:
data: {"taskId":"uuid","status":"PROCESSING","processedCount":150,"totalCount":1000,"progress":0.15}
data: {"taskId":"uuid","status":"COMPLETED","processedCount":1000,"totalCount":1000,"progress":1.0}curl -X DELETE "http://localhost:8080/api/vectorization/progress/{taskId}"curl -G "http://localhost:8080/api/chat" \
--data-urlencode "question=总结一下最近的工作安排" \
--data-urlencode "modelName=google/gemini-2.5-flash" \
--data-urlencode "apiKey=your-openrouter-api-key"
-H "Accept: text/event-stream"返回格式兼容OpenAI格式,支持流式输出。
# 健康检查
curl http://localhost:8080/actuator/health
# 系统指标
curl http://localhost:8080/actuator/metrics
# Prometheus指标
curl http://localhost:8080/actuator/prometheus- Java 21+
- Maven 3.8+
- Elasticsearch 8.18.1
- Redis 7.2+
# 仅启动依赖的基础设施服务
docker-compose up -d elasticsearch redis kibana# 编译整个项目
mvn clean compile
# 打包项目
mvn clean package -DskipTests# 运行主应用 (推荐 - 包含完整功能)
mvn spring-boot:run -pl agent-web
# 可选:单独运行数据同步服务进行测试
mvn spring-boot:run -pl agent-datasync注意:推荐运行 agent-web 模块,它整合了所有功能并提供完整的REST API。
修改配置文件(application.yml)中的API密钥和服务地址。
# 运行所有测试
mvn test
# 运行特定模块测试
mvn test -pl agent-core项目使用Spring Boot的配置管理,主要配置文件为 application.yml:
# 服务器配置
server:
port: 8080
# Redis配置
spring:
data:
redis:
host: localhost
port: 6379
# 微信API配置
wechat:
chatlog:
base-url: http://127.0.0.1:5030
# RAG相关配置
rag:
# 大语言模型配置
parse-model:
api-key: your-openrouter-api-key
model: google/gemini-2.5-flash
# 向量化模型配置
embedding:
provider: siliconflow
model: BAAI/bge-m3
api-key: your-siliconflow-api-key
base-url: https://api.siliconflow.cn/v1
# 重排序模型配置
rerank:
provider: siliconflow
model: BAAI/bge-reranker-v2-m3
api-key: your-siliconflow-api-key
base-url: https://api.siliconflow.cn/v1
# 向量数据库配置
vector-store:
provider: elasticsearch # 或 chroma
url: http://localhost:9200
collection-name: wechat_chatlog- siliconflow: SiliconFlow平台 (推荐,支持BAAI/bge-m3等模型)
- huggingface: HuggingFace Hub (支持大部分开源模型)
- local: 本地模型服务 (自建API兼容服务)
- siliconflow: SiliconFlow平台 (推荐,支持BAAI/bge-reranker-v2-m3)
- local: 本地重排序模型 (自建重排序服务)
- elasticsearch: Elasticsearch (生产推荐,支持复杂查询)
- chroma: Chroma (开发友好,轻量级部署)
- OpenRouter: 多模型聚合平台,支持 Google Gemini, OpenAI GPT 等
问题:docker-compose up 执行失败
解决方案:
# 检查Docker服务状态
systemctl status docker
# 检查端口占用
netstat -tulpn | grep -E "(8080|9200|6379)"
# 清理Docker资源
docker system prune -f
docker-compose down --volumes问题:401 Unauthorized 或向量化失败
解决方案:
- 确认OpenRouter和SiliconFlow API密钥的有效性
- 检查API密钥是否正确配置在环境变量中
- 验证API账户余额是否充足
问题:Connection refused 错误
解决方案:
# 检查微信API服务是否运行
curl http://localhost:5030/health
# 检查Docker网络配置
docker network ls
docker network inspect wechat-rag_default问题:向量存储操作失败
解决方案:
# 检查Elasticsearch状态
curl http://localhost:9200/_cluster/health?pretty
# 查看Elasticsearch日志
docker-compose logs elasticsearch
# 重启Elasticsearch服务
docker-compose restart elasticsearch问题:容器因内存不足被杀死
解决方案:
# 调整Docker Compose中的内存限制
# 编辑 docker-compose.yml
services:
elasticsearch:
environment:
- "ES_JAVA_OPTS=-Xms2g -Xmx2g" # 增加内存分配# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f wechat-rag-agent
docker-compose logs -f elasticsearch
docker-compose logs -f redis
# 查看应用日志文件
tail -f logs/application.log我们欢迎社区贡献!请遵循以下指南:
- Fork 项目到您的GitHub账户
- 创建功能分支:
git checkout -b feature/your-feature-name - 提交更改:
git commit -am 'Add some feature' - 推送分支:
git push origin feature/your-feature-name - 创建Pull Request
- 遵循Java代码规范和Spring Boot最佳实践
- 使用Lombok减少样板代码
- 编写有意义的提交信息
- 添加适当的单元测试
- 更新相关文档
在Issues页面报告问题时,请提供:
- 详细的问题描述
- 重现步骤
- 环境信息 (OS、Java版本、Docker版本)
- 相关的错误日志
- 三模块清晰架构设计 (agent-web, agent-datasync, agent-core)
- 多AI提供商支持 (SiliconFlow, HuggingFace, OpenRouter)
- Redis增量同步机制
- 时间表达式智能解析
- 实时进度监控 (SSE)
- 响应式并行处理
- 支持更多向量数据库 (Pinecone, Weaviate)
- 集成更多AI模型提供商 (Azure OpenAI, Claude)
- 优化大规模数据处理性能
本项目采用 MIT License 开源许可证。
感谢以下开源项目和服务:
- LangChain4j - Java版本的LangChain
- Spring Boot - 应用框架
- Elasticsearch - 向量搜索引擎
- OpenRouter - AI模型API聚合服务
- SiliconFlow - 向量化和重排序服务
- chatlog - 微信聊天记录提取工具
-
隐私保护:本项目处理的微信聊天记录包含极其敏感的个人隐私信息,使用前请确保充分理解相关风险。
-
本地运行:强烈建议仅在本地隔离环境中运行,不要将包含真实聊天数据的服务暴露到公网。
-
合规使用:请确保您的使用方式符合当地法律法规和微信用户协议。
-
数据安全:开发者不对任何数据泄露、丢失或滥用承担责任。
-
学习目的:本项目仅供技术学习和研究使用,禁止用于任何商业用途。
如果此项目对您有帮助,请给我们一个 ⭐ Star!
Built with ❤️ for learning and research purposes only
