Skip to content

Cyl147369991/QA-SYS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI问答系统

一个基于大模型API的智能问答系统,支持用户对话历史记录、向量化知识存储、知识库构建和知识图谱功能。

🚀 功能特性

核心功能

  • 🤖 智能问答: 基于大模型API的自然语言问答
  • 💾 历史记录: 完整的用户对话历史保存
  • 🔍 向量搜索: 问答对向量化存储,支持语义相似度搜索
  • 📚 知识库: 自动从问答中提取和构建知识库
  • 🕸️ 知识图谱: 实体关系提取,构建知识图谱
  • 🗃️ 数据存储: 使用Supabase作为数据库

高级功能

  • 🎯 上下文感知: 基于对话历史和相关知识的智能回答
  • 📊 统计分析: 详细的系统使用统计和知识分析
  • 📤 数据导出: 支持对话和知识的多格式导出
  • 🔮 智能推荐: 基于上下文的后续问题推荐
  • 🏗️ 批量处理: 支持批量知识提取和索引构建

📋 环境要求

  • Python 3.8+
  • OpenAI API账号(或兼容的API服务)
  • Supabase账号

🛠️ 安装配置

1. 克隆项目

git clone <repository-url>
cd QA-SYS

2. 安装依赖

pip install -r requirements.txt

3. 数据库设置

Supabase设置

  1. Supabase 创建新项目
  2. 在SQL编辑器中执行 database_schema.sql 中的SQL语句
  3. 获取项目URL和API密钥

4. 环境配置

创建 .env 文件(参考 .env.example):

# Supabase配置
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-supabase-anon-key

# OpenAI配置
OPENAI_API_KEY=your-openai-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-3.5-turbo
EMBEDDING_MODEL=text-embedding-ada-002

# 本地向量化模型配置
USE_LOCAL_EMBEDDING=true
LOCAL_EMBEDDING_MODEL=BAAI/bge-m3
EMBEDDING_DEVICE=auto
EMBEDDING_DIMENSION=1024

# 可选配置
SIMILARITY_THRESHOLD=0.7
MAX_SEARCH_RESULTS=10
DEBUG=False

🚀 快速开始

  1. 克隆项目并安装依赖
git clone <repository-url>
cd QA-SYS
pip install -r requirements.txt
  1. 配置环境

    • 复制 .env.example.env 并填入API密钥
    • 在Supabase中创建项目并执行 database_schema.sql
  2. 启动系统

Web界面(推荐):

python start_web.py
# 访问 http://localhost:8000

命令行界面:

python cli_app.py

Docker部署:

docker-compose up -d

📋 本地向量化模型

系统默认使用本地BAAI/bge-m3模型进行文本向量化,相比OpenAI API有以下优势:

🎯 优势

  • 无API费用 - 完全本地运行,无需付费API
  • 隐私保护 - 数据不离开本地环境
  • 中文优化 - BGE-m3对中文支持更好
  • 响应速度 - 无网络延迟,响应更快
  • 离线使用 - 无需网络连接

🔧 模型配置

USE_LOCAL_EMBEDDING=true          # 启用本地embedding
LOCAL_EMBEDDING_MODEL=BAAI/bge-m3 # 模型名称
EMBEDDING_DEVICE=auto             # auto/cpu/cuda/mps
EMBEDDING_DIMENSION=1024          # BGE-m3向量维度

🚀 首次使用

首次运行时会自动下载模型(约2GB),建议确保网络连接稳定:

# 测试本地embedding功能
python test_local_embedding.py

# 如果下载失败,可手动预下载
python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('BAAI/bge-m3')"

🔄 切换回OpenAI

如需切换回OpenAI embedding:

USE_LOCAL_EMBEDDING=false
EMBEDDING_DIMENSION=1536  # OpenAI维度

🎮 使用方法

1. Web界面(推荐)

启动Web服务器:

python start_web.py

或者直接使用uvicorn:

python web_app.py
#
uvicorn web_app:app --reload --host 0.0.0.0 --port 8000

然后在浏览器中访问:

