news 2026/8/20 3:37:14

基于NE503边缘AI模块的徘徊检测系统开发实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于NE503边缘AI模块的徘徊检测系统开发实战

1. 项目概述:当边缘AI遇上徘徊检测

最近在折腾一个挺有意思的项目,核心是把一个叫NE503的边缘AI计算模块,和一个听起来很酷的“Claude Code”开发工具链结合起来,做一个徘徊检测报警系统。说白了,就是让摄像头不仅能“看见”,还能“理解”场景,当有人在某个敏感区域长时间逗留时,自动发出警报。这玩意儿听起来像是安防领域的标配,但自己做一遍,从选型、开发到调试,里面的门道和踩过的坑,跟直接用成熟方案完全是两码事。

NE503这个模块,我之前在一些工业物联网项目里接触过,它的算力对于运行一些轻量级的视觉模型是足够的,关键是功耗和尺寸控制得好,适合部署在摄像头旁边,实现真正的“边缘”计算,数据不用上传云端,响应快,隐私性也好。而“Claude Code”,根据我搜集的信息和实际体验,它更像是一个集成了AI辅助编程能力的集成开发环境(IDE)或者一套工具链,特别强调通过自然语言描述来生成、理解和调试代码,这对于快速原型开发,尤其是算法逻辑和业务逻辑的对接部分,能省不少力气。

这个项目的目标很明确:利用NE503的硬件能力,运行一个目标检测与跟踪模型,在视频流中识别出“人”这个类别,并计算其在预设区域内的停留时间。一旦超过阈值,就通过NE503的GPIO或者网络接口触发一个报警信号。整个逻辑链条清晰,但每一步,从模型选择与优化、算法逻辑实现,到与硬件的深度集成,都需要仔细考量。下面我就把自己从零搭建这个系统的完整过程、核心决策点和那些“教科书上不会写”的实操经验,详细拆解一遍。

2. 核心思路与方案选型背后的考量

做边缘AI项目,最忌讳的就是一开始就埋头写代码。硬件性能、软件生态、算法效率这几个环必须扣在一起考虑,任何一个短板都会让项目后期举步维艰。我的选型思路是倒推的:先定功能,再定算法,最后匹配硬件和开发工具。

2.1 为什么是NE503?

市面上边缘计算盒子很多,从树莓派加加速棒到英伟达的Jetson系列。选择NE503,我主要基于以下几点考虑:

  1. 算力与功耗的平衡:徘徊检测不需要像自动驾驶那样进行高精度、多目标的实时感知。一个轻量化的YOLO系列(如YOLOv5s, YOLOv8n)或者MobileNet-SSD这类模型足矣。NE503的NPU(神经网络处理单元)算力通常在1-几TOPS,应对这类模型在720p或1080p分辨率下的实时推理(比如15-30 FPS)是可行的,同时它的功耗可以控制在10瓦以内,这对于长期在线、可能采用PoE供电的安防场景非常关键。
  2. 接口与集成度:NE503通常自带丰富的接口,包括MIPI-CSI摄像头接口、千兆网口、USB、GPIO等。这意味着我可以直接连接标准的安防摄像头模组,报警输出也可以直接通过GPIO控制声光报警器,或者通过网络发送消息到服务器,集成起来非常方便,不需要额外的转接板。
  3. 软件SDK与生态:这是重中之重。一个硬件模块再好,如果没有成熟的SDK和文档,开发成本会急剧上升。NE503的厂商通常会提供完整的SDK,里面包含了驱动、模型转换工具(将PyTorch/TensorFlow模型转换成能在其NPU上高效运行的格式)、推理引擎API以及一些基础的应用示例。在项目开始前,我必须确认其SDK对OpenCV、Python(或C++)的支持是否完善,模型转换工具是否支持我计划使用的模型架构。

2.2 为什么引入Claude Code?

“Claude Code”在这里的角色不是替代传统的编程,而是作为一个强大的“加速器”和“粘合剂”。在边缘AI开发中,我们经常面临这样的困境:算法工程师用Python在PC上训练和测试模型,而嵌入式工程师需要用C++在目标板上进行高性能集成。两者之间的鸿沟需要大量的移植、优化和调试工作。

