当前位置: 首页 > news >正文

如何构建有效的AI Agents:从复杂到简约——深度解读Claude实践总结《Building effective agents》(上)

在人工智能技术日新月异的今天,大语言模型(LLM)已经成为技术创新的热点。

然而,在追逐技术前沿的热潮中,我们是否忽视了工程设计的本质?

作为全球人工智能领域的领军企业之一,Anthropic以其在AI安全和伦理方面的深入研究而闻名。

该公司开发的Claude是目前最先进的大语言模型之一,凭借其强大的理解能力、逻辑推理能力和工具使用能力,在AI助手领域占据重要地位。
在这里插入图片描述

在本文解读的这份研究中,Anthropic团队基于其在开发Claude及帮助众多企业构建AI代理系统的丰富经验,为我们揭示了高效AI代理系统设计的关键原则。

这些见解不仅来自理论研究,更是源于实践检验,具有极强的参考价值,让我们重新思考LLM AI Agent 系统设计的本质。

一、返璞归真:简约设计的崛起

在当前AI领域,各类框架和工具如雨后春笋般涌现,开发者们往往会陷入一种迷思:越复杂的框架是否意味着越强大的能力?

Anthropic的研究给出了一个出人意料的答案:

恰恰相反。通过深入研究数十个行业领域的LLM代理实践案例,研究团队发现,那些最成功的实现往往采用简单、可组合的模式,而不是复杂的框架体系。

文章开篇说道:

"在过去一年里,我们与数十个团队合作,帮助他们在各个行业构建大语言模型(LLM)代理系统。

我们发现一个一致的现象:最成功的实施案例并非采用复杂的框架或专门的库,而是使用简单、可组合的模式进行构建。

在这篇文章中,我们将分享从与客户合作以及自身构建代理系统过程中获得的经验,并为开发者提供构建有效代理系统的实用建议。"

这个发现具有几个层面的重要意义:

首先, 它挑战了行业中普遍存在的一种认知——即构建复杂的AI系统需要依赖复杂的工具和框架。

这种"以复杂应对复杂"的思维定式在实践中被证明并非最佳选择。

其次 ,“simple, composable patterns”(简单、可组合的模式)这个短语透露出一种模块化、积木式的系统设计思维。

这种设计理念强调的是基础构建块的简单性和组合的灵活性,而不是整体框架的复杂性。

再次 ,这段话也体现了Anthropic的研究方法论——将实践经验转化为可操作的开发建议。

"practical advice"这个承诺表明,这篇文章不是纯理论的学术探讨,而是基于真实案例的实践指南。

最后 ,这个开篇也暗示了一个重要的技术发展趋势:

在AI代理系统设计领域,我们可能正在经历一个从"框架驱动"向"模式驱动"的转变。

这种转变可能会对整个行业的技术栈选择和系统架构设计产生深远影响。

这段开篇简短但信息量丰富,它不仅为整篇文章定下了基调,也为我们理解当前AI代理系统设计的最佳实践提供了一个重要的视角。

正如爱因斯坦所说:“不应否认任何理论的终极目标都是尽可能让基本元素变得更加简单且更少,但也不能放弃对任何一个简单数据的合理阐释。” 这似乎正是Anthropic在AI代理系统设计中发现的真理。

这个发现对于当前正在规划或开发AI代理系统的团队具有重要的指导意义:

也许我们需要放下对复杂框架的依赖,回归到更简单、更灵活的设计模式上来。

这让我想起了 Unix 设计哲学中著名的KISS原则(Keep It Simple, Stupid) ,强调在系统设计和操作过程中应该尽量避免不必要的复杂性 ,并以简单性为核心,这样能减少出错风险,提高系统的稳定性和可用性。

在软件工程领域,简单性往往是可靠性和可维护性的基石。而在LLM代理系统的设计中,这个原则似乎又一次得到了新的印证。

二、架构思维的革新:解构AI Agents系统的双重范式

在探讨具体实现之前,研究团队提出了一个富有洞见的架构区分:AI 工作流 (AI Workflows) 和智能体 (AI Agents)

这不仅仅是技术层面的分类,更是反映了两种截然不同的系统设计理念。