Web界面功能:

  • 🤖 智能对话 - 实时问答交互
  • 📚 知识搜索 - 搜索知识库和相似问题
  • 🕸️ 知识图谱 - 实体关系查询和可视化
  • 📊 系统统计 - 实时系统状态监控
  • 💾 数据管理 - 对话导出和历史管理

2. 命令行界面

启动交互式CLI:

python cli_app.py

支持的命令:

  • ask <问题> - 提问
  • search <查询> - 搜索知识库
  • history - 查看对话历史
  • summary - 生成对话摘要
  • suggest - 获取推荐问题
  • stats - 显示系统统计
  • export - 导出对话
  • help - 显示帮助

3. 示例代码运行

运行完整功能演示:

python example_usage.py

4. 编程接口使用

import asyncio
from qa_system import create_qa_system

async def main():
    # 创建问答系统
    qa_system = create_qa_system(
        openai_api_key="your-api-key"
    )
    
    # 创建用户
    user = await qa_system.create_user("username")
    
    # 开始对话
    conversation = await qa_system.start_conversation(
        user['id'], "AI学习讨论"
    )
    
    # 提问
    result = await qa_system.ask_question(
        user_id=user['id'],
        conversation_id=conversation['id'],
        question="什么是人工智能?"
    )
    
    print(f"答案: {result['answer']}")

# 运行
asyncio.run(main())

📁 项目结构

QA-SYS/
├── model.py              # OpenAI模型封装和增强功能
├── local_embedding.py    # 本地向量化模型服务(BAAI/bge-m3)
├── database.py           # Supabase数据库操作
├── vector_service.py     # 向量化和相似度搜索
├── conversation_manager.py # 对话管理
├── knowledge_base.py     # 知识库构建和查询
├── knowledge_graph.py    # 知识图谱功能
├── qa_system.py          # 主系统类
├── config.py             # 配置管理
├── web_app.py            # FastAPI Web服务器
├── start_web.py          # Web服务启动脚本
├── static/               # 静态文件目录
│   ├── index.html        # 主HTML页面
│   ├── css/
│   │   └── style.css     # 样式文件
│   └── js/
│       └── app.js        # JavaScript逻辑
├── database_schema.sql   # 数据库表结构
├── requirements.txt      # Python依赖
├── example_usage.py      # 使用示例
├── cli_app.py           # 命令行界面
├── setup.py             # 自动化设置脚本
├── test_local_embedding.py # 本地embedding测试脚本
├── Dockerfile            # Docker镜像配置
├── docker-compose.yml    # Docker编排配置
└── README.md            # 项目文档

🔧 配置选项

基础配置

  • OPENAI_API_KEY: OpenAI API密钥
  • SUPABASE_URL: Supabase项目URL
  • SUPABASE_KEY: Supabase API密钥

模型配置

  • OPENAI_MODEL: 使用的聊天模型(默认:gpt-3.5-turbo)
  • EMBEDDING_MODEL: OpenAI嵌入模型(默认:text-embedding-ada-002)
  • OPENAI_BASE_URL: API基础URL(支持其他兼容服务)

本地向量化模型配置

  • USE_LOCAL_EMBEDDING: 是否使用本地embedding模型(默认:true)
  • LOCAL_EMBEDDING_MODEL: 本地模型名称(默认:BAAI/bge-m3)
  • EMBEDDING_DEVICE: 计算设备(auto/cpu/cuda/mps,默认:auto)
  • EMBEDDING_DIMENSION: 向量维度(BGE-m3为1024,OpenAI为1536)

搜索配置

  • SIMILARITY_THRESHOLD: 相似度阈值(默认:0.7)
  • MAX_SEARCH_RESULTS: 最大搜索结果数(默认:10)

知识图谱配置

  • KG_MIN_RELATION_WEIGHT: 最小关系权重(默认:0.5)
  • KG_MAX_ENTITIES_PER_QA: 每个问答对的最大实体数(默认:5)

📚 API文档

Web API接口

Web服务器提供RESTful API接口,可以通过HTTP请求使用系统功能:

用户管理

  • POST /api/users - 创建用户
  • POST /api/conversations - 创建对话