Claude Code的价值体现在:

  1. 快速生成样板代码:当我需要编写一个从摄像头捕获图像、进行预处理、送入模型推理、后处理得到框坐标的流水线时,我可以向Claude Code描述:“用Python写一个基于OpenCV的代码,从CSI摄像头读取帧,用NE503 SDK的推理引擎API运行YOLOv8模型,并解析输出。”它能快速生成结构清晰、包含必要错误处理的代码框架,我只需要填充SDK特有的API调用细节。
  2. 理解和调试复杂逻辑:徘徊检测的核心逻辑之一是跟踪。我需要实现一个简单的跟踪器(比如基于IOU的跟踪),来计算同一个人的连续帧位置并判断其是否在区域内停留超时。这部分逻辑涉及状态管理、数据关联,容易出bug。我可以把写好的跟踪算法代码丢给Claude Code,让它帮我检查逻辑漏洞,或者解释某段复杂的代码在干什么。
  3. 辅助进行代码移植与优化:当我在PC上用Python原型验证了算法逻辑后,最终为了性能可能需要用C++在NE503上实现。Claude Code可以帮助我将Python逻辑翻译成C++代码框架,并指出一些关键的不同点(如内存管理、类型系统)。虽然不能直接生成最优化的生产代码,但大大减少了初期的编码工作量。

注意:Claude Code是一个辅助工具,不能替代你对NE503 SDK、计算机视觉基础和C++/Python语言的掌握。它的输出需要你进行严格的审查、测试和调整,特别是涉及硬件操作和性能关键的部分。

2.3 整体系统架构设计

基于以上选型,系统的架构就清晰了:

  1. 数据输入层:NE503通过MIPI-CSI接口直接连接摄像头传感器,或者通过RTSP拉取网络摄像头的流。前者延迟更低,集成度更高。
  2. 核心处理层
    • 视频捕获:使用SDK提供的V4L2或自定义驱动模块抓取视频帧。
    • AI推理:将抓取的帧进行缩放、归一化等预处理,送入NE503 NPU,运行转换后的轻量级目标检测模型(如YOLOv8n)。
    • 算法逻辑:在CPU上运行Python/C++程序,对NPU输出的检测框进行后处理(过滤低置信度目标、非“人”类别),并实现多目标跟踪与滞留时间判断。
  3. 输出与响应层:一旦算法判断发生徘徊事件,立即通过GPIO输出高电平触发本地报警器,同时通过网络Socket或HTTP请求将事件详情(时间、位置、截图)上报到中心管理平台。

这个架构的关键在于,AI推理这个最耗算力的部分卸载到了专用的NPU上,CPU得以轻装上阵,专注于更灵活的业务逻辑处理。

3. 开发环境搭建与模型准备

工欲善其事,必先利其器。在NE503上开发,第一步就是搭建交叉编译环境或者直接在板卡上开发。

3.1 NE503 SDK部署与模型转换

拿到NE503开发板后,第一件事不是通电,而是去官网下载最新的SDK和文档。通常SDK里会包含:

  • 工具链:针对该芯片架构(很可能是ARM A系列)的交叉编译工具链(gcc, g++)。
  • 固件与驱动:板卡的基础固件、Linux内核镜像、NPU驱动等。
  • 模型转换工具:这是核心,可能叫model_convertornnc之类的。它负责将ONNX格式的模型转换成NE503 NPU识别的专有格式(可能是.nb.bin文件)。
  • 推理引擎库:供应用程序调用的C++/Python API库文件(.so.a)和头文件。
  • 示例程序:通常有一个简单的“hello world”级别的目标检测示例,这是最好的学习材料。

模型转换是关键一步,也是最容易踩坑的地方。以YOLOv8n为例:

  1. 首先在PC上,使用PyTorch或Ultralytics官方库导出YOLOv8n为ONNX格式。注意导出时的输入尺寸(例如640x640)和输出格式。
  2. 使用NE503提供的模型转换工具,加载这个ONNX文件。这里通常需要提供一个配置文件,指定一些转换参数,例如:
    • input_shape: 输入张量尺寸,必须和导出时一致。
    • mean/std: 预处理归一化参数,需要和模型训练时一致,通常为[0,0,0][1,1,1](如果模型内部已处理)。
    • output_format: 指定输出为NPU格式。
  3. 运行转换命令。这里最常见的错误是算子不支持。NPU对神经网络算子的支持是有限的,如果模型中包含了NPU不支持的算子(某些特殊的激活函数、自定义层),转换就会失败。解决方案通常是修改模型结构(使用支持的算子替换),或者联系厂商寻求支持。转换成功后,你会得到一个.nb模型文件。