什么是 AI Agents
“”Agents“”可以有多种定义方式。一些客户将 AI Agents 定义为完全自主的系统,这类系统能够在较长时间内独立运行,使用各种工具来完成复杂任务。
另一些客户则用这个术语来描述更具规范性的实现,即遵循预定义工作流程的系统。
在Anthropic,我们将所有这些变体都归类为Agents 系统,但在工作流智能体之间划分了一个重要的架构区别:

  • 工作流是通过预定义的代码路径来编排LLM和工具的系统。
  • 智能体则是由LLM动态指导自身流程和工具使用的系统,能够自主控制任务完成的方式。

这段文字实际上揭示了AI代理系统领域的一个重要概念框架。

让我们从几个关键层面来解读:

2.1 概念的多元性

文章首先承认了"Agents "概念的多样性,这反映了当前行业对AI Agents 的理解仍处于演进阶段。

有趣的是,这种多样性主要体现在两个维度:自主程度(完全自主 vs 预定义流程)和运行时长(长期运行 vs 特定任务)

2.2 架构的二分法

Anthropic提出的工作流与智能体的区分极具洞见。

这种区分不是基于功能或复杂度,而是基于系统的决策自主性

  • AI Workflows 工作流就像是一条预先规划好的铁轨,LLM在其上运行
  • AI Agents 智能体则更像是一个能够自主导航的系统,可以根据情况动态选择路径

2.3 控制权的分配

这个区分实际上反映了一个深层的设计哲学:如何在系统中分配控制权。

AI Workflows 工作流将控制权交给预定义的流程,而AI Agent 智能体则将控制权赋予LLM本身。

这种差异会导致两种完全不同的系统行为模式。

2.4 实践的指向性

通过提到附录中的实际应用案例,文章暗示这种理论框架不是纯粹的学术分类,而是源于实践并服务于实践的洞察。

这种理论与实践的结合使得这个框架具有更强的指导意义。
在这里插入图片描述

2.5 设计的启示

这种分类为系统设计提供了清晰的指引:

  • 对于流程明确、需要高度可控的场景,AI Workflows 工作流模式更合适
  • 对于开放性问题、需要灵活应对的场景,AI Agents 智能体模式可能更有优势

这个概念框架不仅帮助我们理解不同类型的AI代理系统,更重要的是为选择合适的系统架构提供了理论基础。

它提醒我们,在设计AI系统时,不应简单地追求自主性的最大化,而是要根据具体应用场景选择合适的控制模式。

AI Workflows 工作流 就像一个精心编排的交响乐团,每个乐手(组件)都有其预定的谱子(代码路径)。

这种方式特别适合那些规则明确、流程固定的场景。

想象一个企业的文档处理系统,从收件、分类、处理到归档,每个环节都有其明确的规则和步骤。
在这里插入图片描述

AI Workflows 工作流系统在这种场景下能够提供稳定可靠的表现。

相比之下,AI Agents 智能体更像是一个富有创造力的即兴演奏家。

它能够根据当前情境动态决策,选择最适合的工具和方法来完成任务。

这种灵活性使得代理系统特别适合处理开放性问题和需要创造性思维的场景。

例如,在软件开发中,AI Agents 智能体可以根据具体的bug描述,动态决定需要修改哪些文件,以及如何修改。
在这里插入图片描述

三、权衡之道:AI Agents 系统的取舍艺术

何时(以及何时不)使用Agents

在构建LLM应用时,我们建议寻找最简单可行的解决方案,只在必要时才增加复杂性。
这可能意味着完全不需要构建Agent系统。
Agent系统通常用更好的任务表现来换取延迟和成本的增加,你需要考虑这种权衡是否值得。

当确实需要更复杂的系统时,工作流能为明确定义的任务提供可预测性和一致性,
而当需要大规模的灵活性和模型驱动的决策时,Agents则是更好的选择。
然而,对于许多应用来说,优化单个LLM调用,配合检索和上下文示例通常就足够了。

3.1 简约至上:重新思考Agent系统的必要性

这段文字首先提出了一个极具洞见的观点:在追求技术方案时,最简单的解决方案往往是最好的。

这不仅是一种技术层面的建议,更是一种工程设计哲学。

在当前 AI 大模型技术和GPU 算力集群快速向着更大规模和更加复杂的方向发展的背景下,这种返璞归真的思维显得尤为珍贵。
在这里插入图片描述

3.2 性能与成本的平衡

文章揭示了Agents 系统中一个关键的权衡:任务表现与系统开销之间的此消彼长关系。

这种权衡涉及三个关键维度:

  • 延迟(系统响应时间)
  • 成本(资源消耗)
  • 任务表现(输出质量)

3.3 场景驱动的技术选择

