行为分析中的AI原生特征工程方法

行为分析中的AI原生特征工程方法:让机器自己“读懂”用户行为的魔法

关键词:行为分析、AI原生特征工程、用户行为数据、自动化特征提取、深度学习

摘要:在互联网时代,用户点击、浏览、购买等行为数据像潮水一样涌来。传统特征工程依赖人工设计“最近7天点击次数”“平均停留时长”等特征,但面对复杂的行为模式(比如“用户深夜浏览3次商品后次日购买”),人工设计的特征往往“力不从心”。本文将带你走进“AI原生特征工程”的世界——让机器自己从行为数据中“提炼”关键特征,就像教机器“读心术”一样,自动捕捉用户行为背后的规律。我们将通过生活案例、技术原理解析、代码实战,一步步揭开这一技术的神秘面纱。


背景介绍

目的和范围

本文聚焦“行为分析场景下的AI原生特征工程方法”,旨在解决传统特征工程在行为数据分析中的三大痛点:人工设计特征效率低、复杂行为模式难以捕捉、动态行为变化响应慢。我们将覆盖技术原理、核心算法、实战案例及未来趋势。

预期读者

适合对机器学习、用户行为分析感兴趣的开发者、数据分析师,以及希望用AI优化业务决策的产品经理。无需深度学习专家背景,只需了解基础的Python和机器学习概念。

文档结构概述

本文从“用户行为数据的特点”出发,对比传统特征工程的局限性,引出AI原生方法的核心思想;通过生活案例解释关键概念(如序列特征、图特征),用数学公式和代码示例拆解技术细节;最后结合电商用户购买预测的实战案例,展示如何用AI自动提取行为特征。

术语表

  • 行为分析:通过用户行为数据(点击、停留、转化等)挖掘用户偏好和行为规律的过程。
  • 特征工程:从原始数据中提取“对模型预测有帮助”的特征的过程(如将“用户点击时间”转化为“是否是深夜点击”)。
  • AI原生特征工程:利用深度学习、自监督学习等AI技术,自动从原始行为数据中提取特征,减少人工干预。
  • 序列数据:按时间顺序排列的行为数据(如用户上午9点点击A商品→10点加购B商品→11点购买C商品)。
  • 图数据:用“节点-边”表示的行为关系(如用户节点与商品节点通过“点击”边连接)。

核心概念与联系

故事引入:奶茶店的“老顾客”识别难题

小明开了一家网红奶茶店,想通过顾客的消费行为(点单时间、口味偏好、消费频率)识别“高价值老顾客”,从而推出专属优惠。

  • 传统方法:小明手动统计“近30天消费≥5次”“每次消费≥20元”等特征,但漏掉了“每周三晚8点准时买奶茶”这种规律行为的顾客。
  • AI原生方法:小明用AI分析所有顾客的消费时间序列(比如[周三19:50, 周四10:20, 周六15:30,…]),自动发现“每周三晚固定消费”的模式,精准识别出这批“隐藏的老顾客”。

这个故事的核心矛盾是:复杂行为模式(时间规律、跨行为关联)难以用人工设计的特征覆盖,而AI能自动“读懂”这些模式

核心概念解释(像给小学生讲故事一样)

概念一:行为数据的“三大脾气”

行为数据就像一群调皮的小朋友,有三个特别的“脾气”,传统特征工程很难搞定它们:

  1. 时间顺序很重要(时序性):用户先点击A商品再购买B商品,和先购买B再点击A,代表的偏好完全不同(就像“先穿袜子再穿鞋”和“先穿鞋再穿袜子”是两回事)。
  2. 关系网很复杂(图结构):用户点击的商品、关注的店铺、互动的好友,构成一张大网(比如用户A和用户B都买了奶茶,可能是朋友,AI可以通过这张网发现“社交影响”)。
  3. 变化快,没标签(动态无监督):用户的兴趣可能突然从奶茶转向咖啡,而我们很难及时给新行为打标签(就像小朋友突然不喜欢吃糖果,家长需要观察很久才发现)。
概念二:传统特征工程的“三大痛点”

