自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 Python+Agent入门笔记(七):RAG 和外部知识,让 Agent 有资料可查

接上一篇《Python+Agent入门笔记(六)》。。这篇聊 RAG,目标很朴素:把本地的几篇文档变成 Agent 能查的资料库,不依赖任何向量数据库。

2026-11-13 13:21:46 137

原创 Python+Agent入门笔记(六):记忆和状态,从“一次性问答”到“能用助手”

滑动窗口的缺点很明显:被扔掉的信息就真没了。如果用户第一轮说“我不吃辣”,隔了二十轮让他推荐餐厅,模型已经忘了。定期把旧的对话压缩成一段总结,作为一条特殊的消息插进去。"""把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。"""# 把旧消息拼成纯文本,让模型总结content = f"[工具结果]把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。

2026-11-12 14:03:16 110

原创 Python+Agent入门笔记(五):手搓 Function Calling,揭开 Agent 循环的底牌

模型不会读你的 Python 代码。你得用它能理解的格式,告诉它有哪些工具、每个工具接受什么参数。"description": "查询指定城市的当前天气","city": {"description": "城市名,例如:杭州"},"unit": {"description": "温度单位,默认摄氏度"},注意字段。模型是靠它来决定什么时候该调这个工具的。写得越清楚,模型判断越准。手动写这段 JSON 很烦,容易漏字段。"""查询指定城市的当前天气"""

2026-11-11 09:26:01 167

原创 Python+Agent入门笔记(四):类型提示、pydantic 和 httpx,手搓一次模型调用

接口返回的 JSON 结构不稳定,直接取,一报错就是KeyError,很难查工具参数需要校验,模型给的参数不一定合法发 HTTP 请求,用requests在异步流程里会卡事件循环类型提示写不写?写了好像也不报错,那到底有什么用这三个问题正好对应类型提示、pydantic、httpx。这篇写完,你就能脱离框架,自己调一次模型,知道框架在背后帮你做了什么。city: str = Field(description="城市名,例如:杭州")

2026-11-09 14:08:09 203

原创 Python+Agent入门笔记(三):类和异步,Agent 代码里最常撞见的两块

上一篇结尾预告过了。定义工具,要写类,或者至少看类模型客户端,都是类,还有基类继承消息结构、配置项,基本都是dataclass或者pydantic模型调用大模型 API,全是async,一个await接一个await如果按传统教材的顺序,类会讲很多设计模式,异步会讲事件循环原理。我不打算这么写,那样容易看困。这篇就按“看懂 Agent 代码需要哪些”来组织。JS 里 ES6 之后有class,Go 用结构体加方法。Python 的类更接近 JS 那套,但有几个细节不一样。

2026-11-06 11:49:55 217

原创 Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

2026-11-03 09:03:03 434

原创 Python+Agent入门笔记(一):别急着写 Agent,先把这几块基础盘明白

我自己的技术栈一直是 JS 和 Go,前端后端都写过。最近准备往 Agent 开发方向靠,绕不开 Python,于是决定系统补一遍。这个系列我会按自己的学习顺序写,尽量不写成“语法手册”,而是记录一个 JS/Go 开发者真正会卡住的地方。先说结论:Python 入门确实不难,但“能看懂”和“写得顺手”是两回事。尤其是你带着 JS/Go 的习惯过来,前几个小时会有点别扭。

2026-11-02 15:34:41 392

原创 Web3 全栈开发(五):从零写一个质押合约并跑通全链路

前面四篇,合约都是随手写的玩具。Counter 合约虽然能跑通链路,但它没有任何业务价值。这一篇开始,我要写一个真正有业务逻辑的合约,并且把它从设计、测试、部署,一路接到前面搭好的 Go 后端上。为什么选质押(Staking)?涉及ERC20 代币交互(用户质押的是 ERC20)涉及时间逻辑(奖励按时间累积)涉及状态机(质押、提取、领取奖励)涉及经济模型(奖励率、总量控制)把这个合约写清楚,你就能覆盖 DeFi 项目里 80% 的合约开发场景。

2026-10-08 15:58:23 372

原创 Web3 全栈开发(九):作品集与面试——把这八篇变成简历上的硬通货

下面这些是我在面试里真被问过的,或者是同行的朋友分享过的。我把每道题的回答思路写出来,而不是标准答案——因为标准答案网上到处都是,但面试官更关心你怎么想。

2026-10-08 09:35:53 235

原创 Web3 全栈开发(八):部署与运维——从 Demo 到能上线的产品

