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