实操心得:在模型选择阶段,最好先查阅NE503 SDK的文档,看其“模型支持列表”或“算子支持列表”。优先选择列表里明确支持的模型架构(如MobileNetV2, YOLOv5s),可以避免后续很多麻烦。如果必须用新模型,做好自己调试和适配的准备。

3.2 Claude Code辅助的代码框架生成

有了模型,接下来就是写业务代码。我会先在PC的Linux虚拟机上,用Claude Code搭建一个模拟开发环境。

例如,我会给Claude Code这样的提示: “我需要为一个边缘AI设备编写徘徊检测程序。请用Python生成一个代码框架,包含以下模块:

  1. 一个Camera类,使用OpenCV从视频文件(模拟)或RTSP流读取帧。
  2. 一个Detector类,它初始化时加载一个模型文件,并有一个detect方法,输入图像,返回检测到的边界框列表、类别和置信度。这里先用一个假的检测函数模拟。
  3. 一个Tracker类,实现一个简单的基于IOU的多目标跟踪,为每个跟踪目标分配唯一ID,并记录其位置历史。
  4. 一个ZoneAnalyser类,定义多个多边形检测区域,并判断每个跟踪目标在区域内的累计停留时间。
  5. 主循环main,将以上模块串联起来,模拟处理流程,并在控制台打印报警信息。”

Claude Code会生成一个结构良好的Python项目框架,包含了类定义、方法骨架和简单的模拟逻辑。这个框架的价值在于帮我理清了模块边界和数据流。然后,我需要做最关键的一步:将模拟部分替换为真实的NE503 SDK调用

具体来说,就是重写Detector类:

  1. __init__中,调用SDK的API加载我们转换好的.nb模型文件。
  2. detect方法中:
    • 将OpenCV读取的BGR图像转换为RGB,并缩放到模型输入尺寸。
    • 调用SDK的inference接口,将图像数据送入NPU。
    • 获取推理输出。SDK的输出格式可能是多维数组,需要根据模型定义(例如YOLOv8的输出是(1, 84, 8400))进行解析,解码出框坐标、置信度和类别。
    • 应用非极大值抑制(NMS)过滤重叠框。
    • 返回结构化的检测结果。

这个过程需要仔细阅读SDK的API文档和示例代码,确保内存管理和数据格式的正确性。

4. 核心算法逻辑实现与优化

当硬件调用打通后,核心的智能就体现在算法逻辑上了。徘徊检测不仅仅是检测人,更是理解人的行为。

4.1 轻量级多目标跟踪器实现

在边缘设备上,我们不能用复杂的DeepSORT,需要一个计算量极小的跟踪器。我实现了一个基于交并比(IOU)和卡尔曼滤波(可选)的简单跟踪器。

核心逻辑如下:

  1. 目标初始化:对于第一帧检测到的每个目标,为其创建一个跟踪器实例,分配新ID,并记录其位置(边界框)和特征(可以用框的颜色直方图或简单的外观特征,为节省算力,初期甚至可以不用)。
  2. 帧间匹配:对于新一帧的检测结果,计算其与所有现有跟踪目标上一帧位置的IOU。使用匈牙利算法或简单的贪婪匹配,为检测框分配最可能对应的跟踪ID。IOU阈值通常设为0.3-0.5,过低容易导致ID切换,过高则容易丢失目标。
  3. 跟踪状态管理:每个跟踪目标有一个“丢失”计数器。如果连续几帧(如5-10帧)都没有匹配到检测框,则认为该目标已离开场景,删除其跟踪器。这可以防止跟踪器数量无限增长。
  4. 轨迹平滑:为了更稳定地计算位置,可以对跟踪到的框坐标序列进行滑动平均滤波。
