ISP知识库系统后端服务,为前端React应用提供数据支持和AI智能问答功能。系统采用Python技术栈,集成QWEN大模型,提供完整的知识库管理、架构图展示和智能搜索功能。
- Web框架: FastAPI (高性能、自动API文档生成)
- 数据库: SQLite (开发) / PostgreSQL (生产)
- ORM: SQLAlchemy (数据库操作)
- AI模型: QWEN (通义千问大模型)
- 缓存: Redis (可选,用于性能优化)
- 认证: JWT (JSON Web Token)
- 文档: OpenAPI/Swagger (自动生成)
- 部署: Docker + Nginx
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ React前端 │ │ FastAPI后端 │ │ QWEN AI模型 │
│ │◄──►│ │◄──►│ │
│ - 知识库展示 │ │ - RESTful API │ │ - 智能问答 │
│ - 架构图展示 │ │ - 数据管理 │ │ - 内容生成 │
│ - AI聊天机器人 │ │ - 用户认证 │ │ - 搜索增强 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ 数据库层 │
│ │
│ - SQLite/PostgreSQL │
│ - Redis缓存 │
└─────────────────┘
CREATE TABLE users (
id VARCHAR(36) PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(20) DEFAULT 'user', -- 'admin' | 'user'
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);删掉了category_id字段,请更新业务代码; 初始化数据如下(createTime和updateTime随便填一下就行): { { id:"9dc3e593-a495-46f9-a050-738ca7120b00" title: "相机成像原理", icon: "📷", description: "深入了解相机从光学成像到数字信号处理的完整流程,包括镜头系统、感光元件、光电转换等核心技术原理。", sort_order: 0, is_active: 1, },
{ id:"9dc3e593-a495-46f9-a050-738ca7120b01" title: "ISP处理算法", icon: "🔬", description: "图像信号处理的核心算法集合,包括去马赛克、白平衡、降噪、色彩校正等关键技术,实现从原始传感器数据到高质量图像的转换。", sort_order: 1, is_active: 1, },
{ id:"9dc3e593-a495-46f9-a050-738ca7120b02" title: "ISP处理通路", icon: "🔄", description: "完整的图像处理流水线架构,涵盖从原始数据预处理到最终图像输出的全流程,包括各模块间的数据传递和时序控制。", sort_order: 1, is_active: 1, },
{ id:"9dc3e593-a495-46f9-a050-738ca7120b03" title: "软件开发技术栈", icon:"💻", description: "相机应用开发所需的技术栈,包括编程语言、图像处理库、并行计算框架、算法优化和硬件加速等核心技术。", sort_order: 1, is_active: 1, },
{ id:"9dc3e593-a495-46f9-a050-738ca7120b04" title: "业务场景应用", icon:"🎯", description: "相机功能在不同业务场景下的应用实现,包括各种拍摄模式、专业功能、AI增强和创意效果等用户体验优化。", sort_order: 2, is_active: 1, } };
CREATE TABLE knowledge_categories (
id INTEGER PRIMARY KEY,
title VARCHAR(200) NOT NULL, -- 如 '📷 相机成像原理'
icon VARCHAR(50), -- 如 '📷'
description TEXT,
sort_order INTEGER DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);删掉了external_link,请更新业务代码。 其中,category_id是外键(knowledge_categories表的id),表示当前知识项归属哪个知识分类。 初始化数据如下(createTime和updateTime随便填一下就行): {
{
id: "550e8400-e29b-41d4-a716-446655440026",
category_id: "9dc3e593-a495-46f9-a050-738ca7120b04"
title: "标准模式",
description: "适合日常拍摄,支持自动优化参数,平衡画质与性能",
status: "completed",
sort_order: 0,
},
{
id: "550e8400-e29b-41d4-a716-446655440027",
category_id: "9dc3e593-a495-46f9-a050-738ca7120b04"
title: "肖像模式",
description: "利用计算摄影技术实现自然景深效果,突出主体,适合人像拍摄",
status: "completed",
sort_order: 0,
},
{
id: "550e8400-e29b-41d4-a716-446655440028",
category_id: "9dc3e593-a495-46f9-a050-738ca7120b04"
title: "夜间模式",
description: "在低光环境下自动激活,通过长时间曝光和智能处理捕捉更多细节",
status: "completed",
sort_order: 0,
},
{
id: "550e8400-e29b-41d4-a716-446655440029",
category_id: "9dc3e593-a495-46f9-a050-738ca7120b04"
title: "全景模式",
description: "移动手机拼接拍摄,适合拍摄广阔场景,支持360度全景",
status: "completed",
sort_order: 0,
},
{
id: "550e8400-e29b-41d4-a716-446655440030",
category_id: "9dc3e593-a495-46f9-a050-738ca7120b04"
title: "延时摄影",
description: "压缩快播视频,呈现时间流逝效果,如记录日落或云朵移动",
status: "completed",
sort_order: 0,
},
{
id: "550e8400-e29b-41d4-a716-446655440031",
category_id: "9dc3e593-a495-46f9-a050-738ca7120b04"
title: "慢动作",
description: "将视频放慢播放,突出细节,适合拍摄运动或水流",
status: "completed",
sort_order: 0,
},
{
id: "550e8400-e29b-41d4-a716-446655440032",
category_id: "9dc3e593-a495-46f9-a050-738ca7120b04"
title: "电影效果",
description: "模拟电影拍摄风格,提供专业级视频录制体验",
status: "completed",
sort_order: 0,
}
}
CREATE TABLE knowledge_items (
id INTEGER PRIMARY KEY,
category_id VARCHAR(100) NOT NULL,
title VARCHAR(200) NOT NULL,
description TEXT,
status VARCHAR(20) DEFAULT 'completed', -- 'completed' | 'pending' | 'future'
content TEXT, -- 详细内容
sort_order INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES knowledge_categories(id)
);CREATE TABLE knowledge_details (
id INTEGER PRIMARY KEY,
category_id VARCHAR(100) NOT NULL,
title VARCHAR(200) NOT NULL,
description TEXT,
status VARCHAR(20) DEFAULT 'completed', -- 'completed' | 'pending' | 'future'
content TEXT, -- 详细内容
sort_order INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES knowledge_categories(id)
);CREATE TABLE chat_history (
id INTEGER PRIMARY KEY,
user_id VARCHAR(36),
session_id VARCHAR(100) NOT NULL,
message_type VARCHAR(20) NOT NULL, -- 'user' | 'assistant'
content TEXT NOT NULL,
response_time_ms INTEGER, -- 响应时间
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);-- 知识分类索引
CREATE INDEX idx_knowledge_categories_active ON knowledge_categories(is_active);
-- 知识项索引
CREATE INDEX idx_knowledge_items_category ON knowledge_items(category_id);
-- 聊天记录索引
CREATE INDEX idx_chat_history_session ON chat_history(session_id);
CREATE INDEX idx_chat_history_user ON chat_history(user_id);
- 基础URL:
http://localhost:8000/api/v1 - 数据格式: JSON
- 字符编码: UTF-8
- 认证方式: JWT Bearer Token
- 接口:
POST /auth/login - 请求体:
{
"username": "admin",
"password": "password123"
}- 响应:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer",
"user": {
"id": 1,
"username": "admin",
"role": "admin",
"email": "admin@example.com"
}
}- 接口:
POST /auth/register - 请求体:
{
"username": "newuser",
"email": "user@example.com",
"password": "password123"
}- 接口:
GET /knowledge/categories - 权限: 无需认证
- 响应示例:
{
"camera-imaging": {
"title": "📷 相机成像原理",
"icon": "📷",
"items": [
{
"title": "光学系统",
"description": "镜头组、光圈、焦距等光学元件组成成像系统",
"status": "completed"
}
]
}
}- 接口:
GET /knowledge/category/{category_id} - 权限: 无需认证
- 响应: 返回指定分类的完整信息
- 接口:
GET /knowledge/item/{item_id} - 权限: 无需认证
- 响应: 返回知识项的详细信息
- 接口:
POST /knowledge/categories - 权限: 需要管理员权限
- 请求体:
{
"category_id": "new-category",
"title": "新分类",
"icon": "🚀",
"description": "分类描述"
}- 接口:
PUT /knowledge/categories/{category_id} - 权限: 需要管理员权限
- 接口:
DELETE /knowledge/categories/{category_id} - 权限: 需要管理员权限
- 接口:
GET /flow/versions - 权限: 无需认证
- 响应示例:
{
"default": "标准版本",
"version1": "版本1",
"version2": "版本2"
}- 接口:
GET /flow/version/{version_id} - 权限: 无需认证
- 响应: 返回指定版本的完整架构图数据
- 接口:
GET /flow/module/{module_id} - 权限: 无需认证
- 响应: 返回模块的详细信息
- 接口:
POST /flow/versions - 权限: 需要管理员权限
- 接口:
PUT /flow/versions/{version_id} - 权限: 需要管理员权限
- 接口:
GET /search?q={query}&type={type}&limit={limit} - 权限: 无需认证
- 参数:
q: 搜索关键词type: 搜索类型 (knowledge|flow|all)limit: 结果数量限制
- 响应示例:
{
"query": "去马赛克",
"total": 3,
"results": [
{
"type": "knowledge",
"category": "🔬 ISP处理算法",
"title": "去马赛克",
"description": "Demosaic算法从Bayer阵列重建全彩图像",
"status": "completed"
}
]
}- 接口:
POST /chat/message - 权限: 需要用户认证
- 请求体:
{
"message": "什么是ISP?",
"session_id": "session_123",
"context": "previous_messages_context"
}- 响应:
{
"response": "ISP(图像信号处理器)是...",
"session_id": "session_123",
"response_time_ms": 1500,
"sources": [
{
"type": "knowledge",
"title": "ISP基础概念",
"category": "📚 基础知识"
}
]
}- 接口:
GET /chat/history?session_id={session_id}&limit={limit} - 权限: 需要用户认证
- 响应: 返回指定会话的聊天记录
- 接口:
GET /admin/users- 获取用户列表 - 接口:
POST /admin/users- 创建用户 - 接口:
PUT /admin/users/{user_id}- 更新用户 - 接口:
DELETE /admin/users/{user_id}- 删除用户 - 权限: 需要管理员权限
- 接口:
GET /admin/stats - 权限: 需要管理员权限
- 响应:
{
"total_users": 150,
"total_knowledge_items": 45,
"total_chat_sessions": 1200,
"total_searches": 850,
"active_users_today": 25
}# AI模型配置
QWEN_CONFIG = {
"model_name": "qwen-turbo", # 或 qwen-plus, qwen-max
"api_key": "your_qwen_api_key",
"base_url": "https://dashscope.aliyuncs.com/api/v1",
"max_tokens": 2048,
"temperature": 0.7,
"top_p": 0.9
}- 问题理解: 分析用户问题类型和意图
- 知识检索: 从知识库中检索相关内容
- 答案生成: 基于检索结果生成回答
- 来源引用: 提供知识来源和参考链接
- 语义搜索: 使用向量相似度搜索
- 关键词匹配: 传统关键词搜索
- 混合排序: 结合多种搜索策略
# 缓存键设计
CACHE_KEYS = {
"knowledge_categories": "knowledge:categories",
"knowledge_item": "knowledge:item:{item_id}",
"flow_version": "flow:version:{version_id}",
"flow_module": "flow:module:{module_id}",
"search_result": "search:result:{query_hash}",
"chat_session": "chat:session:{session_id}"
}
# 缓存过期时间
CACHE_TTL = {
"knowledge": 3600, # 1小时
"flow": 1800, # 30分钟
"search": 300, # 5分钟
"chat": 1800 # 30分钟
}# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt创建 .env 文件:
# 数据库配置
DATABASE_URL=sqlite:///./isp_knowledge.db
# 或 PostgreSQL
# DATABASE_URL=postgresql://user:password@localhost/isp_knowledge
# QWEN API配置
QWEN_API_KEY=your_qwen_api_key
QWEN_BASE_URL=https://dashscope.aliyuncs.com/api/v1
# JWT配置
SECRET_KEY=your_secret_key_here
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# Redis配置 (可选)
REDIS_URL=redis://localhost:6379
# 服务器配置
HOST=0.0.0.0
PORT=8000
DEBUG=True# 初始化数据库
python scripts/init_db.py
# 启动开发服务器
uvicorn main:app --reload --host 0.0.0.0 --port 8000# Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]# docker-compose.yml
version: '3.8'
services:
api:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:password@db:5432/isp_knowledge
- QWEN_API_KEY=${QWEN_API_KEY}
depends_on:
- db
- redis
db:
image: postgres:15
environment:
- POSTGRES_DB=isp_knowledge
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:# nginx.conf
server {
listen 80;
server_name your-domain.com;
location /api/ {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
root /var/www/html;
try_files $uri $uri/ /index.html;
}
}- 索引优化: 为常用查询字段创建索引
- 查询优化: 使用分页和限制结果数量
- 连接池: 使用数据库连接池管理连接
- Redis缓存: 缓存热点数据
- 内存缓存: 使用Python内置缓存
- CDN: 静态资源使用CDN加速
- 异步处理: 使用FastAPI的异步特性
- 批量操作: 支持批量查询和更新
- 压缩: 启用Gzip压缩
- JWT认证: 使用JWT进行用户认证
- 角色权限: 基于角色的访问控制
- API限流: 防止API滥用
- 密码加密: 使用bcrypt加密用户密码
- SQL注入防护: 使用ORM防止SQL注入
- XSS防护: 输入验证和输出编码
- HTTPS: 生产环境使用HTTPS
- CORS配置: 正确配置跨域访问
- 防火墙: 配置网络防火墙规则
# 日志配置
LOGGING_CONFIG = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"standard": {
"format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s"
},
},
"handlers": {
"default": {
"level": "INFO",
"formatter": "standard",
"class": "logging.StreamHandler",
},
"file": {
"level": "INFO",
"formatter": "standard",
"class": "logging.handlers.RotatingFileHandler",
"filename": "logs/app.log",
"maxBytes": 10485760, # 10MB
"backupCount": 5,
},
},
"loggers": {
"": {
"handlers": ["default", "file"],
"level": "INFO",
"propagate": False
}
}
}- API性能: 响应时间、吞吐量
- 数据库性能: 查询时间、连接数
- AI模型性能: 响应时间、准确率
- 系统资源: CPU、内存、磁盘使用率
# 使用pytest进行单元测试
pytest tests/unit/ -v# 测试API接口
pytest tests/integration/ -v# 使用locust进行压力测试
locust -f tests/performance/locustfile.py- PEP 8: 遵循Python代码规范
- 类型注解: 使用类型提示
- 文档字符串: 为函数和类添加文档
- RESTful设计: 遵循REST API设计原则
- 错误处理: 统一的错误响应格式
- 版本控制: API版本管理策略
- 命名规范: 表名和字段名规范
- 约束设计: 合理的数据约束
- 迁移管理: 数据库版本管理
本后端架构设计基于FastAPI和QWEN大模型,提供了完整的ISP知识库管理功能。系统具有良好的可扩展性、安全性和性能,支持从开发到生产的完整部署流程。
- ✅ 完整的知识库CRUD操作
- ✅ ISP架构图版本管理
- ✅ 基于QWEN的智能问答
- ✅ 高性能搜索功能
- ✅ 用户权限管理
- ✅ 完整的API文档
- ✅ 生产级部署方案
- 🚀 FastAPI高性能异步框架
- 🤖 QWEN大模型智能集成
- 🔒 JWT认证和权限控制
- 📊 Redis缓存优化
- 🐳 Docker容器化部署
- 📈 完整的监控日志系统