传统特征工程像“手工做拼图”,需要人工设计特征(比如“近7天点击次数”),但面对行为数据的“三大脾气”,它有三个大问题:

  1. 漏细节:人工很难想到所有可能的模式(比如“用户深夜浏览3次后次日购买”这种隐藏规律)。
  2. 效率低:每个新业务场景都要重新设计特征(比如从“电商点击”换到“短视频观看”,需要重新想特征)。
  3. 反应慢:用户行为变化后,人工特征更新需要时间(比如用户突然流行“直播下单”,旧特征可能失效)。
概念三:AI原生特征工程的“三大超能力”

AI原生特征工程像“智能拼图机器人”,能自动从行为数据中“提炼”有用特征,它的超能力正好克制行为数据的“脾气”:

  1. 懂时间顺序(序列模型):用LSTM、Transformer等模型,记住行为的先后顺序(就像记忆力超好的小助手,能记住用户“第一步点A,第二步加购B”)。
  2. 懂关系网(图神经网络):用GNN分析用户-商品-店铺的关系网(就像侦探破案,从“用户A和B都买了奶茶”推出“他们可能互相推荐”)。
  3. 无师自通(自监督学习):即使没有标签,也能从行为数据中自己学习特征(就像小朋友玩“找不同”游戏,自己发现“点击A后常买B”的规律)。

核心概念之间的关系(用小学生能理解的比喻)

行为数据的“三大脾气”是问题,传统特征工程是“旧工具”,AI原生方法是“新工具”。三者的关系就像:

  • 时间顺序的行为数据(调皮的小朋友)→ 传统特征工程(手工拼图)→ 漏细节、效率低(拼不全、拼得慢)。
  • 时间顺序的行为数据(调皮的小朋友)→ AI原生方法(智能拼图机器人)→ 自动拼出隐藏图案(发现“深夜浏览后购买”的规律)。

核心概念原理和架构的文本示意图

传统特征工程 vs AI原生特征工程:

传统流程:行为数据 → 人工设计特征(如“近7天点击次数”) → 输入模型训练  
AI原生流程:行为数据 → AI模型(如LSTM、GNN) → 自动提取特征 → 输入模型训练  

Mermaid 流程图

graph TD
    A[原始行为数据] --> B[传统特征工程]
    B --> C[人工设计特征]
    C --> D[模型训练]
    A --> E[AI原生特征工程]
    E --> F[自动提取特征(序列/图/自监督)]
    F --> D

核心算法原理 & 具体操作步骤

AI原生特征工程的核心是“用AI模型直接处理原始行为数据,输出对模型有用的特征”。我们重点介绍三种主流方法:序列特征提取(LSTM/Transformer)、图特征提取(GNN)、自监督特征提取(对比学习)

1. 序列特征提取:让机器“记住”行为顺序

用户行为通常是按时间顺序发生的(比如“点击→加购→购买”),序列模型能捕捉这种“时间依赖”。最经典的模型是LSTM(长短期记忆网络),它有一个“记忆细胞”,能记住长时间的行为模式。

数学原理(用公式说话)

LSTM的核心是三个“门”(输入门、遗忘门、输出门),控制记忆的“存储”和“遗忘”:

  • 遗忘门 ( f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ):决定忘记多少旧记忆(( h_{t-1} )是上一步的输出,( x_t )是当前行为数据)。
  • 输入门 ( i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) ):决定保留多少新信息。
  • 记忆细胞 ( C_t = f_t \odot C_{t-1} + i_t \odot \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) ):结合旧记忆和新信息。
  • 输出门 ( h_t = o_t \odot \tanh(C_t) ):输出当前记忆(( h_t )就是提取的序列特征)。
Python代码示例(用LSTM提取用户行为序列特征)

假设我们有用户的点击序列数据(每个行为用128维的向量表示),用PyTorch实现LSTM提取特征:

import torch
import torch.nn as nn

class LSTMFeatureExtractor(nn.Module):
    def __init__(self, input_dim=128, hidden_dim=64):
        super().__init__()
        # LSTM层,输入维度128,隐藏层维度64
        self.lstm = nn.LSTM(input_size=input_dim, hidden_size=hidden_dim, batch_first=True)
    
    def forward(self, x):
        # x形状:(批量大小, 序列长度, 输入维度),例如(32, 10, 128)
        outputs, (h_n, c_n) = self.lstm(x)
        # 取最后一个时间步的隐藏状态作为特征(也可以取所有时间步的平均)
        return h_n.squeeze(0)  # 输出形状:(批量大小, 64)