# 伪代码示例 class SimpleTracker: def __init__(self, max_age=5): self.tracks = {} # id -> {'bbox': [], 'history': [], 'missed': 0} self.next_id = 0 self.max_age = max_age def update(self, detections): # detections: list of [x1, y1, x2, y2, conf, cls] matched_idx = [] # 1. 预测现有track的当前位置(这里简单用上一帧位置作为预测) # 2. 计算detections与tracks预测位置的IOU矩阵 # 3. 进行匹配(贪婪或匈牙利算法) # 4. 更新匹配成功的track:用检测框更新位置,清空missed计数,记录历史 # 5. 为未匹配的detection创建新track # 6. 增加未匹配的track的missed计数,如果超过max_age则删除 return self.tracks # 返回更新后的跟踪列表

注意事项:IOU跟踪在目标密集、相互遮挡时效果会变差。在实际部署中,如果场景复杂,可以考虑引入低计算成本的外观特征(如HSV颜色直方图)进行二次匹配,或者使用更高效的边缘优化跟踪算法。

4.2 区域管理与徘徊判断逻辑

这是业务逻辑的核心。我们需要定义敏感区域(ROI),并计算每个跟踪目标在区域内的停留时间。

  1. 区域定义:通常支持多边形区域。在代码中,可以用一个顶点列表来表示。为了方便判断点是否在多边形内,可以使用OpenCV的cv2.pointPolygonTest函数。
  2. 状态记录:为每个跟踪目标维护一个字典,记录其与每个定义区域的关系。例如:track_zone_status[track_id][zone_id] = {'enter_time': None, 'total_duration': 0, 'is_inside': False}
  3. 每帧判断
    • 计算跟踪目标当前帧的中心点或底部中心点。
    • 遍历所有区域,用pointPolygonTest判断该点是否在区域内。
    • 如果点进入一个之前不在的区域,记录enter_time,并将is_inside设为True。
    • 如果点离开一个之前所在的区域,计算从enter_time到当前时间的差值,累加到total_duration,然后将enter_time置为None,is_inside设为False。
    • 如果点持续在一个区域内,则更新其total_duration(可以用当前时间减enter_time,也可以每帧累加一个固定时间片)。
  4. 报警触发:任何一个目标的total_duration超过预设的阈值(例如10秒),则触发徘徊报警。报警后,可以设置一个静默期,避免短时间内重复报警。

优化点:为了抗抖动,可以引入“进入/离开”的迟滞判断。例如,连续3帧在区域内才判定为“进入”,连续3帧在区域外才判定为“离开”。这能有效避免目标在边界晃动导致的误报。

5. 系统集成、调试与性能调优

当各个模块都准备好后,就需要把它们集成到NE503上,并面对真实的摄像头流进行调试和优化。

5.1 在NE503上部署与运行

  1. 交叉编译:如果你的开发环境在PC上,需要使用NE503 SDK提供的交叉编译工具链来编译你的C++程序。确保在Makefile或CMakeLists.txt中正确链接SDK的推理引擎库和其他依赖库(如OpenCV的交叉编译版本)。
  2. 文件传输:将编译好的可执行文件、转换后的模型文件(.nb)以及任何配置文件,通过SCP或SFTP传输到NE503设备上。
  3. 环境依赖:确保NE503的Linux系统上安装了必要的运行时库,例如OpenCV的共享库、Python解释器及依赖包(如果使用Python)。这些可能需要从SDK中获取或自己交叉编译。
  4. 权限与设备节点:运行程序可能需要访问摄像头设备(如/dev/video0)或GPU/NPU设备节点。确保运行程序的用户有相应权限。

一个典型的启动命令可能是:

./loitering_alert -m model.nb -c config.json -i /dev/video0

5.2 性能分析与瓶颈定位

程序跑起来后,第一件事是看性能是否达标。使用tophtop命令查看CPU占用率。如果CPU占用率持续很高(比如>80%),而NPU利用率不高,说明瓶颈在CPU侧的业务逻辑(如跟踪、区域判断)或者数据预处理/后处理上。