Go 后端在运行过程中可能因为 RPC 断连、内存溢出等原因崩溃,有了这个配置,Docker 会自动重启它。合约部署之后,如果不验证源码,用户在 Etherscan 上看到的只有字节码,完全不知道这个合约干了什么。代理模式下,逻辑合约的构造函数不会被调用(因为逻辑合约不是被直接部署的),所有初始化逻辑必须放在。合约部署是“一次性”的事,后端和前端是“持续性”的服务。到这里,从合约到前端到部署运维,我走完了一整圈。是编译时确定的,代理合约部署时它就已经固定了,而逻辑合约升级后应该重新设置。

2026-10-07 10:08:43 210

原创 Web3 全栈开发(七):合约安全——从“会写”到“敢写”的分水岭

我们下一篇见。

2026-09-29 09:35:56 336

原创 Web3 全栈开发(六):前端实战——用 wagmi + viem 写一个完整的质押页面

Next.js 的 App Router 里,要加。

2026-09-28 15:39:13 221

原创 Web3 全栈开发(四):用 Go 可靠地构建和发送交易

检测到 nonce gap 时,用相同的 nonce 发一笔 Gas Price 更高的“填充交易”——比如给自己转 0 ETH,或者重新发原交易。是基于当前状态模拟的,等你交易真正上链时状态可能变了,比如存储槽从 0 变成非 0 会额外消耗 Gas。但后端服务天然是并发的,多个请求同时发交易时,nonce 就成了大坑。这样相当于发一笔“给自己转 0 ETH”的交易,把原来的 nonce 占用掉,原交易就永远不会上链了。——高 Gas 的那笔把低 Gas 的挤掉,低 Gas 的那笔等于没发。

2026-09-23 10:12:52 476

原创 Web3 全栈开发(三):事件监听——Web3 后端最核心的能力

如果你的场景是即时通知(比如用户刚发了一笔交易,想立刻在页面上看到),可以先用订阅事件给出“待确认”状态,等确认数够了再改成“已确认”。事件是合约主动“广播”出来的日志,它存在交易的 receipt 里,本质上也是链上数据,但比状态变量好查得多——因为 RPC 节点提供了。这时候你之前监听的事件,可能在新的链上不存在了。尤其是边界处理——补历史的时候刚好来了新块怎么办,重连时如果链已经推进了很远怎么处理,这些都需要仔细考虑。真正的后端服务要考虑的东西多得多,我踩过的坑集中在这三个地方。

2026-09-22 09:22:46 409

原创 Web3 全栈开发(二):从零跑通一个最小 DApp

做后端的时候,nonce 管理是个大坑——并发发交易时,如果两个请求拿到同一个 nonce,第二笔就会被拒。我刚开始也是这样,抱着《Solidity 官方文档》啃了两周,结果连一个完整的“部署→调用→看到结果”的闭环都没走通过。:写一个计数器合约,部署到 Sepolia 测试网,用 viem 前端读数据+写数据,再用 Go 后端读数据+写数据。前端不直接读链,而是读后端 API,性能会好很多。,确认合约能正常工作。我选了计数器,因为它足够简单,但该有的东西都有:状态变量、读函数、写函数、事件。

2026-09-21 16:44:24 453

原创 Web3 全栈开发(一):前端 + Golang + Solidity 技术栈全景

一个经典的例子:你的 Go 后端可以把所有用户的余额做成叶子节点,生成一棵 Merkle Tree,只把 Merkle Root 放到链上。哪怕你还没做过完整的项目,在学每个 API 的时候,都要有意识地想一下:如果这一步出错了,系统该怎么兜底[reference:11]。下一篇我会写一个真正能跑起来的最小 DApp:写一个最简单的 Solidity 合约,用 Remix 部署到测试网,然后分别用 viem 前端和 Go 后端去调用它。三者打通,你才是一个“能交付产品”的人。

2026-09-21 11:53:46 783

原创 Go 语言入门笔记(十九):系列总结——从入门到上手的心路与后续方向

十八篇写下来,从最开始搭环境跑 Hello World,到现在聊云原生部署,回头看看这个系列其实已经覆盖了 Go 的大部分核心内容。这篇作为收尾,不打算再讲新知识点,而是把整个系列的脉络梳理一遍,聊聊我学习过程中的一些感受,以及后续想继续深入的方向。也算给自己这段时间的学习画个句号。

2026-09-18 09:18:07 152

原创 Go 语言入门笔记(十八):Go 与云原生——从开发到上线的最后一公里