# 测试代码
batch_size = 32
seq_length = 10  # 用户最近10次点击行为
input_dim = 128
x = torch.randn(batch_size, seq_length, input_dim)  # 随机生成行为序列数据
model = LSTMFeatureExtractor()
features = model(x)
print(f"提取的序列特征形状:{features.shape}")  # 输出:(32, 64)

2. 图特征提取:让机器“看懂”行为关系网

用户点击商品、关注店铺、互动好友,构成一张“行为图”(用户节点、商品节点,边表示“点击”“关注”等行为)。图神经网络(GNN)能通过“消息传递”,让节点(用户/商品)学习到周围节点的信息。

数学原理(用公式说话)

GNN的核心是“邻居聚合”:每个节点的特征由自己和邻居的特征加权求和得到。以GCN(图卷积网络)为例:
( H^{(l+1)} = \sigma(\tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2} H^{(l)} W^{(l)}) )
其中:

  • ( \tilde{A} = A + I )(A是邻接矩阵,I是单位矩阵,给每个节点添加自环)。
  • ( \tilde{D} )是( \tilde{A} )的度矩阵(对角线元素是每个节点的邻居数+1)。
  • ( H^{(l)} )是第l层的节点特征矩阵,( W^{(l)} )是可学习的权重矩阵。

简单来说:每个节点的新特征 = (自己的特征 + 所有邻居的特征)的加权平均(就像小朋友互相分享玩具,最后每个小朋友都有了大家的玩具信息)。

Python代码示例(用GNN提取用户-商品图特征)

用DGL(Deep Graph Library)库实现GCN提取用户特征:

import dgl
import dgl.nn as dglnn
import torch.nn as nn

class GCNFeatureExtractor(nn.Module):
    def __init__(self, in_feats=64, hidden_feats=32):
        super().__init__()
        # GCN层,输入维度64,输出维度32
        self.gcn = dglnn.GraphConv(in_feats, hidden_feats)
    
    def forward(self, g, node_feats):
        # g是DGL图对象,node_feats是节点原始特征(用户和商品的特征)
        h = self.gcn(g, node_feats)
        return h  # 输出每个节点的新特征(用户特征已包含商品邻居的信息)

# 测试代码
# 构建一个简单的用户-商品图:2个用户(节点0-1),3个商品(节点2-4)
edges = {
    (0, 2), (0, 3),  # 用户0点击商品2、3
    (1, 3), (1, 4)   # 用户1点击商品3、4
}
g = dgl.graph(edges)
# 节点原始特征:用户用[1,0]表示,商品用[0,1]表示(假设输入维度64,这里简化为2维)
node_feats = torch.tensor([[1,0], [1,0], [0,1], [0,1], [0,1]], dtype=torch.float32)
model = GCNFeatureExtractor(in_feats=2, hidden_feats=32)
features = model(g, node_feats)
print(f"用户0的新特征(包含商品2、3的信息):{features[0]}")

3. 自监督特征提取:让机器“无师自通”学特征

很多行为数据没有标签(比如用户点击了但没购买,不知道是否“感兴趣”),自监督学习能让机器自己“找规律”。最常用的是对比学习:让模型区分“相似行为”和“不相似行为”(比如用户A的点击序列和用户A的另一个点击序列是相似的,和用户B的点击序列是不相似的)。

数学原理(用公式说话)

对比学习的目标是:对于每个行为样本 ( x ),生成正样本 ( x^+ )(同一用户的其他行为)和负样本 ( x^- )(其他用户的行为),让模型学习到 ( x )和( x^+ )的特征更接近,和( x^- )的特征更远离。损失函数为:
( \mathcal{L} = -\log \frac{\exp(\text{sim}(h, h+)/\tau)}{\sum_{h-} \exp(\text{sim}(h, h^-)/\tau)} )
其中:

  • ( h, h^+, h^- )是原始、正、负样本的特征。
  • ( \text{sim}(a,b) )是余弦相似度(( a \cdot b / (||a|| \cdot ||b||) ))。
  • ( \tau )是温度参数(控制相似度的“平滑度”)。