常见的性能瓶颈及优化方法:

  1. 图像预处理开销:在CPU上进行缩放、颜色空间转换(BGR2RGB)可能较慢。
    • 优化:查看SDK是否支持直接在NPU的预处理单元或通过DMA进行这些操作。或者,使用OpenCV的UMat或NEON指令集优化版本。
  2. 检测后处理开销:YOLO类模型输出解析和NMS操作,如果实现不够高效,在CPU上可能成为瓶颈。
    • 优化:确保NMS算法是优化过的(例如使用快速向量化实现)。如果SDK支持,可以尝试将NMS也放到NPU上完成(部分高级SDK提供此功能)。
  3. 跟踪算法开销:当目标数量很多时,IOU计算和匹配可能耗时。
    • 优化:限制跟踪器的最大数量。对于远离检测区域的目标,可以提前终止跟踪。使用更简单的距离度量代替IOU进行初筛。
  4. 内存拷贝开销:在CPU和NPU之间来回拷贝图像数据会产生延迟。
    • 优化:使用零拷贝或内存映射技术,让NPU直接访问摄像头驱动填充的内存缓冲区。这需要SDK和驱动层的支持,是提升性能的关键。

使用Claude Code辅助性能分析:你可以将关键的代码段(尤其是循环和计算密集部分)交给Claude Code,让它分析可能的性能问题,或者建议更高效的写法(例如使用NumPy的向量化操作替代Python原生循环)。

5.3 准确率调优与误报过滤

性能达标后,就要看检测效果了。在真实场景中,误报和漏报是主要问题。

  1. 模型调优
    • 数据:如果通用模型在你的场景(如光线暗、视角特殊)下效果不好,就需要收集场景数据做微调(fine-tuning)。哪怕只有几百张标注图片,也能显著提升效果。
    • 参数:调整检测置信度阈值和NMS的IOU阈值。提高置信度阈值可以减少误报(如将树影误检为人),但会增加漏报风险。
  2. 业务逻辑过滤
    • 大小过滤:忽略过大或过小的检测框(可能是误检或距离太远的人)。
    • 区域过滤:只对进入预设检测区域的目标进行跟踪和徘徊判断。
    • 轨迹过滤:对于移动速度过快(比如奔跑)的目标,即使进入区域,也可以降低其徘徊判断的优先级或忽略,因为徘徊行为通常伴随低速移动。
  3. 集成测试:将设备部署到真实环境,进行长时间(如24小时)的测试。记录下所有误报警和漏报警的情况,分析原因,是模型问题、跟踪问题还是区域判断逻辑问题,然后针对性优化。

6. 常见问题排查与实战经验实录

在实际开发中,你会遇到各种各样稀奇古怪的问题。下面是我踩过的一些坑和解决办法。

6.1 模型转换与推理问题

  • 问题:模型转换成功,但在推理时输出全是乱码或NaN。
    • 排查:首先检查输入数据的预处理是否和转换时设置的参数完全一致(均值、标准差、缩放尺寸、通道顺序RGB/BGR)。一个像素值范围的错误(如应该是0-1却输入了0-255)就会导致这种问题。使用SDK提供的示例程序,用同一张图片测试你的模型和官方示例模型,对比输入和输出。
  • 问题:推理速度远低于预期。
    • 排查
      1. 确认模型是否真的运行在NPU上。有些SDK需要显式指定设备为NPU,否则可能回退到CPU运行。
      2. 使用性能分析工具(如SDK自带的perf工具)查看NPU利用率。如果利用率低,可能是输入数据供给不够快(CPU预处理慢),或者是模型本身某些层不适合NPU,导致计算流水线中断。
      3. 尝试将模型输入尺寸减小(如从640降到320),速度会成倍提升,但精度会下降,需要权衡。

6.2 视频流与抓帧问题

  • 问题:从CSI摄像头抓帧出现花屏、卡顿或丢帧。
    • 排查
      1. 检查摄像头驱动是否正常加载,dmesg查看内核日志有无错误。
      2. 确认使用的抓帧API(如OpenCV的VideoCapture、V4L2直接调用)和参数(分辨率、帧率、格式)是否与摄像头支持的模式匹配。使用v4l2-ctl --list-formats-ext命令查看。
      3. 关键技巧:使用内存映射(mmap)方式抓帧,并采用多缓冲区机制,这是保证高帧率、低延迟的常用方法。确保你的抓帧循环足够快,能及时取走缓冲区数据,否则会导致缓冲区溢出和丢帧。
  • 问题:处理RTSP网络流延迟高。
    • 排查:网络流本身就有延迟。可以尝试:
      1. 在OpenCV中设置缓冲区大小cv2.set(cv2.CAP_PROP_BUFFERSIZE, 1),减少内部缓冲。
      2. 使用FFmpegGStreamer库直接解码,可能比OpenCV更高效。
      3. 考虑在靠近摄像头的地方部署流媒体服务器(如RTSP简单服务器),NE503从本地服务器拉流,减少网络波动影响。

