Files
erp-ass/backend/scripts/init_knowledge.py
dazhuang acd73431ae 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>
2026-03-21 14:23:20 +00:00

179 lines
4.4 KiB
Python

#!/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()