feat: implement ERP AI Assistant Phase 1
Backend (FastAPI + SQLAlchemy + Claude API + RAG): - Config management with Pydantic v2 - Database engine with connection pooling and SQL injection prevention - AI engine with Claude API integration (support custom base URL) - RAG engine with ChromaDB and sentence-transformers - Requirement analysis service - Config generation service - Executor engine with SQL validation - REST API endpoints: /analyze, /generate, /execute Frontend (Vue 3 + Element Plus + Pinia): - Complete 3-step workflow: analyze → generate → execute - Step indicator with progress visualization - Analysis result display with field table - SQL preview with monospace font - Execute confirmation dialog with safety warning - Execution result display - State management with Pinia - API service integration Security: - SQL injection prevention with parameterized queries - Dangerous SQL operation blocking - Database password URL encoding - Transaction auto-rollback - Pydantic config validation Features: - Natural language requirement analysis - Automated SQL configuration generation - Safe execution with human review - LAN access support - Custom Claude API endpoint support Documentation: - README with quick start guide - Quick start guide - LAN access configuration - Dependency fixes guide - Claude API configuration - Git operation guide - Implementation report Dependencies fixed: - numpy<2.0.0 for chromadb compatibility - sentence-transformers==2.7.0 for huggingface_hub compatibility Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
178
backend/scripts/init_knowledge.py
Normal file
178
backend/scripts/init_knowledge.py
Normal file
@@ -0,0 +1,178 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Initialize knowledge base with sample documents.
|
||||
|
||||
This script adds sample knowledge documents to the RAG engine
|
||||
for the ERP AI Assistant.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# NOTE: Development workaround to enable direct script execution.
|
||||
# For production, use: python -m backend.scripts.init_knowledge
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from loguru import logger
|
||||
from app.core.rag_engine import RAGEngine
|
||||
|
||||
# Sample document: Platform basics
|
||||
PLATFORM_BASICS_CONTENT = """
|
||||
# ERP 平台基础知识
|
||||
|
||||
## 窗体类型 (Form Types)
|
||||
|
||||
ERP 系统支持以下几种窗体类型:
|
||||
|
||||
1. **标准窗体 (Standard Form)**
|
||||
- 用于单一数据实体的 CRUD 操作
|
||||
- 包含字段、按钮、表格等基本控件
|
||||
- 适用于简单的数据录入和查询场景
|
||||
|
||||
2. **列表窗体 (List Form)**
|
||||
- 用于展示多条记录的列表
|
||||
- 支持排序、筛选、分页功能
|
||||
- 可配置列显示和隐藏
|
||||
|
||||
3. **报表窗体 (Report Form)**
|
||||
- 用于生成统计报表
|
||||
- 支持图表展示
|
||||
- 可导出 Excel、PDF 格式
|
||||
|
||||
4. **流程窗体 (Workflow Form)**
|
||||
- 用于业务流程处理
|
||||
- 包含审批、流转、会签等功能
|
||||
- 支持流程状态跟踪
|
||||
|
||||
## 标准字段 (Standard Fields)
|
||||
|
||||
系统预定义以下标准字段类型:
|
||||
|
||||
1. **文本字段**
|
||||
- ShortText: 短文本 (最多 255 字符)
|
||||
- LongText: 长文本 (最多 4000 字符)
|
||||
- Memo: 备注文本 (不限长度)
|
||||
|
||||
2. **数值字段**
|
||||
- Integer: 整数
|
||||
- Decimal: 小数 (可配置精度)
|
||||
- Currency: 货币 (带币种符号)
|
||||
|
||||
3. **日期字段**
|
||||
- Date: 日期
|
||||
- DateTime: 日期时间
|
||||
- Time: 时间
|
||||
|
||||
4. **选择字段**
|
||||
- Dropdown: 下拉选择
|
||||
- Radio: 单选
|
||||
- Checkbox: 复选框
|
||||
- MultiSelect: 多选
|
||||
|
||||
5. **关联字段**
|
||||
- Lookup: 查找关联
|
||||
- Reference: 引用关联
|
||||
- Master-Detail: 主从关联
|
||||
|
||||
## 配置流程 (Configuration Process)
|
||||
|
||||
### 1. 需求分析
|
||||
- 明确业务场景
|
||||
- 确定窗体类型
|
||||
- 梳理字段清单
|
||||
|
||||
### 2. 窗体设计
|
||||
- 创建新窗体
|
||||
- 配置窗体属性
|
||||
- 添加字段控件
|
||||
|
||||
### 3. 字段配置
|
||||
- 选择字段类型
|
||||
- 设置字段属性 (必填、只读、默认值等)
|
||||
- 配置验证规则
|
||||
|
||||
### 4. 权限设置
|
||||
- 配置角色权限
|
||||
- 设置数据访问范围
|
||||
- 配置操作权限
|
||||
|
||||
### 5. 测试验证
|
||||
- 功能测试
|
||||
- 权限测试
|
||||
- 性能测试
|
||||
|
||||
### 6. 发布上线
|
||||
- 提交发布申请
|
||||
- 通过审批流程
|
||||
- 正式发布
|
||||
|
||||
## 常用术语 (Common Terms)
|
||||
|
||||
- **窗体 (Form)**: 用户界面的基本单元,用于数据展示和操作
|
||||
- **字段 (Field)**: 窗体中的数据项,对应数据库列
|
||||
- **控件 (Control)**: 窗体上的可视化元素
|
||||
- **数据源 (Data Source)**: 窗体绑定的数据表或查询
|
||||
- **动作 (Action)**: 窗体上的操作按钮
|
||||
- **验证 (Validation)**: 数据输入的合法性检查
|
||||
- **权限 (Permission)**: 用户对资源的访问控制
|
||||
- **工作流 (Workflow)**: 业务流程的自动化流转
|
||||
|
||||
## 最佳实践 (Best Practices)
|
||||
|
||||
1. **字段命名规范**
|
||||
- 使用英文命名,遵循下划线分隔
|
||||
- 字段名应清晰表达业务含义
|
||||
- 避免使用系统保留字
|
||||
|
||||
2. **性能优化**
|
||||
- 列表窗体配置合理的分页大小
|
||||
- 为常用查询字段建立索引
|
||||
- 避免在窗体中加载过多数据
|
||||
|
||||
3. **用户体验**
|
||||
- 必填字段应明确标识
|
||||
- 提供清晰的错误提示
|
||||
- 常用操作应放在明显位置
|
||||
|
||||
4. **安全性**
|
||||
- 敏感数据应设置访问权限
|
||||
- 用户输入应进行验证
|
||||
- 定期审计权限配置
|
||||
"""
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""Initialize knowledge base with sample documents."""
|
||||
logger.info("Starting knowledge base initialization...")
|
||||
|
||||
try:
|
||||
# Initialize RAG engine
|
||||
logger.info("Initializing RAG engine...")
|
||||
rag = RAGEngine()
|
||||
|
||||
# Add platform basics document
|
||||
logger.info("Adding platform basics document...")
|
||||
metadata = {
|
||||
"title": "平台基础知识",
|
||||
"category": "platform",
|
||||
"language": "zh-CN",
|
||||
"version": "1.0"
|
||||
}
|
||||
|
||||
chunks_added = rag.add_document(
|
||||
doc_id="platform_basics",
|
||||
content=PLATFORM_BASICS_CONTENT,
|
||||
metadata=metadata
|
||||
)
|
||||
|
||||
logger.success(
|
||||
f"Knowledge base initialized successfully! "
|
||||
f"Added {chunks_added} chunks from 'platform_basics' document."
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize knowledge base: {e}")
|
||||
raise
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user