6.3 徘徊判断逻辑问题

  • 问题:人在区域边缘轻微移动,导致频繁触发“进入/离开”事件,无法累计足够停留时间。
    • 解决:如前所述,实现迟滞机制。或者,定义两个区域:一个稍大的“预警区”和一个稍小的“核心报警区”。只有进入核心区才开始计时,离开预警区才重置计时。这模拟了人的“深入”行为。
  • 问题:多人同时进入区域,跟踪ID发生跳变,导致同一个人被重复计时或计时中断。
    • 解决:优化跟踪器。引入低成本的外观特征(如主要颜色)辅助匹配。在徘徊判断逻辑上,可以稍微放宽条件:如果一个目标丢失后很快在附近出现一个相似的新目标,可以考虑进行ID关联,延续其计时。

6.4 系统稳定性问题

  • 问题:程序运行一段时间后内存缓慢增长,最终崩溃。
    • 排查:这是典型的内存泄漏。使用valgrindmtrace工具检查C++程序。在Python中,关注循环引用和全局列表/字典的无限增长(如未及时清理历史跟踪记录)。确保每一帧分配的资源(如图像缓冲区)在不用后及时释放。
  • 问题:设备在高温环境下运行不稳定。
    • 解决:NE503虽然功耗低,但长时间满负荷运行也会发热。检查芯片温度(cat /sys/class/thermal/thermal_zone*/temp)。如果温度过高,可以考虑:
      1. 添加散热片或风扇。
      2. 在软件层面实现动态频率调节:当检测到温度过高时,主动降低推理帧率或图像分辨率,以降低NPU负载。

整个项目从构思到落地,是一个不断在硬件限制、算法精度和工程实现之间做权衡的过程。NE503提供了可靠的边缘算力基础,而Claude Code这样的智能辅助工具,则像一位经验丰富的搭档,帮你快速跨越从想法到原型之间的沟壑。但最终,对细节的把握、对问题的排查能力,以及对整个系统架构的理解,才是项目成功的关键。这套徘徊检测系统虽然只是一个起点,但其中涉及的边缘AI开发全流程——环境搭建、模型处理、算法实现、集成调试、性能优化——其方法论可以扩展到更多的智能视觉应用场景中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 3:37:05

腾讯云轻量服务器实战指南:从环境搭建到项目部署

最近很多开发者朋友都在问:有没有便宜又稳定的云服务器推荐?特别是个人项目、学习环境、测试部署这种场景,既不想投入太多成本,又希望配置不要太差,网络还要稳定。如果你正在为这类需求发愁,那么最近腾讯云…

作者头像 李华
网站建设 2026/8/20 3:35:17

构建电商验证信息微交易市场:为AI代理提供可信数据燃料

1. 从“信息迷雾”到“价值付费”:一个电商代理的新命题最近和几个做电商SaaS和智能代理的朋友聊天,大家不约而同地提到了一个痛点:现在的电商环境,信息太“脏”了。这里的“脏”,不是指内容低俗,而是指信息…

作者头像 李华
网站建设 2026/8/20 3:35:11

树莓派物联网泡泡机:从PWM电机控制到Flask Web服务器全栈实践

1. 项目缘起:一个“过度复杂”泡泡机的诞生 事情是这样的,我有个小外甥,每次来家里都吵着要玩泡泡机。市面上那些塑料玩具,要么续航短,要么泡泡液喷得到处都是,要么玩两天就坏了。作为一个有点“技术宅”倾…

作者头像 李华
网站建设 2026/8/20 3:32:19

LLM驱动数据分析系统安全攻防:提示词注入与工具滥用漏洞剖析

1. 当数据智能体成为攻击目标:一个被忽视的战场最近和几个做数据平台和AI应用的朋友聊天,大家不约而同地提到了一个现象:基于大语言模型(LLM)构建的自动化数据分析系统,也就是常说的“Data Agent”或“智能…

作者头像 李华