跳转至

软件架构与设计

LLM 到底是如何工作的

原文:How LLMs Actually Work

这篇文章是对 LLM 工作原理的一次梳理。现代 LLM 大多是通过把 transformer 块层层堆叠起来的,所以理解了 transformer 的内部机制,你就理解了大部分内容。

我会讲现代基于 transformer 的 LLM 内部的核心机制,但不涉及那些粘手的数学细节。别误会,数学你还是该学的,但这篇可以当作入门读物。

大多数现代 LLM 都共享同一套 transformer 家族的骨架。它们之间的差异主要来自训练数据、规模与配置选择,以及在此基础上做的后训练。读完本文,你应该能够阅读许多现代 LLM 论文或模型卡,并知道每一节在讲架构的哪个部分。

Anthropic 官方指南:构建高效的 AI 智能体

来源:Building Effective AI Agents

在过去一年里,我们与跨行业的数十支团队合作,构建基于大语言模型(LLM)的智能体。我们一致观察到:最成功的实现并没有使用复杂的框架或专门的库,而是用简单、可组合的模式来构建。

在这篇文章中,我们分享了从与客户合作以及自己构建智能体过程中学到的经验,并为开发者提供构建高效智能体的实用建议。

什么是智能体?

“智能体(Agent)”可以有多种定义。一些客户把智能体定义为完全自主的系统,能够长时间独立运行,使用各种工具完成复杂任务。另一些客户则用这一术语描述更具规约性的实现,按预定义的工作流执行。在 Anthropic,我们把所有这些不同形态都归为智能体系统(agentic systems),但在架构上对工作流(workflows)智能体(agents)做出重要区分:

  • 工作流是指通过预定义代码路径来编排 LLM 和工具的系统。
  • 智能体则是指由 LLM 动态指挥自身流程和工具使用、对如何完成任务保持控制权的系统。

下面我们将详细探讨这两种智能体系统。在 附录 1: 智能体实践 中,我们描述了客户从这类系统中获得特别价值的两个领域。

语音AI与语音智能体——图解入门指南(2025版)

原文:Voice AI & Voice Agents: An Illustrated Primer

1. 2025 年的对话式语音 AI

LLM 很擅长对话。

如果你花过不少时间与 ChatGPT 或 Claude 进行自由形式的对话,就会直观地感受到:和 LLM 交谈相当自然,而且在很多场景中都很有用。

LLM 也很擅长把非结构化信息转换为结构化数据1

新的语音 AI 智能体正是利用了 LLM 的这两项能力——对话,以及从非结构化数据中提取结构——来创造一种新的用户体验。

如今,语音 AI 已经被部署到广泛的商业场景中。例如:

  • 在医疗预约前收集患者数据
  • 跟进 inbound sales leads(入站销售线索)
  • 处理越来越多类型的呼叫中心任务
  • 协调公司之间的排期与物流
  • 以及为几乎所有类型的小企业接听电话

在消费端,对话式语音(以及视频)AI 也开始进入社交应用和游戏。开发者每天都在 GitHub 和社交媒体上分享个人语音 AI 项目与实验。

LangGraph Interrupt 从入门到深入

在构建 AI Agent 应用时,一个常见的需求是 人在回路(Human-in-the-Loop,简写HITL)——让 Agent 在关键节点停下来,等人工审核/确认后再继续。LangGraph 提供了 interrupt 机制来实现这一功能。

本文将带你从零开始理解 interrupt,先讲清楚概念,再用代码一步步深入,最后总结踩坑经验。

什么是 interrupt?

interrupt 是 LangGraph 提供的一个函数,调用它可以让当前正在执行的图在某个节点 暂停(暂停整个图,不是只暂停当前节点),等待外部通过 Command(resume=...) 恢复执行。

它的典型工作流程:

用户输入 → LLM 推理 → 调用工具 → 工具内 interrupt()
                              图暂停,等待 resume
                        外部调用 Command(resume=data)
                              工具继续执行 → 返回结果给 LLM → 输出