问答功能

  • POST /api/ask - 提问
  • GET /api/conversations/{id}/history - 获取对话历史
  • GET /api/conversations/{id}/suggestions - 获取推荐问题

搜索功能

  • POST /api/search/knowledge - 搜索知识库
  • POST /api/search/similar - 搜索相似问题
  • POST /api/entities/relations - 查找实体关系

系统功能

  • GET /api/system/stats - 获取系统统计
  • GET /api/conversations/{id}/summary - 生成对话摘要
  • GET /api/conversations/{id}/export - 导出对话
  • POST /api/system/build-index - 构建知识索引
  • GET /api/health - 健康检查

WebSocket接口

  • WS /ws/{user_id} - 实时问答通信

完整的API文档可以在运行Web服务器后访问 /docs 查看。

QASystem类主要方法

用户和对话管理

  • create_user(username, email=None) - 创建用户
  • start_conversation(user_id, title=None) - 开始对话
  • get_conversation_history(conversation_id) - 获取对话历史

问答功能

  • ask_question(user_id, conversation_id, question, ...) - 提问
  • search_similar_questions(query, user_id=None, limit=5) - 搜索相似问题

知识管理

  • search_knowledge(query, category=None, limit=10) - 搜索知识库
  • build_knowledge_index(user_id=None) - 构建知识索引

知识图谱

  • find_entity_relations(entity_name, max_depth=2) - 查找实体关系
  • get_entity_path(source_entity, target_entity) - 获取实体路径

系统功能

  • get_system_statistics() - 获取系统统计
  • generate_conversation_summary(conversation_id) - 生成对话摘要
  • suggest_follow_up_questions(conversation_id, limit=3) - 推荐问题
  • export_conversation(conversation_id, format_type='json') - 导出对话

🗄️ 数据库表结构

主要表

  • users - 用户信息
  • conversations - 对话会话
  • qa_pairs - 问答对
  • embeddings - 向量存储
  • knowledge_entities - 知识实体
  • knowledge_relations - 知识关系

特殊功能

  • 支持向量相似度搜索(pgvector扩展)
  • 自动时间戳更新
  • 级联删除保证数据一致性

🚀 性能优化

向量搜索优化

  • 使用ivfflat索引提高向量搜索性能
  • 批量向量化减少API调用
  • 智能相似度阈值过滤

知识处理优化

  • 异步并发处理知识提取
  • 缓存知识图谱减少数据库查询
  • 分批处理大量数据

数据库优化

  • 合理的索引设计
  • 连接池管理
  • 查询优化

🔍 故障排除

常见问题

  1. 数据库连接失败

    • 检查Supabase URL和密钥
    • 确认网络连接
    • 检查数据库表是否正确创建
  2. OpenAI API错误

    • 验证API密钥有效性
    • 检查API配额
    • 确认模型名称正确
  3. 向量搜索失败

    • 确认pgvector扩展已启用
    • 检查向量维度配置
    • 验证嵌入模型可用性
  4. 知识提取问题

    • 检查模型响应格式
    • 调整置信度阈值
    • 查看日志详细信息

调试模式

启用调试模式:

DEBUG=True
LOG_LEVEL=DEBUG

📈 扩展功能

自定义模型

  • 支持任何OpenAI兼容的API
  • 可配置不同的嵌入模型
  • 支持本地模型部署

多语言支持

  • 系统设计支持多语言
  • 可配置不同语言的嵌入模型
  • 多语言知识库构建

部署选项

Docker部署

使用Docker快速部署:

# 构建镜像
docker build -t qa-system .

# 运行容器
docker run -d \
  --name qa-system \
  -p 8000:8000 \
  --env-file .env \
  qa-system

或使用Docker Compose:

# 一键启动
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

生产部署

  • 支持负载均衡
  • 可集成到现有Web应用
  • 支持微服务架构
  • 支持容器编排(Kubernetes)

🤝 贡献

欢迎提交Issue和Pull Request!

📄 许可证

MIT License

📞 支持

如有问题,请提交Issue或联系开发者。


注意: 请确保妥善保管API密钥等敏感信息,不要提交到版本控制系统。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published