Python代码示例(用对比学习提取无标签行为特征)

用PyTorch实现一个简单的对比学习模型:

import torch
import torch.nn as nn
import torch.nn.functional as F

class ContrastiveModel(nn.Module):
    def __init__(self, input_dim=128, hidden_dim=64):
        super().__init__()
        self.encoder = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, hidden_dim)
        )
    
    def forward(self, x):
        return self.encoder(x)  # 输出特征
    
    def contrastive_loss(self, h1, h2, tau=0.5):
        # h1和h2是同一用户的两个不同行为序列的特征(正样本对)
        # 拼接所有正样本对和负样本对
        h = torch.cat([h1, h2], dim=0)
        # 计算相似度矩阵
        sim = F.cosine_similarity(h.unsqueeze(1), h.unsqueeze(0), dim=2) / tau
        # 正样本的索引:h1的正样本是h2,h2的正样本是h1
        mask = torch.eye(h1.shape[0]*2, dtype=torch.bool)
        mask = ~mask  # 排除自己和自己的对比
        # 计算损失(交叉熵形式)
        labels = torch.arange(h1.shape[0], 2*h1.shape[0], device=h.device)
        loss = F.cross_entropy(sim[~mask].view(-1, 2*h1.shape[0]-1), labels)
        return loss

# 测试代码
batch_size = 32
input_dim = 128
# 生成同一用户的两个行为序列(正样本对)
x1 = torch.randn(batch_size, input_dim)  # 行为序列1
x2 = torch.randn(batch_size, input_dim)  # 行为序列2(同一用户的另一个序列)
model = ContrastiveModel()
h1 = model(x1)
h2 = model(x2)
loss = model.contrastive_loss(h1, h2)
print(f"对比学习损失:{loss.item()}")  # 损失越小,模型越能区分正负样本

数学模型和公式 & 详细讲解 & 举例说明

前面已经结合算法介绍了数学公式,这里用更通俗的语言总结:

  • 序列模型(LSTM):通过“记忆细胞”和三个“门”,选择性地记住行为的时间顺序(比如用户“先点击A,后加购B”会被记住,而“无关的中间点击”会被遗忘)。
  • 图模型(GCN):通过“邻居聚合”,让用户节点学习到关联商品的特征(比如用户A点击了商品B,商品B被很多高价值用户点击,用户A的特征会包含“可能是高价值用户”的信息)。
  • 对比学习:通过“找不同”游戏,让模型自动学习行为的“独特性”(比如用户A的点击序列和用户B的不同,模型会提取出能区分他们的特征)。

项目实战:电商用户购买预测(用AI原生特征工程)

开发环境搭建

  • 操作系统:Windows/Linux/macOS
  • 工具:Python 3.8+、PyTorch 1.9+、Pandas、Numpy
  • 数据:某电商用户的行为日志(包含用户ID、时间戳、行为类型(点击/加购/购买)、商品ID)。

数据预处理

原始数据可能像这样(简化版):

用户ID 时间戳 行为类型 商品ID
1 2023-10-01 9:00 点击 101
1 2023-10-01 9:05 加购 101
1 2023-10-01 9:10 购买 101
2 2023-10-01 10:00 点击 102

预处理步骤:

  1. 序列构造:按用户ID和时间戳排序,生成每个用户的行为序列(如用户1的序列:[点击101→加购101→购买101])。
  2. 特征编码:将行为类型(点击=0,加购=1,购买=2)和商品ID(用嵌入层转为向量)编码为数值特征。
  3. 标签生成:预测用户是否会购买某个商品(标签1=购买,0=未购买)。

源代码详细实现和代码解读

我们将用LSTM提取用户行为序列特征,然后用全连接层预测购买概率。

import pandas as pd
import torch
import torch.nn as nn
from sklearn.model_selection import train_test_split
from torch.utils.data import Dataset, DataLoader

