william.chan's blog

done is better than perfect

字符串与字节的关系

字符串:人读得懂的文本,比如 "admin@example.com"。字节:机器存储和传输数据的原始单位,比如一串 0 到 255 的数

1.字符串与字节的关系 字符串和字节不是一回事。 可以先这样理解: 字符串:人读得懂的文本,比如 "admin@example.com" 字节:机器存储和传输数据的原始单位,比如一串 0 到 255 的数 关键点在于,计算机里字符串最终也必须落成字节,但“怎么把字符变成字节”要靠编码规则。 最常见的编码规则就是 UTF-8。比如: 字符 "A" 用 UTF-8 ...

包名为什么叫 jose

JOSE 是 JavaScript Object Signing and Encryption 的缩写,指的是一整套和 JSON/Token 加密签名相关的标准族

1.包名为什么叫 jose https://github.com/panva/jose jose 这个包名来自标准本身,不是作者随便起的。 JOSE 是 JavaScript Object Signing and Encryption 的缩写,指的是一整套和 JSON/Token 加密签名相关的标准族,主要包括: JWS:JSON Web Signature,做签名 ...

MCP - 给 Model 扩展 Context,让它能做的更多,知道的更多的 Protocal

可跨进程调用的工具

1.MCP ai agent 是 MCP 客户端,可以通过 MCP 协议调用各种 MCP server,实现跨进程的工具调用 跨本地的进程调用,用 stdio 跨远程的进程调用,用 http MCP 是由 Anthropic 公司发起并开发的,2025年12月交给了 Linux 基金会维护。 是中立于任何模型的行业通用协议。

基于 tool + LLM 实现 mini cursor

src/all-tools.mjs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 6...

从 Tool 开始:让大模型自动调工具读文件

问 LLM 一些问题,它会告诉你怎么做,但它没法帮你去做

通过工具给 LLM 扩展能力 定义工具,绑定工具到model,与LLM对话,判断是否需要 tool call, 根据 LLM 返回的工具名称和参数调用工具, 将工具返回的结果添加到 memory 中,继续对话,获取 LLM 的最新返回内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27...

AI Agent 开发要学什么

AI Agent 开发能力 - 给 LLM 扩展各种能力,满足各种 AI 需求

1.Memory LLM 的记忆有限,需要开发者做 Memory 管理 2.Tool LLM 需要调用的工具,需要开发者开发好 Tool 交给它。 用于各种需要给 LLM 扩展能力的场景 3.RAG LLM 没办法对不知道的私密文档做解答,需要扩展 RAG 知识库查询能力 4.LLM LLM 自身有规划和推理的能力 LangChain 框架 用来开发单个 Agent,每个 ...

NestJS 微服务 (Microservices)

NestJS 提供了内置的微服务架构支持,抽象了不同的传输层(TCP、Redis、Kafka、gRPC等),让构建分布式系统变得非常优雅。

什么是微服务架构? 在单体架构(Monolithic)中,所有的业务逻辑都打包在一个应用中。而微服务架构(Microservices)将一个庞大的应用拆分为多个独立的服务,这些服务可以独立开发、测试、部署和扩展。 NestJS 提供了开箱即用的微服务支持,它抽象了底层网络通信细节,无论使用 TCP、Redis 还是 Kafka,开发者的上层业务代码几乎是一致的。 支持的传输层 (Tra...

nestjs swagger

在nestjs 中使用 swagger 的最佳实践

Swagger(OpenAPI)是现代 Web API 开发的标配。在 NestJS 中,通过 @nestjs/swagger 集成 Swagger 可以极大地简化 API 文档的生成与维护工作。本文将介绍在 NestJS 项目中高效集成并使用 Swagger 的最佳实践。 1. 安装与初始化配置 首先,安装相关依赖。如果你使用 Express 作为底层(NestJS 默认),则需要安装...

nestjs 大文件流式下载

告别内存溢出,使用 StreamableFile 优雅处理海量数据分发

在 Web 后端开发中,文件下载是一个非常基础的功能。当文件比较小(几 MB)的时候,我们通常可以毫无顾忌地将文件全部读取到内存中,然后一次性响应给客户端。 但是,如果我们需要向客户端发送一个 1GB 甚至几个 GB 的大型安装包或视频文件,继续使用 fs.readFileSync(path) 就会导致极其严重的后果:Node.js V8 引擎的默认堆内存上限(通常约为 1.4GB)会被迅...

nodejs + sharp 压缩图片和GIF

实现压缩图片的命令行工具,并提供 mac zsh 配置

在日常开发和写博客时,我们经常需要压缩图片或者将图片转换为 webp 等高效格式,以加快网页的加载速度。虽然有很多在线压缩网站,但每次都去访问、上传、下载未免太繁琐。 借助于 Node.js 中性能极高的 sharp 库,我们可以自己动手写一个简单的命令行脚本程序,再配合 macOS 的 zsh 别名配置,实现在终端里一行命令秒压图片的极客开发体验。 为什么选择 Sharp? 在 ...