新闻详情

新闻详情

首页 / 资讯中心 / 详情

Flutter鸿蒙应用崩溃、卡顿、发热?DFX排查实战指南

发布时间:2026/9/15 13:18:59来源:尧图网络
Flutter鸿蒙应用崩溃、卡顿、发热?DFX排查实战指南
这段时间做鸿蒙适配我遇到最多的反馈不是“这个功能不会写”而是“线上跑起来就出事”用户打开页面闪退、列表滑动掉帧、没玩几分钟手机发烫。这三个问题凑一起的时候不少同学第一反应是怀疑Flutter引擎适配不到位第二反应是怀疑鸿蒙系统还不够成熟。但真正动手查过几轮之后会发现绝大多数异常根因都藏在我们自己的代码和工程配置里只不过你手里没有一套顺手的排查方法才显得无从下手。在鸿蒙体系里这套排查方法有一个专门的名字叫DFX全称是Debugging, Fault Diagnosis and eXperience翻译过来就是故障诊断与体验评估。很多人一听DFX就以为是系统工程师或者测试同学才需要掌握的能力实际上Flutter开发者一样要懂。你的App跑在鸿蒙设备上一旦出现崩溃、卡顿、发热系统侧生成的日志、崩溃文件、性能事件全都挂在DFX这套体系里。看不懂这些就等于排查时没有眼睛只能靠猜。这篇文章是DFX系列的开篇目标很直接当你的Flutter鸿蒙应用崩了、卡了、发烫了我会告诉你按什么顺序查、去哪里看日志、日志里的关键字段怎么读、常见根因有哪些。文中的命令和工具都来自真实项目里的日常操作也踩过不少坑适合正在做Flutter鸿蒙适配或者准备上线的团队也适合刚进这个领域、想建立排查体系的开发者。我会尽量按“先分层、再分症状”的方式讲看完之后你手里就有了第一版可以直接照做的排查SOP。1. 先把排查思路理顺DFX到底要查什么1.1 崩溃、卡顿、发热不是三个孤立问题我见过很多同学把崩溃、卡顿、发热当成三个独立问题来处理这是最大的误区。实际上这三者在运行时是一条链路的不同表现一段异常代码先造成资源占用异常资源占用异常导致系统调度出问题最终以用户可感知的现象暴露出来。举一个很典型的链路某个后台逻辑写了个死循环或者某个定时间隔设置得太短一开始CPU占用会持续走高设备开始发热接着主线程的任务抢不到CPU时间片界面开始掉帧卡顿如果卡顿时间过长系统可能判定应用无响应直接杀掉进程用户看到的就是闪退。所以排查的时候最佳策略是倒着看先确认现象再找异常资源最后定位到代码。而不是一上来就问“为什么闪退”然后一头扎进崩溃日志里。下面我会反复强调这个顺序因为它决定了你的排查效率。1.2 先分层再动手三层定位法一个Flutter鸿蒙应用运行时的代码大致可以分成三层业务代码层、Flutter引擎层、鸿蒙系统层。每一层产生的异常日志格式完全不同排查工具也完全不同。业务代码层Dart代码、ArkTS桥接代码异常表现为Dart异常堆栈比如空安全检查、类型转换错误、未捕获的异步异常。Flutter引擎层Flutter引擎C代码、Skia图形栈、三方Native库异常表现为so库崩溃也就是Native Crash日志里能看到崩溃信号、寄存器、加载模块地址。鸿蒙系统层系统资源不足、GPU异常、内存压缩、任务调度这类问题不一定在应用日志里有明显报错需要看系统事件和系统级性能数据。拿到一个线上反馈先别急着开日志问自己三个问题必现还是偶现debug包和release包表现是否有差异崩溃、卡顿、发热是不是同时出现这三个答案基本决定了你要去三层中的哪一层找。层级典型问题关键日志主要工具业务代码层Dart异常、类型错误、空指针Dart堆栈、Flutter日志FlutterError.onError、DevToolsFlutter引擎层so库崩溃、渲染异常、引擎初始化失败cppcrash日志、hilogfaultlog、addr2line鸿蒙系统层资源不足、调度问题、系统事件hisysevent、系统日志hdc、系统性能工具注意很多偶现崩溃查不出来不是因为工具不够而是因为最初就少问了一个问题——“Flutter SDK版本和鸿蒙SDK版本分别是什么”。两边版本对不上后面所有日志分析都可能是无用功。1.3 动手之前先把现场信息备齐排查性能问题和排查崩溃有一个共同的铁律没有稳定的复现路径后面所有环节都是在碰运气。所以接到反馈之后先准备好四样东西。第一全量调试日志开关。应用内的日志级别调到verboseFlutter引擎日志打开鸿蒙侧hilog级别调到info以下。很多问题只在verbose日志里才会露出蛛丝马迹默认级别容易直接过滤掉关键行。第二版本信息。设备系统版本、应用版本、Flutter SDK版本、OpenHarmony或HarmonyOS SDK版本、目标架构。架构信息尤其容易被忽略后面讲崩溃案例时你就知道模拟器和真机、arm64和x86_64之间的差异能直接造成闪退。第三复现步骤记录。让反馈者写下“做了什么操作之后出现”能录屏更好。哪怕只有一句话描述也比“偶尔崩溃”四个字有价值得多。第四抓日志的命令要提前准备好。鸿蒙设备上最常用的命令不外乎一个hdc。抓崩溃现场时我会同时开两个终端一个跑日志过滤一个准备拉取faultlog。很多新手在崩溃发生后才想起来开日志结果现场全丢了。# 抓取带flutter关键字的完整日志避免终端刷新带来的丢行 hdc shell hilog flutter_hilog.log # 拉取系统故障日志目录崩溃文件都在这里 hdc file recv /data/log/faultlog/faultlogger ./faultlog准备好这些才算是真正开始了DFX排查。2. 崩溃类问题从闪退到Native Crash的定位路径2.1 先分清崩溃发生在哪一层用户说“闪退”这个描述其实很模糊。你要做的是把“闪退”拆成两种一种直接退回桌面一种是无响应之后被系统杀掉。前者大概率是Dart异常或者Native崩溃后者大概率是应用无响应超时定位方向完全不同。我习惯用的判断方法很简单找现场的崩溃日志。鸿蒙系统里崩溃文件统一由faultlogger管理路径通常在/data/log/faultlog/faultlogger/下文件名会带崩溃类型比如cppcrash开头的是Native崩溃jscrash开头的是JS/ArkTS层崩溃。Flutter侧的Dart异常一般不会生成系统崩溃文件而是走Flutter本身的日志通道。另一个现场维度是debug包和release包的表现差异。如果只有debug闪退先查Dart层的assert和异常如果release也闪退重点怀疑Native符号、混淆、代码优化导致的问题。两个包表现不一致时优先信release因为线上用户的版本才是真实场景。2.2 Dart层崩溃看日志中的Exception和堆栈Dart层的崩溃日志关键信息就是两样异常类型和调用堆栈。常见的异常类型翻来覆去就那么几个空安全检查失败Null check operator used on a null value、类型不匹配type x is not a subtype of type y、未捕获的异步异常。看到这些不要慌问题在于你能否拿到完整的堆栈。在Flutter工程里建议在一开始就加上全局兜底void main() { runZonedGuarded(() { runApp(const MyApp()); }, (error, stackTrace) { // 这里统一上报到自己的日志平台或者打印完整堆栈 debugPrint(uncaught error: $error); debugPrint(stackTrace: $stackTrace); }); }这层兜底不算复杂但线上排查时能救命。尤其是release包默认日志输出可能被压缩如果没有提前接兜底Dart异常经常只有一个孤零零的报错没有堆栈。鸿蒙侧抓Flutter的Dart日志最直接的方式是在hilog里按关键字过滤。Flutter引擎打印的日志会带flutter前缀在hdc shell里执行hilog命令时加上grep就行。hdc shell hilog | grep -E flutter|Dart看到堆栈之后还原触发路径的核心是看调用链而不是看报错本身。比如空安全检查失败光看报错不知道是哪个对象为空但堆栈会清晰告诉你是在某个build方法、某个Map取值的地方。这种问题90%出在数据解析阶段尤其是接口返回的字段类型和预期不一致时。2.3 Native层崩溃so符号化与faultlog的配合使用Native Crash比Dart异常复杂一个数量级因为日志里看到的不是函数名而是一堆地址。崩溃文件通常在faultlogger目录下文件名为cppcrash-日期-时间-进程号里面包含崩溃信号、崩溃线程堆栈、加载的模块以及模块基地址。拿到日志之后关键动作是符号化。鸿蒙SDK的工具链里一般带有llvm-addr2line用它可以结合崩溃日志中的模块名和偏移地址还原出对应的函数名和行号。# 将设备上的崩溃文件拉下来 hdc file recv /data/log/faultlog/faultlogger/cppcrash-xxx ./cppcrash-xxx # 用addr2line结合崩溃模块的so文件和日志中的偏移地址做符号化 llvm-addr2line -e libflutter.so 0x12345678这里有一个我反复踩过的坑release包如果没有保留带符号信息的so文件那么崩溃日志里的地址就是一堆无意义的数字符号化等于白做。所以在打包鸿蒙应用时一定要把flutter引擎和三方Native库的符号文件归档保存最好和版本号、构建ID、源码commit一起存不然后期根本对不上。Native崩溃里还会出现一些典型的系统信号理解它们能帮你快速缩小范围信号常见含义优先排查方向SIGSEGV野指针、越界访问指针、List越界、Native层内存错误SIGABRT主动终止、断言失败C层断言、引擎内部检测到异常状态SIGKILL被系统强杀内存超限、低内存回收、系统级裁决SIGILL非法指令代码与架构不匹配检查ABI2.4 典型案例引擎so加载失败、桥接层崩溃这里分享两个实际项目里遇到的崩溃场景帮你把上面对话落到地面上。第一个是so加载失败导致的启动闪退。现象是打开应用后大概一秒钟直接退回桌面faultlog里显示cppcrash崩溃在libflutter.so但崩溃地址符号化之后对应的是库加载逻辑。最终定位到问题根源是模拟器上用了arm64的so包设备本身是x86_64架构CPU一跑非法指令就崩了。排查成本很低但如果没有检查架构匹配可能要在日志里转很久。解决方案是在鸿蒙工程的hap包里按目标架构打入对应的so打包前用file命令看一下so的架构信息。别默认“反正都是手机的arm架构”模拟器场景会坑你一次。第二个是MethodChannel桥接层崩溃。Flutter调用鸿蒙原生侧的能力由于原生侧抛出的异常没有被正确捕获或者返回的数据类型和Dart侧预期不一致导致平台通道回调时崩溃。这种崩溃最迷惑的地方是它可能表现为Native崩溃但根因其实是桥接代码的数据协议没对齐。我现在的做法是所有MethodChannel调用都用统一的封装Dart侧和ArkTS侧都加异常兜底并且对参数做严格类型检查。宁可让一次调用失败返回错误码也不要让它直接干崩进程。3. 卡顿类问题掉帧、白屏、交互延迟怎么查3.1 先分清楚是哪种“卡”“卡”这个字是性能反馈里信息量最低的但它往往被当成信息量足够的描述来用。实际项目中卡至少可以分成三类列表滑动掉帧、点击响应延迟、白屏或画面冻结。三类问题的排查方向完全不同。列表滑动掉帧重点看渲染链路build阶段、layout阶段、raster阶段哪一段耗时超标。点击响应延迟重点看主事件循环主线程是否有耗时任务、是否被异步任务挤占。白屏或画面冻结重点看是否有同步阻塞、死锁、或者引擎卡死。建议在接到反馈时先用一张小表做归类表现主要怀疑层首选工具滑动掉帧Flutter引擎渲染链路DevTools Frame数据点击延迟Dart主Isolate任务调度DevTools Timeline白屏冻结同步阻塞、引擎状态异常hilog faultlog3.2 Flutter侧排查DevTools的Frame数据怎么看Flutter应用内出现的卡顿最直接的观测入口是DevTools的Performance页。在Debug模式下运行应用打开DevTools的Performance点Record开始录制然后在App里复现滑动或者点击操作再停止录制。录制完成后你会看到一帧一帧的耗时数据重点是UI线程和Raster线程两个指标。通常习惯这样判断UI线程耗时高问题出在build、layout、文本排版Raster线程耗时高问题出在图片解码、复杂路径渲染、shader编译。我见过一个很有意思的案例一个商品列表页每张卡片有圆角裁剪和阴影滑动时Raster线程耗时持续飙高。加日志查了半天最后发现是图片解码的cacheWidth没有设置每张图都是原始分辨率全量解码。这种问题在崩溃日志里完全看不出来只有Frame数据才能精准暴露。Dart侧还有一个容易忽视的卡顿来源是内存抖动。如果对象创建频繁、GC次数多主Isolate会被周期性的GC停顿打断。打开DevTools的Memory页录制一段操作观察堆内存曲线是不是呈锯齿状持续攀升。如果是优先检查循环里的临时对象、频繁的字符串拼接、不必要的SetState。3.3 鸿蒙侧联查系统事件和进程负载Flutter侧的DevTools能覆盖应用内部的渲染链路但卡顿有时不完全是应用自己的问题尤其是性能较差的设备上系统负载、后台任务、发热降频都会造成掉帧。这时候需要把视角切到系统侧。鸿蒙系统的卡顿和无响应事件会通过hisysevent上报在hdc shell里可以用hisysevent相关查询命令按事件名过滤。不同SDK版本命令略有差异但思路一致找jank、appfreeze这类关键字看事件发生的时间点再对应到应用日志。另一个非常实用的系统级工具是top命令。卡顿发生时切换到终端执行# 列出当前CPU占用最高的进程和线程 hdc shell top -H -n 1卡顿发生时我会同时看两个东西应用进程的CPU总占用、应用内各线程的CPU分布。如果UI线程并不高但总CPU很高那就说明有其他线程在抢资源如果总CPU很低但依然掉帧问题大概率在GPU渲染或者调度延迟需要再深入一层。3.4 从卡顿到发烫别忽略GC和Isolate卡顿和发热经常一起出现其中一个容易被忽视的中间变量就是GC。Dart的GC虽然是增量式的但在对象分配压力很大时GC停顿会明显拉高卡顿频率。更麻烦的是GC造成的CPU开销本身也会推高设备温度温度一高触发降频下一轮卡顿就更严重形成一个恶性循环。排查这种问题一个是看对象分配速率另一个是看CPU占用是不是存在周期性“毛刺”。我在一个项目里遇到过某个定时器每隔200毫秒创建一次完整的数据快照既不做diff也不做节流导致后台线程持续高占用界面操作明显卡顿手机背面也发烫。后来在DevTools Memory里看到曲线像锯齿一样一查代码才发现是这个定时器的问题。修复方式也算不上复杂把高频轮询改成事件驱动数据变化时才触发处理无法避免的周期性任务放到独立Isolate里跑避免抢占UI线程的CPU时间。说到Isolate后面发热部分我还会再重点展开一个反模式。4. 发热与耗电最该关注的不是“烫”而是功耗4.1 先拆解发热的五个主要来源手机会发热本质上是功耗变高了。功耗高通常逃不出五个方向CPU计算、GPU渲染、网络收发、定位与传感器、屏幕亮度。如果你拿到一个发热反馈第一件事不是看温度传感器而是先判断功耗主要集中在哪一块。方向典型症状排查手段CPU计算不操作时进程CPU占用持续高hdc shell topGPU渲染静态页面也高功耗、皮肤发热渲染帧率、GPU负载网络收发弱网时发热加重抓包看请求频率、重试策略定位/传感器后台高德定位、传感器常驻系统定位开关、传感器使用记录屏幕亮度高亮屏使用时热排除法手动调亮度判断方向最笨也最有效的方法是“排除法”把某个功能关闭复现一段时间看温度或者CPU有没有明显下降。有时候不用特别高级的工具多跑几轮对比就能锁定方向。4.2 用hdc与系统统计锁定嫌疑线程发热问题的排查我建议直接看CPU占用。进入hdc shell后执行top按CPU排序找到你的应用进程然后进入线程维度看哪条线程最活跃。Flutter引擎的线程命名有一定规律看到io.flutter.ui、io.flutter.raster、io.flutter.1.io这些线程名基本可以判断是引擎侧在忙。重点要看的是Dart侧线程或者业务侧起的子线程它们忙起来往往对应着你的业务代码逻辑有问题。# 进入设备shell并查看进程内的线程CPU占用 hdc shell top -H -p 进程PID进程PID可以从ps命令里查到。这个命令行能帮你快速区分是“引擎在忙”还是“业务代码在忙”。如果希望更直观可以直接用系统设置里的电池统计看应用耗电排行。耗电排行会按前台、后台分别统计一个常见陷阱是前台看着正常但切到后台后应用仍然高耗电这种问题大概率是后台任务没正确暂停。4.3 Flutter侧最常见的几个功耗坑结合我自己的项目经验Flutter鸿蒙应用里发热问题高频触发点主要集中在四处。第一是连续动画没停。页面销毁时AnimationController还在跑或者页面不可见时Ticker仍然驱动着渲染。这类问题的排查在代码里就能完成检查所有AnimationController的dispose路径页面切后台时调用stop。用TickerProviderStateMixin时尤其要注意是否有多个Ticker没有正确释放。第二是帧率设置不合理。部分设备支持120Hz高刷Flutter默认会跟随系统刷新率。如果你的页面只是展示静态内容并不需要跑满刷新率可以主动限制帧率。这个优化对发热的改善非常明显。第三是后台Isolate常驻执行轮询。这是Flutter里一个很典型的反模式为了“性能”把任务丢到后台Isolate但Isolate里挂了个Timer轮询或者保持一个常驻的Stream监听导致后台线程一直在空转。CPU跑着用户却什么都没看到。第四是网络请求的失败重试策略。弱网环境下如果请求失败就立刻重试不设退避请求会像风暴一样打出去既耗电又发热。很多崩溃和卡顿的间接触发器都是它。用dio做网络请求时建议统一设置connectTimeout和receiveTimeout给重试加指数退避。顺带一个项目经验排查网络请求发热问题时先抓包看实际发出的请求频率十次里有八次会发现问题不是响应太慢而是重复发得太快。4.4 发热排查的实操节奏如果发热问题已经稳定复现我会按下面的节奏走一遍第一步复现并记录基线。用同一台设备、同样的系统版本静置10分钟记录初始温度然后开始在App里做固定路径操作10分钟期间每两分钟记录一次温度和CPU占用。如果没有专业温枪就用系统API或者开发者选项里的CPU显示做参考。第二步抓取高占比线程。操作结束后用hdc shell top查进程内线程CPU占用排序锁定Top线程记录线程名和占用百分比。第三步做排除法定位。关闭某个功能模块重复同样的操作路径再抓一次数据。对比两次曲线的差异基本就能锁定发热大头在哪个功能上。我遇到过一个案例最后定位到问题出在一个图片预加载逻辑上一进首页就把20张高清图全部解码到内存CPU和GPU同时飙高。关掉这个功能之后温度直接降了3度。第四步做收敛与验证。降低任务频率、合并请求、延迟非关键任务、限制不必要的动画帧率。改完一顿操作再重新测一轮确认CPU曲线和温度曲线同时下降才算完事。5. 常见问题速查与经验清单5.1 一个速查表先解决临时救火把上文的排查路径归纳成一张速查表适合遇到问题先对号入座症状大概率方向优先查看的日志/工具启动闪退so加载失败、平台桥接异常faultlog cppcrash、hilog滑动掉帧图片解码、widget重建、布局复杂DevTools Frame数据点击延迟主Isolate任务积压DevTools Timeline发热伴随CPU高轮询、动画、后台Isolatehdc top、电池统计偶现崩溃版本不一致、低内存回收faultlog、dmesg这张表只是起点。如果问题对应不上别硬套回到第一节说的“先分层、再分症状”重新过一次流程。5.2 几条实操经验第一日志采集一定要脚本化。我最初是手动敲命令抓日志后来发现崩溃和性能问题往往需要多轮复现才能拿到完整现场手动操作效率太低。现在我的做法是把设备信息收集、hilog抓取、faultlog拉取写成一个shell脚本每次复现前跑一遍自动把全套现场文件存到带时间戳的目录。这样既不会漏信息也方便后续对比。#!/bin/bash # 简易版的DFX现场采集脚本实际使用时按项目路径调整 timestamp$(date %Y%m%d_%H%M%S) mkdir -p ./dfx_$timestamp hdc shell hilog ./dfx_$timestamp/hilog.log HILOG_PID$! # 让测试人员开始复现操作操作完成后手动停止 kill $HILOG_PID hdc file recv /data/log/faultlog/faultlogger ./dfx_$timestamp/faultlog 2/dev/null第二三方SDK的版本和构建ID一定要锁定。尤其是Flutter引擎这类更新频繁的依赖今天拉到的引擎和上周拉到的可能就是两个不同的commit。崩溃地址符号化时如果so文件和源码版本对不上行号怎么都对不上白白浪费时间。我现在每发一个包都会把引擎版本、SDK版本、源码commit号、符号文件放到同一个目录归档。第三性能问题要相信数据不要凭感觉。很多同学习惯先“感觉”是某个页面有问题然后直接改那一页的代码。但如果先在DevTools里确认卡顿是发生在raster线程还是UI线程改的方向会精准很多。我见过有人花了两天优化build方法结果卡顿的根源是图片解码方向错了再努力也白搭。5.3 后面的系列内容安排这个系列我会继续写下去重点方向目前规划了几个崩溃日志的完整符号化流程、列表场景的卡顿专项优化、图片与字体的渲染性能分析、以及鸿蒙侧DFX工具链的更深层用法。每个方向都能单独写一篇实操记录。如果你在Flutter鸿蒙应用上遇到过特别头疼的崩溃、卡顿或者发热问题可以在评论区留言我会挑典型的场景做一期专题排查实录。我的体会是这类问题与其看一百篇理论文章不如跟着一个真实案例完整走一遍排查流程收获大。下一篇会先从崩溃日志的符号化聊起这是Native Crash定位里最基础也最容易踩坑的一环。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