# ---------------------- 步骤1:数据加载与预处理 ----------------------
data = pd.read_csv("user_behavior.csv")  # 假设数据已下载到本地
# 将行为类型转为数值:点击=0,加购=1,购买=2
data["行为类型"] = data["行为类型"].map({"点击": 0, "加购": 1, "购买": 2})
# 按用户和时间排序,生成行为序列
user_sequences = data.groupby("用户ID").apply(
    lambda x: x.sort_values("时间戳")[["行为类型", "商品ID"]].values.tolist()
).to_dict()

# 构建数据集(每个样本是用户的行为序列,标签是是否购买过该商品)
class BehaviorDataset(Dataset):
    def __init__(self, user_sequences):
        self.samples = []
        for user_id, seq in user_sequences.items():
            # 取最后一个行为作为标签(是否购买)
            last_action = seq[-1][0]
            label = 1 if last_action == 2 else 0  # 购买=1,否则=0
            # 行为序列特征:取前n-1个行为(这里简化为取全部)
            features = [action + [item] for action, item in seq[:-1]]  # 合并行为类型和商品ID
            self.samples.append((torch.tensor(features, dtype=torch.float32), torch.tensor(label)))
    
    def __len__(self):
        return len(self.samples)
    
    def __getitem__(self, idx):
        return self.samples[idx]

# 划分训练集和测试集
train_sequences, test_sequences = train_test_split(user_sequences, test_size=0.2, random_state=42)
train_dataset = BehaviorDataset(train_sequences)
test_dataset = BehaviorDataset(test_sequences)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32)

# ---------------------- 步骤2:模型构建(LSTM提取特征+分类) ----------------------
class BehaviorClassifier(nn.Module):
    def __init__(self, input_dim=2, hidden_dim=64, output_dim=1):
        super().__init__()
        self.lstm = nn.LSTM(input_size=input_dim, hidden_size=hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)
    
    def forward(self, x):
        # x形状:(批量大小, 序列长度, 输入维度)(输入维度=行为类型+商品ID=2)
        outputs, (h_n, c_n) = self.lstm(x)
        # 用最后一个时间步的隐藏状态作为特征
        h = h_n.squeeze(0)
        # 全连接层预测购买概率
        logits = self.fc(h)
        return logits.squeeze()  # 输出形状:(批量大小,)

# ---------------------- 步骤3:模型训练与评估 ----------------------
model = BehaviorClassifier()
criterion = nn.BCEWithLogitsLoss()  # 二分类交叉熵损失
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 训练循环
for epoch in range(10):
    model.train()
    train_loss = 0.0
    for features, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(features)
        loss = criterion(outputs, labels.float())
        loss.backward()
        optimizer.step()
        train_loss += loss.item()
    print(f"Epoch {epoch+1}, Train Loss: {train_loss/len(train_loader):.4f}")

# 测试评估
model.eval()
test_acc = 0.0
with torch.no_grad():
    for features, labels in test_loader:
        outputs = torch.sigmoid(model(features))  # 转为概率
        preds = (outputs > 0.5).long()  # 阈值0.5分类
        test_acc += (preds == labels).sum().item()
print(f"Test Accuracy: {test_acc/len(test_dataset):.4f}")

代码解读与分析

  • 数据预处理:将用户行为按时间排序,生成序列数据,并标记是否购买(标签)。
  • 模型结构:LSTM层提取序列特征(捕捉“点击→加购→购买”的顺序),全连接层输出购买概率。
  • 训练逻辑:使用二分类交叉熵损失,优化器为Adam,训练10轮后评估测试集准确率。

实际应用场景

AI原生特征工程在行为分析中已经广泛应用,以下是三个典型场景:

1. 推荐系统:“比你更懂你”的个性化推荐

传统推荐模型用“用户年龄+商品类别”等人工特征,而AI原生方法用用户的点击序列(LSTM)、用户-商品互动图(GNN)提取特征,能捕捉“用户最近常看运动装备→可能想买跑鞋”的隐藏偏好。

2. 风控反欺诈:“揪出”异常行为

诈骗分子的行为往往“反常规”(比如深夜快速点击多个账户),AI原生方法通过自监督学习(对比正常行为和异常行为的特征),能自动发现这些“不寻常”的模式。

3. 用户分群:“精准圈定”高价值用户