前面十七篇基本把 Go 的语言、工程、微服务都覆盖了。但服务写完只是开始,怎么打包、部署、上线、运维,才是真正把代码变成生产力的关键。Go 在云原生领域可以说是“亲儿子”,Docker 和 Kubernetes 都是 Go 写的,用 Go 写云原生服务有天然优势。这篇就把从开发到上线的整个链路梳理一遍,包括 Docker 打包、Kubernetes 部署、健康检查、优雅退出、配置注入等内容。

2026-09-17 15:21:20 358

原创 Go 语言入门笔记(十七):微服务常见实践——从单体到分布式

前面把 Go 的语言特性和工程实践都过了一遍,基础算是扎实了。但真实的工作场景里,很多项目都是微服务架构,尤其是后端岗位,面试时几乎躲不开“你们项目怎么拆服务的”“服务之间怎么调用”“怎么保证稳定性”这类问题。这篇就结合我自己的理解,把 Go 在微服务中的常见实践梳理一下,包括 RPC、服务注册发现、链路追踪、限流熔断等。

2026-09-11 11:29:22 670

原创 Go 语言入门笔记(十六):项目结构与实践——从一个真实项目说起

前面十五篇基本把 Go 的语言特性过了一遍,语法、并发、标准库、测试、反射、泛型都写了。但真正开始写项目的时候,你会发现光懂语法远远不够,怎么组织代码、包怎么划分、依赖怎么管理、配置放哪里、优雅关闭怎么做,这些问题在实际开发里比语法细节更让人头疼。这篇就结合我自己写的一个小项目,聊聊 Go 项目的目录结构和一些实践经验。

2026-09-10 11:34:08 217

原创 Go 语言入门笔记(十五):泛型——Go 1.18 的新特性

total += n这个模式在写通用库时非常实用。

2026-09-10 09:12:08 164

原创 Go 语言入门笔记(十四):性能优化实战——pprof 工具定位瓶颈

pprof 是 Go 标准库自带的性能分析工具,可以采集程序的运行时数据,包括 CPU 使用、内存分配、goroutine 状态、阻塞情况等。采集到的数据可以生成火焰图、调用图等可视化报告,方便我们找到性能瓶颈。:分析程序 CPU 消耗主要集中在哪些函数。内存 profile:分析内存分配情况,帮助定位内存泄漏或不必要的分配。:查看所有 goroutine 的状态,定位 goroutine 泄漏或死锁。

2026-09-07 09:24:55 196

原创 Go 语言入门笔记(十三):内存管理与 GC——面试必问的底层机制

答:在并发标记过程中,用户代码可能修改对象引用,写屏障用来记录这些修改,防止漏标。

2026-09-04 09:20:26 155

原创 Go 语言入门笔记(十二):反射——框架背后的“黑魔法”

写了十一篇,终于到了反射。第一次听说反射是在学 Java 的时候,当时觉得这东西很酷,但也很复杂。Go 里同样有反射,标准库reflect包提供了相关功能。很多框架(比如 JSON 序列化、ORM、依赖注入)底层都用到了反射。虽然平时业务代码很少直接写反射,但理解反射对阅读源码和面试都很有帮助。这篇就把我对反射的理解和常用场景梳理一下。

2026-09-01 13:37:57 218

原创 Go 语言入门笔记(十一):单元测试、基准测试与表格驱动测试

写了十篇基础内容,一直没提测试。其实测试是 Go 语言里非常核心的一部分,标准库自带 包,写测试就像写普通代码一样自然。我以前写代码几乎不写测试,觉得浪费时间,直到有一次改了某个函数,结果线上出了问题,才意识到测试的重要性。这篇就把 Go 里的单元测试、表格驱动测试、基准测试以及一些实用技巧记录下来。Go 的测试文件命名有固定规则:以 结尾。比如 的测试文件就是 。测试函数必须以 开头,参数是 。假设我们有一个 :对应的测试文件 :在包目录下执行:如果测试通过,输出类似:如果失败,会打印出错

2026-08-31 09:18:25 151

原创 Go 语言入门笔记(十):标准库常用包——写代码离不开的 fmt、strings、json 等

前面九篇把语法、并发、错误处理、包管理都过了一遍,基础算是打完了。从这篇开始,实际写业务代码时,你会发现大量时间都在和标准库打交道。Go 的标准库设计得很克制,很多常用功能不用引第三方库,直接用官方包就够了。这篇把我最常用的几个包(fmt、strings、strconv、time、encoding/json)梳理一遍,配合一些实际使用中容易踩的坑。

