william.chan's blog

done is better than perfect

基于 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? 在 ...

nestjs 短链服务

生成方案对比与核心代码实现

在营销短信、社交媒体分享以及二维码生成等场景中,经常需要将冗长的 URL 转换成简短的链接(类似于 t.cn/xxxx 或 bit.ly/xxxx)。这不仅能缩减字符数量,使得排版更加美观,还能通过短链服务器进行访问量(PV/UV)的埋点统计。 本文将深入探讨在 NestJS 中实现短链服务的几种主流方案,对比它们的优缺点,并提供最佳实践的代码实现。 短链服务的三大核心方案对比 短链的...

nestjs EventEmitter

解耦业务代码:事件驱动模型的优雅实现

在复杂的企业级后端应用中,当我们执行一个核心操作(比如:用户注册)后,往往需要触发一系列“副作用”次要流程:发送欢迎邮件、发放新人优惠券、通知运营系统、记录注册日志等。如果把这些杂七杂八的逻辑全部硬编码塞在 UserService.create() 里,代码会变得极其臃肿,严重违反“单一职责原则”。 NestJS 官方提供了 @nestjs/event-emitter 模块,它对底层的 E...

nestjs @compodoc/compodoc

生成项目代码架构和内部技术文档

在企业级项目开发中,良好的代码文档是降低团队沟通成本的关键。NestJS 默认完美支持基于 TypeScript 和装饰器的开发模式,这使得我们可以直接使用 Compodoc 来为整个系统生成一份静态的代码架构和内部技术文档。 Compodoc 最初为 Angular 量身打造,但由于 NestJS 在架构上(Module, Controller, Provider 等)与 Angul...