关键特性:

  1. 暂停是整个图级别的 — 不只是退出当前节点,整个 graph.stream() 调用都会返回
  2. 需要 checkpointer — 没有 checkpoint,interrupt 无法保存状态
  3. 恢复需要 resume — 使用 Command(resume=...) 从暂停点恢复

LangGraph 完全指南:从入门到精通与源码级原理剖析

LangGraph 的诞生背景与架构全景

LLM 应用编排的演进史

在理解 LangGraph 之前,我们需要回顾 LLM 应用编排框架的演进历程。这个演进本质上是 "如何让 LLM 应用的控制流从线性走向复杂" 的过程。

第一阶段:Prompt 模板 + API 调用(2022 年)

最初的 LLM 应用极其简单——写一个 prompt 模板,调用 OpenAI API,获取结果。这适合单轮问答,但无法处理多步推理。

# 2022年的典型LLM应用
import openai
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "翻译:Hello World"}]
)

LangGraph 入门到精通教程:从零基础到实现简易版 LangGraph

LangGraph 是 LangChain 生态中最重要的低层编排框架之一,它让开发者能够以“图”(Graph)的形式构建复杂、状态持久、多 Actor 的 LLM 应用。不同于传统的 LangChain Chain 或 Agent,LangGraph 真正解决了“长生命周期、有状态、可恢复、可中断、可调试”的核心痛点,被广泛用于构建生产级 Agent、自主工作流、多 Agent 协作系统等场景。

本文从入门(零基础快速上手)到深入(源码级原理分析),再到实践(基于 LangGraph 原理手写一个简易版 LangGraph),帮助你真正“精通”LangGraph。所有代码均在 Python 3.10+ 环境下测试通过,基于官方仓库原理提炼。

LangGraph 是什么?为什么需要它?

LangGraph 的核心思想源于 Google Pregel(一种大规模图计算框架)和 NetworkX 图接口。它把 LLM 应用建模为有向图

  • 节点(Node):执行具体动作的函数或 Runnable(LLM 调用、工具调用、Python 函数等)。
  • 边(Edge):控制流(无条件边、条件分支边、动态 Send)。
  • 状态(State):共享的 TypedDict,通过 Channel(通道)进行更新,支持多种归约器(reducer,如 append、last_value)。
  • 执行引擎:Pregel 算法 —— “超级步”(superstep)模型,实现 Bulk Synchronous Parallel(BSP),支持循环、并行、检查点持久化。

与 LangChain 的区别

  • LangChain Chain 是线性/树状流程,适合简单任务。
  • LangGraph 是循环有向图(支持 cycle),天然适合 ReAct Agent、规划-执行-反思循环、多 Agent 协作。
  • 官方文档定位:LangGraph 是“为长期运行、有状态 Agent 设计的低层框架”,LangChain 很多高级 Agent(如 create_react_agent)底层就是 LangGraph。

核心优势

  1. 持久化(Checkpoint):任意时刻保存状态,支持故障恢复、人机协同。
  2. Human-in-the-Loop:中断执行,人工修改状态后继续。
  3. 流式 + 调试:stream_mode 支持 values/updates/debug/messages,与 LangSmith 无缝集成。
  4. 可扩展:自定义 Channel、Subgraph、Remote Pregel。
  5. 生产就绪:支持 Postgres/SQLite 持久化、异步执行、重试策略。

官方最新版本(2026 年 4 月):langgraph==1.1.7a1(预发布),核心位于 libs/langgraph/langgraph/ 下,主要模块包括:

  • graph/:StateGraph、MessageGraph、分支逻辑。
  • pregel/_loop.py_runner.py_algo.py_checkpoint.py 等实现 Pregel 执行引擎。
  • channels/:LastValue、Topic、BinaryOperatorAggregate 等通道实现。

🦞 OpenClaw:给 AI 装上“爪子”的开源革命 —— 数字贾维斯已到来

OpenClaw 是什么?

OpenClaw(原名 Clawdbot → Moltbot → OpenClaw)是一个开源 AI 代理框架,由奥地利独立开发者 Peter Steinberger 创建。它不是一个大模型,而是一个"给 AI 装上爪子的执行系统"