mold 项目中的 oneTBB 可扩展内存分配器(tbbmalloc):scalable_allocator、cache_aligned_allocator 与 malloc 自动替换实践 2026/9/15 15:31:23

mold 项目中的 oneTBB 可扩展内存分配器(tbbmalloc):scalable_allocator、cache_aligned_allocator 与 malloc 自动替换实践

mold 项目中的 oneTBB 可扩展内存分配器(tbbmalloc):scalable_allocator、cache_aligned_allocator 与 malloc 自动替换实践 【免费下载链接】mold mold: A Modern Linker 🦠 项目地址: https://gitcode.com/GitHub_Trending/mo…

阅读更多 →
多变量PID控制:从耦合分析到MATLAB/Simulink仿真实践 2026/9/15 15:31:22

多变量PID控制:从耦合分析到MATLAB/Simulink仿真实践

简介:这是一份面向自动控制与过程控制学习者的MATLAB多变量PID控制资源包,围绕多输入多输出(MIMO)系统的建模、解耦、控制器设计与仿真展开,尤其针对非线性、耦合较强的被控对象,提供可运行的代码与Simulin…

阅读更多 →
LIS2MDL磁力计轮询读取:状态寄存器与I2C数据采集要点 2026/9/15 15:31:22

LIS2MDL磁力计轮询读取:状态寄存器与I2C数据采集要点