文章提供了清晰的技术选择指南:

  • 对于明确定义的任务,AI Workflows 工作流是更好的选择,因为它能提供可预测性和一致性
  • 需要灵活性和智能决策时,AI Agents系统的优势才真正显现
  • 大多数简单应用场景,优化单个LLM调用就已足够

3.4 最小可行方案的智慧

文章的核心在于提倡一种渐进式的系统构建方法:

  1. 从最简单的解决方案开始
  2. 通过实际需求驱动复杂度的增加
  3. 在每个阶段评估复杂性带来的收益是否值得

这种考虑权衡的思维方法提醒我们:

技术方案的选择不应该被炫技或跟风所驱动,而应该立足于实际需求和具体场景。

在AI系统设计中,找到正确的平衡点往往比盲目追求复杂性更重要。

这个发现对于当前正在规划或开发AI系统的团队具有重要的指导意义。

这段文字本质上是在讨论工程设计中的一个永恒主题:

如何在简单性和功能性之间找到最佳平衡点。

它提醒我们,在追求技术创新的同时,不要忘记"够用就好"的工程智慧。

四、AI Workflows工作流实践:在复杂与简约之间寻找平衡

何时以及如何使用AI Workflows工作流

目前已有许多AI Workflows工作流可以让Agent系统的实现变得更简单。比如

  • LangChain的LangGraph、
  • 亚马逊Bedrock的AI Agent工作流、
  • 用于拖放式GUI的LLM工作流构建器Rivet,
  • 以及另一个用于构建和测试复杂工作流的GUI工具Vellum。

这些工作流通过简化标准的底层任务(如调用LLM、定义和解析工具、链接调用等),让开发者能够轻松起步。
然而,它们往往会创建额外的抽象层,这可能会模糊底层的提示和响应,增加调试难度。
在一些本可以用简单设置解决的场景中,它们也可能诱使开发者增加不必要的复杂性。

我们建议开发者从直接使用LLM API开始: 许多模式只需要几行代码就能实现。
如果你确实要使用工作流,请务必理解底层代码。
对底层机制的错误假设常常是开发者最容易犯的错误。

在这里插入图片描述

4.1 回归本源:重新思考技术选择

在这个工具和平台层出不穷的时代,我们常常会迷失在众多选择中无法自拔。有句老话怎么说来着:“选择太多,所以迷惑。”

Anthropic的这篇研究为我们带来了一个清醒的视角:

技术的价值不在于其复杂程度,而在于解决问题的效果。

现代AI Workflows 确实能带来便利,让开发过程变得更加流畅,但这种便利背后潜藏着值得深思的问题。

4.2 简约之美:追寻工程的本质

当我们谈论工作流的选择时,往往容易被表面的便利性所吸引。

然而,正如研究所指出的,过度依赖工作流可能会带来意想不到的复杂性。

这就像一个魔术师的工具箱,看似能解决所有问题,但实际上可能让简单的问题变得更加复杂。

最朴素的解决方案,反而可能是最优雅的答案。

4.3 求本溯源:深入 AI 系统的底层逻辑

这里让我们关注原文中的一段深刻洞察:

“然而,它们往往会创建额外的抽象层,这可能会模糊底层的提示和响应,增加调试难度。”

这段话道出了现代 AI 开发中的一个核心难题:

AI Workflows 工作流虽然提供了便捷的开发体验,却可能在便利的表象下掩盖了系统的本质。

读到这句话时,我看着桌上的iPhone,突然让人想起已故的苹果公司创始人乔布斯的产品设计理念:

把简单留给用户,把复杂留给自己。

iPhone看似简约优美的操作界面背后,是iOS系统极其复杂的设计逻辑。
在这里插入图片描述

但关键在于,苹果的工程师们始终对这些系统底层的复杂性保持着清晰的认知和掌控。

反观AI系统开发,当我们过度依赖 AI Workflows 工作流时,就像是在自己与系统之间竖起了一道磨砂玻璃——虽然能看到轮廓,却难以捕捉细节的真实样貌。

这种情况恰恰违背了乔布斯的设计哲学:我们不是主动拥抱并掌控复杂性,而是被工作流刻意营造的"简单假象"所蒙蔽。

在AI技术迭代加速的今天,这种对根本原理的探究显得尤为珍贵。

正如中国古人在《礼记‧大学》中所言:“致知在格物”,真正的技术掌握不在于熟练使用工具,而在于深入理解其运作原理。

