finyx_data_ai/IMPLEMENTATION_AI_ANALYZE.md
2026-01-11 07:48:19 +08:00

6.9 KiB
Raw Permalink Blame History

AI 分析接口实现总结

实现完成

/api/v1/inventory/ai-analyze 接口已实现完成。

📋 实现内容

1. 数据模型Schemas

文件: app/schemas/inventory.py

  • FieldInput - 字段输入模型
  • TableInput - 表输入模型
  • AnalyzeOptions - AI 分析选项
  • AIAnalyzeRequest - AI 分析请求模型
  • FieldOutput - 字段输出模型
  • TableOutput - 表输出模型
  • Statistics - 统计信息模型
  • TokenUsage - Token 使用情况模型
  • AIAnalyzeResponse - AI 分析响应模型

2. 业务逻辑服务Services

文件: app/services/ai_analyze_service.py

  • AIAnalyzeService - AI 分析服务类
    • analyze() - 主要分析方法
    • build_prompt() - 提示词构建
    • validate_pii_detection() - PII 识别规则引擎
    • calculate_confidence() - 置信度评分算法

3. 路由处理Routes

文件: app/api/v1/inventory/routes.py

  • ai_analyze() - 路由处理函数
    • 请求验证(通过 Pydantic 模型)
    • 调用业务服务
    • 异常处理
    • 日志记录

4. 提示词模板

  • 系统提示词(SYSTEM_PROMPT
  • 用户提示词模板(USER_PROMPT_TEMPLATE
  • JSON Schema 定义(JSON_SCHEMA

5. 规则引擎

  • PII 识别规则(PII_KEYWORDS
    • 手机号识别
    • 身份证号识别
    • 姓名识别
    • 邮箱识别
    • 地址识别
    • 银行卡号识别

6. 置信度评分算法

  • 命名规范度评分30分
  • 注释完整性评分20分
  • AI 识别结果质量评分30分
  • 基础分50分

🔧 核心功能

1. 表名和字段名中文命名识别

  • 使用大模型将英文表名/字段名转换为中文名称
  • 识别业务含义

2. 业务含义描述生成

  • 自动生成表的中文描述
  • 自动生成字段的中文描述

3. PII个人信息识别

  • 符合《个人信息保护法》(PIPL) 要求
  • 识别类型:
    • 手机号
    • 身份证号
    • 姓名
    • 邮箱
    • 地址
    • 银行卡号
  • 规则引擎补充识别

4. 重要数据识别

  • 识别《数据安全法》定义的重要数据
  • 涉及国家安全、公共利益的数据

5. 置信度评分

  • 评估识别结果的可靠性0-100%
  • 考虑因素:
    • 字段命名规范度
    • 注释完整性
    • 业务含义明确度

📊 接口信息

请求路径

POST /api/v1/inventory/ai-analyze

请求格式

{
  "tables": [
    {
      "raw_name": "t_user_base_01",
      "fields": [
        {
          "raw_name": "user_id",
          "type": "varchar(64)",
          "comment": "用户ID"
        }
      ]
    }
  ],
  "project_id": "project_001",
  "industry": "retail-fresh",
  "context": "业务背景信息",
  "options": {
    "model": "qwen-max",
    "temperature": 0.3,
    "enable_pii_detection": true,
    "enable_important_data_detection": true
  }
}

响应格式

{
  "success": true,
  "code": 200,
  "message": "数据资产识别成功",
  "data": {
    "tables": [...],
    "statistics": {
      "total_tables": 1,
      "total_fields": 3,
      "pii_fields_count": 2,
      "important_data_fields_count": 0,
      "average_confidence": 97.3
    },
    "processing_time": 5.2,
    "model_used": "qwen-max",
    "token_usage": {
      "prompt_tokens": 1200,
      "completion_tokens": 800,
      "total_tokens": 2000
    }
  }
}

🧪 测试

测试文件:tests/test_ai_analyze.py

包含以下测试用例:

  • 测试 AI 分析成功
  • 测试请求验证
  • 测试空表列表

🚀 使用示例

Python 调用示例

import httpx
import asyncio

async def test_ai_analyze():
    async with httpx.AsyncClient() as client:
        response = await client.post(
            "http://localhost:8000/api/v1/inventory/ai-analyze",
            json={
                "tables": [
                    {
                        "raw_name": "t_user_base_01",
                        "fields": [
                            {
                                "raw_name": "user_id",
                                "type": "varchar(64)",
                                "comment": "用户ID"
                            },
                            {
                                "raw_name": "phone",
                                "type": "varchar(11)",
                                "comment": "手机号"
                            }
                        ]
                    }
                ],
                "project_id": "project_001",
                "industry": "retail-fresh",
                "context": "某连锁生鲜零售企业",
                "options": {
                    "model": "qwen-max",
                    "temperature": 0.3
                }
            }
        )
        print(response.json())

asyncio.run(test_ai_analyze())

cURL 调用示例

curl -X POST "http://localhost:8000/api/v1/inventory/ai-analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "tables": [
      {
        "raw_name": "t_user_base_01",
        "fields": [
          {
            "raw_name": "user_id",
            "type": "varchar(64)",
            "comment": "用户ID"
          }
        ]
      }
    ],
    "project_id": "project_001",
    "industry": "retail-fresh"
  }'

⚙️ 配置要求

环境变量

需要在 .env 文件中配置:

# 通义千问 API Key必须
DASHSCOPE_API_KEY=your_dashscope_api_key_here

# 默认大模型
DEFAULT_LLM_MODEL=qwen-max

# 默认温度参数
DEFAULT_TEMPERATURE=0.3

# 超时时间(秒)
LLM_TIMEOUT=60

# 最大重试次数
LLM_MAX_RETRIES=3

📝 注意事项

  1. API Key 配置:必须配置 DASHSCOPE_API_KEY 才能使用通义千问模型
  2. Token 消耗:大模型调用会消耗 Token注意成本控制
  3. 超时处理:默认超时 60 秒,大表可能需要更长时间
  4. 重试机制:已实现自动重试(指数退避),最多重试 3 次
  5. 规则引擎PII 识别使用规则引擎补充,提高准确率
  6. 置信度评分:基于命名规范、注释完整性和 AI 识别质量

🎯 下一步优化建议

  1. 缓存机制:对相同输入进行缓存,减少 API 调用
  2. 批量处理:对于大量表,考虑批量调用或分批处理
  3. 流式输出:对于大表,考虑流式返回结果
  4. 更精确的 Token 统计:使用实际 API 返回的 Token 统计
  5. 更多 PII 类型:扩展 PII 识别规则,支持更多类型
  6. 重要数据识别优化:改进重要数据识别算法

完成状态

  • 请求和响应模型
  • 业务逻辑服务
  • 路由处理函数
  • 提示词模板
  • 规则引擎验证
  • 置信度评分算法
  • 异常处理
  • 日志记录
  • API 文档(自动生成)
  • 单元测试(基础)

实现完成时间: 2025-01-XX 接口状态: 已完成并可用