简介:磁力计LIS2MDL轮询获取数据开发资源包,适合正在学习STM32与MEMS传感器的嵌入式开发者。资源对应“磁力计LIS2MDL开发(4)”系列,聚焦通过轮询方式读取磁力计数据,同时包含MotionGC中间件库(X-CUBE-MEMS1组件&#…

阅读更多 →
DiceDB BITFIELD_RO 命令深度解析:只读位域读取的实现原理与实战指南 2026/9/15 15:31:22

DiceDB BITFIELD_RO 命令深度解析:只读位域读取的实现原理与实战指南

DiceDB BITFIELD_RO 命令深度解析:只读位域读取的实现原理与实战指南 【免费下载链接】dicedb Open-source, low-latency key/value engine built on Valkey with query subscriptions and hierarchical storage tiers. 项目地址: https://gitcode.com/GitHub_Tre…

阅读更多 →
深入解析hi6421-pmic-core.c:驱动初始化、寄存器与中断管理实战 2026/9/15 15:31:22

深入解析hi6421-pmic-core.c:驱动初始化、寄存器与中断管理实战

简介:Hi6421电源管理集成电路核心驱动源文件,面向嵌入式驱动开发工程师与电源管理学习者,用于理解PMIC驱动初始化、总线通信、功耗控制及保护机制的具体实现。压缩包内仅含1个C语言文件hi6421-pmic-core.c,体积约1KB,虽…

阅读更多 →
10分钟让AI真正干活:LangChain智能体从入门到跑通的完整指南 2026/9/15 15:28:22

10分钟让AI真正干活:LangChain智能体从入门到跑通的完整指南

10分钟让AI真正干活:LangChain智能体从入门到跑通的完整指南 【免费下载链接】langchain The agent engineering platform. 项目地址: https://gitcode.com/GitHub_Trending/la/langchain 周五下午五点,领导丢来一句话:"把用户投…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