直接使用LLM API这种看似"原始"的方式,实际上是一种掌控复杂性的明智选择。

它能帮助开发者建立对系统的透彻理解,在遇到问题时洞察根源,找到最优解决方案。

如果你确实要使用工作流,请务必理解底层代码。
对底层机制的错误假设常常是开发者最容易犯的错误。

这种追本溯源的开发方式,体现的是一种真正的工程智慧。

在人工智能这个日新月异的领域,只有真正理解并掌控了复杂性,我们才能为用户创造出简单易用且可靠的系统。

这不仅是一种技术选择,更是一种追求卓越的专业态度。

正如iPhone手机系列产品的成功一样,真正的技术创新,在于将复杂的技术转化为简约优美的用户体验,而不是简单地逃避复杂性。

它提醒我们,在技术日新月异的今天,一些永恒的系统工程原则仍然闪耀着智慧的光芒。

简单性、可控性、深入理解,这些看似古老的价值观,在AI时代反而显得更加重要。

在快速发展的AI领域,这种返璞归真的思维方式格外珍贵。

它告诉我们,真正的创新不在于再产品上不断堆砌复杂的功能,而在于找到问题的本质并给出优雅的解决方案。

正如我们这个宇宙的数学、物理规律一样,最深刻的真理往往有着最简单的表达方式。

让我们用乔布斯这段经典的话作为上篇的结尾:
在这里插入图片描述

"简约是最高层次的精致。要让事物变得简单需要付出大量努力,这意味着你必须真正理解问题的本质,并找到优雅的解决方案。
简约并不仅仅是极简主义,也不是简单地去除杂乱。相反,它需要你深入钻研,探索事物的复杂性。
要达到真正的简约,你必须深入到问题的本质。你必须深刻理解一个产品的精髓,才能判断出哪些部分是非必需的,并将它们去除。"
—— 史蒂夫·乔布斯

今天先解读到这里,敬请期待下篇解读。

原文链接:https://www.anthropic.com/research/building-effective-agents

相关文章:

如何构建有效的AI Agents:从复杂到简约——深度解读Claude实践总结《Building effective agents》(上)

在人工智能技术日新月异的今天,大语言模型(LLM)已经成为技术创新的热点。 然而,在追逐技术前沿的热潮中,我们是否忽视了工程设计的本质? 作为全球人工智能领域的领军企业之一,Anthropic以其在AI安全和伦理方面的深入…...

git status 耗时

某个git库每次status一下就是半小时起步,gc后还是没有效果,后来排查记录发现某笔记录提交几百G的冗余文件,虽然revert了,但是还是存在库中,遂如下清理: # 查找大文件 git verify-pack -v .git/objects/pac…...

C++进阶重点知识(一)|智能指针|右值|lambda|STL|正则表达式

目录 1智能指针1.shared_ptr1.1 shared_ptr的基本用法使用shared_ptr要注意的问题运用 2.unique_ptr独占的智能指针示例:管理动态内存 3.weak_ptr弱引用的智能指针weak_ptr的基本用法lock 的作用:weak_ptr返回this指针weak_ptr解决循环引用问题weak_ptr使…...

OSCP打靶大冒险之Solidstate:多端口获取信息,shell逃逸,计划任务提权

声明! 学习资源来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

八股(One Day one)

最近老是看到一些面试的视频,对于视频内部面试所提到的八股文,感觉是知道是什么,但是要说的话,却又不知道该怎么说(要不咋称之为八股文呢),所以就想到写一篇八股文总结的博客,以便进…...

如何快速又安全的实现端口转发【Windows MAC linux通用】