简单来说:

  • GPT/Claude 是"大脑"——只能思考和建议
  • OpenClaw 是"手脚"——能真正操作你的电脑执行任务

它运行在你的本地设备(Mac/PC)或私有服务器上,通过 WhatsApp、Telegram、Slack、飞书、钉钉等日常聊天软件与你交互,拥有读写文件、执行终端命令、操控浏览器、访问邮件日历等系统级权限

掌握Flutter状态管理

原文:Mastering State Management in Flutter

想象一下一群书呆子为如何操作数据争吵了五年。这基本上就是 Flutter 社区一直在发生的事情。

五年过去了,关于 GetX 的帖子仍然会引发风暴。我就是那些书呆子之一。所以,我想最后一次狂热一下,然后继续我的生活。这是我关于状态管理的最终结论

最终结论

使用任何你想用的状态管理方案。如果你在意别人用什么,那就找点更好的事情去关心。

我不在乎你用什么。然而,我强烈建议你了解你所使用的工具,并理解如何仅使用 Flutter 提供的工具来管理你的状态

什么是状态?

状态管理这个短语可以分解为一个用于管理你的状态的系统。什么是状态?

状态是一种数据。应用程序中有两种类型的数据:

  • 常规数据(硬编码且无法更改)
  • 状态(可以更改的奇特数据)

一个典型的状态例子是用户信息。例如,你可以在主屏幕上显示 Hello, Tadas,其中 Tadas 这部分信息是从用户信息状态中获取的。假设你有一个设置页面,可以在其中将名称更改为 T-Dog。这将使用新值更新用户信息状态,你的应用将更改为显示 Hello,T-Dog。状态管理解决方案将促进这一更改数据并在整个应用程序中传播这些更改的过程。

其他一些常见的状态例子包括新闻动态、关注者数量、待办事项、倒计时器等。

状态最简单的定义就是可以更改的数据

Material Design 3 (Material You) 完整开发指南

概述与核心变革

Material Design 3(代号 Material You)是 Google 于 2021 年 I/O 大会发布的第三代设计系统,随 Android 12 正式推出。它代表了从"统一设计"到"个性化表达"的范式转变。

与 Material Design 2 的关键差异

特性 Material 2 Material 3
颜色哲学 固定品牌色(Primary/Secondary) 动态个性化(从壁纸/种子色生成)
颜色数量 12个基础色槽 26+个语义化颜色角色
表面层级 阴影海拔(Elevation) 色调表面(Tone-based Surfaces)
排版体系 6种样式(Headline 1-6等) 15种令牌化样式(Display/Headline/Title/Body/Label)
形状系统 固定圆角 7级可配置圆角体系
个性化 核心特性(壁纸取色、算法生成)

核心设计原则

  1. 个性化优先:系统从用户壁纸提取颜色,生成独一无二的主题
  2. 算法驱动美学:基于 HCT 颜色空间的科学算法确保配色和谐
  3. 无障碍内置:所有颜色组合默认满足 WCAG 2.1 AA 对比度标准
  4. 跨平台一致:提供跨平台实现规范,Android(Compose/View)与 Flutter 为官方完整实现,Web 与 iOS 通过 Material Color Utilities 支持配色算法

Go 开发中我一定会用到的 7 种代码模式

原文:7 Code Patterns in Go I Can’t Live Without

代码模式使你的程序更可靠、更高效,并使你的工作和生活更轻松

我已经为开发EDR解决方案工作了7年。这意味着我必须编写具有弹性和高效性的长时间运行的系统软件。我在这项工作中大量使用 Go,我想分享一些最重要的代码模式,你可以依靠这些模式你的程序更加可靠(reliable)和高效(efficient)。

使用Map实现Set

我们经常需要检查某些对象是否存在。例如,我们可能想检查之前是否访问过某个文件或者URL。在这些情况下,我们可以使用map[string]struct{}。如下所示:

使用空结构 struct{} 意味着我们不希望Map的值占用任何空间。有些人会使用 map[string]bool,但基准测试表明 map[string]struct{} 在内存和时间上都表现得更好。相关基准测试可以查看这里