传统分群用“消费金额+频次”等人工特征,而AI原生方法用行为序列特征(如“每周固定时间购买”)和图特征(如“被多个高价值用户推荐”),能更精准地划分“忠实用户”“潜力用户”“流失用户”。


工具和资源推荐

  • 深度学习框架:PyTorch(易上手)、TensorFlow(工业级)、DGL(图神经网络专用)。
  • 特征工程库:Feast(特征存储与管理)、TSFresh(时序特征自动提取)。
  • 论文与教程
    • 《Deep Learning for Tabular Data: A Survey》(总结表格数据的深度学习方法)。
    • 《Graph Neural Networks for Recommender Systems》(图神经网络在推荐系统中的应用)。
    • Hugging Face教程(https://huggingface.co/learn)(含序列模型实战)。

未来发展趋势与挑战

趋势1:多模态行为特征融合

用户行为不仅有点击序列(时序)、互动关系(图),还有商品图片(视觉)、评论(文本)等多模态数据。未来的AI原生方法将融合这些模态,提取更全面的特征(比如“用户点击红色连衣裙图片+搜索‘显瘦’关键词”→ 提取“关注显瘦红色连衣裙”的特征)。

趋势2:实时特征工程

用户行为实时变化(比如直播时用户集中点击某商品),未来的模型需要支持“在线学习”,实时更新特征提取方式(就像“边看用户行为边调整特征”)。

挑战:可解释性与公平性

AI原生特征工程的“黑箱”问题(比如模型为什么认为“深夜点击3次”是高购买信号)可能影响业务决策。未来需要研究“可解释的AI特征工程”,让模型“说清楚”特征提取的逻辑。


总结:学到了什么?

核心概念回顾

  • 行为数据的特点:时序性、图结构、动态无监督。
  • 传统特征工程的痛点:漏细节、效率低、反应慢。
  • AI原生方法的超能力:序列模型(记顺序)、图模型(懂关系)、自监督学习(无师自通)。

概念关系回顾

行为数据的“脾气”(时序、图、无监督)→ 传统方法搞不定 → AI原生方法(序列/LSTM、图/GNN、自监督/对比学习)自动提取特征 → 模型效果更好。


思考题:动动小脑筋

  1. 场景题:假设你是某短视频平台的算法工程师,需要分析用户的观看行为(播放、点赞、分享),你会选择哪种AI原生特征工程方法(序列/图/自监督)?为什么?
  2. 技术题:自监督学习在无标签行为数据中很有用,但如果数据中存在大量“噪声行为”(比如用户误点),如何避免模型学习到错误的特征?
  3. 开放题:你能想到生活中还有哪些行为数据(比如健身房打卡、外卖订单)可以用AI原生特征工程分析?尝试设计一个简单的应用场景。

附录:常见问题与解答

Q:AI原生特征工程会完全替代人工特征工程吗?
A:不会。人工特征工程在“明确已知的关键特征”(如“用户是否是新注册”)中仍有价值,AI原生方法更擅长捕捉“隐藏的、复杂的模式”。两者结合(比如人工特征+AI自动特征)效果更好。

Q:如何评估AI提取的特征质量?
A:可以通过“下游任务效果”(比如购买预测准确率是否提升)、“特征可解释性”(比如用SHAP值分析特征重要性)、“特征多样性”(避免所有特征高度相关)来评估。

Q:AI原生特征工程需要多少数据?
A:深度学习模型通常需要较多数据(数万到百万级样本),但自监督学习可以在较少数据上通过“自己玩游戏”学习特征。如果数据量少,建议结合迁移学习(用预训练模型初始化)。


扩展阅读 & 参考资料

  • 论文:《Sequence to Sequence Learning with Neural Networks》(LSTM经典论文)。
  • 论文:《Semi-Supervised Classification with Graph Convolutional Networks》(GCN经典论文)。
  • 书籍:《Deep Learning for Tabular Data: A Practice Guide》(Jared Tan著,实战指南)。
  • 博客:《The Unreasonable Effectiveness of Recurrent Neural Networks》(Andrej Karpathy的LSTM入门博客)。

你可能感兴趣的:(CSDN,AI-native,ai)