背景 有很多程序是在虚拟机上运行的,返回的url 又是127.0.0.1。在个人电脑上调试需要解决这个问题。端口转发是一个不错的方法 可能的解决办法: 1.修改程序,返回虚拟机的ip (要改代码,换虚拟机还要再改代码&#xf…...

LongLLMLingua: 长上下文场景的智能提示压缩框架

LongLLMLingua: 长上下文场景的智能提示压缩框架 一、框架概述 核心目标 解决长上下文场景下的计算成本问题降低处理延迟提升模型性能表现 创新特点 问题感知的粗到细压缩策略文档重排序机制动态压缩比例控制压缩后的子序列恢复策略 二、技术方法详解 粗粒度压缩 (a) 文…...

Django serializers:把ValidationError处理的更优雅

开发中必不可少的会对参数做各种校验,必填、唯一等等,这个时候我们需要在校验失败时抛出友好、清晰的提示。 直接使用serializers做校验,虽然也能抛出自定义的错误提示,但是其信息格式是嵌套,并不适合直接反映在前端页…...

CASA(Carnegie-Ames-Stanford Approach) 模型原理及实践技术

植被作为陆地生态系统的重要组成部分对于生态环境功能的维持具有关键作用。植被净初级生产力(Net Primary Productivity, NPP)是指单位面积上绿色植被在单位时间内由光合作用生产的有机质总量扣除自养呼吸的剩余部分。 专题(一)C…...

【HarmonyOS之旅】ArkTS语法(一)

目录 1 -> 基本UI描述 1.1 -> 基本概念 1.2 -> UI描述规范 1.2.1 -> 无参数构造配置 1.2.2 -> 必选参数构造配置 1.2.3 -> 属性配置 1.2.4 -> 事件配置 1.2.5 -> 子组件配置 2 -> 状态管理 2.1 -> 基本概念 2.2 -> 页面级变量的状…...

【畅购电商】项目总结

目录 1. 电商项目架构图 1.1 系统架构 1.2 技术架构 2. 介绍电商项目 2.1 后台和前台、后端和前端 2.2 Vue全家桶包含哪些技术? 2.3 什么是Vuex? 2.4 什么是SSR 2.5 电商模式是什么? 2.6 枚举类 2.7 elasticsearch相关 2.8 gatew…...

python|利用ffmpeg按顺序合并指定目录内的ts文件

前言: 有的时候我们利用爬虫爬取到的ts文件很多,但ts文件只是视频片段,并且这些视频片段是需要按照一定的顺序合并的,通常ts文件合并输出格式为mp4格式 因此,本文介绍利用python,调用ffmpeg来批量的按自己…...

IP属地和所在地不一致什么意思?怎么换成另外一个地方的

在数字化时代,IP地址作为网络设备的唯一标识符,不仅关乎设备间的通信,还涉及到用户的网络身份与位置信息。然而,有时我们会发现,社交媒体或网络平台上显示的IP属地与用户的实际所在地并不一致。这种不一致现象引发了诸…...

Hive其十,优化和数据倾斜

目录 Hive优化 1、开启本地模式 2、explain分析SQL语句 3、修改Fetch操作 4、开启hive的严格模式【提高了安全性】 5、JVM重用 6、分区、分桶以及压缩 7、合理设置map和reduce的数量 合理设置map数量: 设置合理的reducer的个数 8、设置并行执行 9、CBO优…...

matlab reshape permute

1.reshape 将向量按照顺序重新构建 矩阵,新矩阵 先排完第一列, 再第二列… 2.permute 将向量 维度变换...

数据库sql语句单表查询

简单的增删改查操作 select count(*) from user where accountadmin and password123456 select count(*) from user where account"admin" insert into user(account,password) values ("admin","777") update user set password "666&…...

Linux高级--2.4.2 linux TCP 系列操作函数 -- 深层理解

一、操作函数简介 在 Linux 中,TCP(传输控制协议)操作涉及多种系统调用和函数,通常用来创建套接字、连接、发送/接收数据、关闭连接等。以下是一些常用的 TCP 操作函数和它们的简要说明: 1. socket() 函数原型: int…...

科技快讯 | 水滴筹成为民政部指定个人求助网络服务平台;小米超级小爱首次向正式版用户开放;腾讯发布全球首个重症医疗大模型

本地 AI 开发利器,初探微软 Win11 AI Dev Gallery 功能 12月27日,科技媒体Windows Latest报道,微软推出AI Dev Gallery功能,助力开发者集成端侧AI。该功能支持Windows 10/11,提供25个示例模型,涵盖多领域。…...

强化特种作业管理,筑牢安全生产防线

在各类生产经营活动中,特种作业由于其操作的特殊性和高风险性,一直是安全生产管理的重点领域。有效的特种作业管理体系涵盖多个关键方面,从作业人员的资质把控到安全设施的配备维护,再到特种设备的精细管理以及作业流程的严格规范…...

跨语言学习之C++ 和 Python 的赋值操作 (等号“=“) 的区别

C++ 和 Python 的赋值操作(等号 =)在底层机制和表现行为上有显著区别,主要体现在变量与对象的关系、内存管理和对象类型等方面。以下是两者的详细对比: 1. 变量与对象的关系 Python: 变量是对象的引用,赋值操作是将变量指向某个对象的内存地址。多个变量可以指向同一个对…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...