2026-08-29 09:10:28 162

原创 Go 语言入门笔记(九):包管理与依赖管理——Go Modules 到底怎么玩

前面几篇基本上都是单文件写代码,但实际项目不可能只有一个 main.go。当你开始拆分包、引入第三方库的时候,就绕不开 Go Modules。这篇把我从 GOPATH 时代过渡到 Modules 过程中踩过的坑、弄明白的原理整理一下。Go 1.11 引入 Modules,1.16 起默认开启,现在基本没人用 GOPATH 了。

2026-08-27 10:39:27 304

原创 Go 语言入门笔记(八):错误处理与 panic/recover——Go 的“异常”哲学

有时候光靠errors.New不够,需要携带更多上下文,比如错误码、堆栈信息等。这时可以定义一个结构体来实现errorCode int// 使用err := &MyError{Code: 404, Message: "资源不存在"}这种方式很灵活,可以在错误里塞任何字段。很多第三方库都自定义了错误类型,比如等。

2026-08-24 08:25:32 185

原创 Go 语言入门笔记(七):并发安全与 context 控制

上一篇讲了 goroutine 和 channel 的基础,跑通了并发的基本用法。但实际项目里,光会go func()远远不够,很快会遇到数据竞争、死锁、goroutine 泄漏这些问题。这篇就把 Go 里常用的并发安全工具和 context 控制梳理一遍,这些都是面试和实际开发中的高频考点。

2026-08-21 14:02:18 342

原创 Go 语言入门笔记(六):goroutine 和 channel——并发编程的入门

终于到 Go 最吸引人的部分了。记得当初决定学 Go,很大原因就是听说了它“天生支持并发”“用 goroutine 写并发像开挂一样”。但真正开始写的时候才发现,并发编程哪有那么简单,goroutine 用起来爽,channel 用不好照样死锁、泄漏、数据竞争。这篇就把我入门并发时踩过的坑和搞懂的概念梳理一遍。

2026-08-21 09:55:57 237

原创 Go 语言入门笔记(五):结构体、方法与接口——Go 的“面向对象”长这样

用type和struct关键字:goAge int字段名首字母大写表示导出(其他包可用),小写表示私有(仅当前包可用)。这个规则在 Go 里贯穿始终,结构体字段、函数、方法、接口名都适用。方法和函数几乎一样,只是在func后面多了个接收者gofmt.Printf("你好,我是 %s,今年 %d 岁\n", p.Name, p.Age)调用方式像面向对象语言里的对象方法:gop := Person{Name: "小明", Age: 20}

2026-08-20 11:57:34 169

原创 Go 语言入门笔记(四):函数、多返回值与 defer 的那些坑

终于写到函数了。Go 的函数和 C/Java 比,最大的特色就是和,这两个东西用好了能让代码简洁不少,但用不好也容易踩坑。这篇把我学习过程中觉得重要和容易犯错的点都记下来。

2026-08-20 09:12:25 203

原创 Go 语言入门笔记(三):流程控制——if、for、switch 的另类用法

前面两篇把环境和变量语法过了一遍,终于可以开始写点有逻辑的代码了。Go 的流程控制关键字很少,就ifforswitch这三个(外加一个基本没人用的goto),但每个都跟 C/Java 的习惯不太一样,有些地方用起来还挺“反骨”的。这篇就把我实际写的时候踩过的坑和觉得好用的地方理一理。

2026-08-18 13:53:22 206

原创 Go 语言入门笔记(二):变量、零值和那些“别扭”的类型转换

Go 里可以用type关键字基于已有类型定义新类型,也可以声明别名,两者有细微差别。type MyInt int // 定义新类型,和 int 不是同一类型type AliasInt = int // 定义别名,就是 int 的另一个名字MyInt需要显式转换才能赋值给int,而AliasInt和int完全通用。byte和rune就是 Go 内置的别名类型。var y int = int(x) // 必须转换var w int = z // 可以直接赋值这个面试偶尔会问,了解即可。

2026-08-15 10:10:46 341

原创 Go 语言入门笔记(一):从零搭环境到跑通第一个程序

最近因为项目里开始用 Go 写一些高并发的服务,再加上面试的时候发现不少岗位都要求“熟悉 Go 语言”,索性就趁这个机会从头系统地学一遍。输出倒逼输入,边学边记,这系列笔记就当是我的公开学习日志了。第一篇就从最基础的环境搭建开始,目标是跑通一行。

2026-08-12 16:22:23 874

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除