william.chan's blog

done is better than perfect

pyenv 常用指令

pyenv:多 Python 版本管理工具,切换全局 / 本地 /shell 的 python 版本

pyenv 常用命令 pyenv:多 Python 版本管理工具,切换全局/本地/shell 的 python 版本 版本查看 1 2 3 4 5 6 7 8 # 查看pyenv本身版本 pyenv --version # 列出本机已安装的python版本 pyenv versions # 查看当前生效的python版本 pyenv version 安装/卸载 Pytho...

字符串与字节的关系

字符串:人读得懂的文本,比如 "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)会被迅...