- 博客(166)
- 问答 (1)
- 收藏
- 关注
原创 上下文工程:LangChain 怎么组织「喂给模型的东西」
LangChain 给上下文工程下的定义是:用正确的格式,把正确的信息和工具提供给 LLM,让它能完成任务。它不谈模型能力,只谈「调用模型之前,你准备了什么」。模型是固定的黑盒,你能动的只有输入——系统提示词、消息历史、可用工具、返回格式,以及这些东西背后的数据从哪来。上下文工程就是把这部分工程化。在 LangChain v1 里,这件事几乎完全落在middleware和tool 的运行时接口上。所以这篇会先讲清楚 Agent 的执行循环、middleware 挂在哪,再展开两个维度。
2026-08-19 00:12:41
185
原创 文本生成的进阶:generateText / streamText 里迟早会撞上的东西
读懂 Vercel AI SDK》系列第 2 篇。上一篇里已经把和streamText都跑通了。这一篇不重复"这俩函数是干嘛的",而是讲。
2026-08-17 22:57:13
349
原创 快速上手:5 分钟跑通第一个 AI SDK 例子
读懂 Vercel AI SDK》系列第 1 篇。上一篇讲了它是什么、由哪几块组成。这一篇不谈概念,直接:从零跑通第一个例子,再升级成一个能流式对话的聊天应用。
2026-08-14 00:19:21
261
原创 AI SDK 总览:一个 TypeScript 工具包,如何把“接大模型“这件事变简单
技术选型不能只看设计漂亮,还得看有没有人用。周下载量约2000 万+GitHub26k+star、680+贡献者支持100+模型、16+provider(OpenAI、Anthropic、Google、xAI 等)官方支持 React / Next.js / Vue / Svelte / Node.js,Python 版在 beta在 JS/TS 生态里,它基本是做 AI 应用的事实标准。生态成熟还带来一个隐性好处:遇到问题,大概率别人已经踩过、已经有答案。
2026-08-14 00:10:55
365
原创 聊聊 Vercel AI SDK 的流式协议:前后端到底是怎么“边想边说“的
事件类型示例含义source-url引用的外部链接{"type":"source-document","sourceId":"...","mediaType":"file","title":"标题"}引用的文档file文件引用data-*任意结构化自定义数据customprovider 专属内容error{"type":"error","errorText":"出错了"}错误信息data-*data-
2026-08-12 23:27:23
334
原创 要做的是个什么项目:一条博客流水线,为什么拆成多个角色
单独加一个编辑,是因为 AI 写技术文章会犯 prompt 劝不住的错,而且判定权得攥在函数手里,不能交给模型。编排放在哪、谁决定下一步、数据怎么流转,三家给的答案完全不同,得有多个角色才逼得出来。想来想去选了写技术博客,因为它天然就是多角色的:有一个人写,有用户来读。单个 agent 没什么难度:挂几个工具、写段提示词、跑一轮对话,三个框架写出来差不多,看不出区别,跟 QuickStart 是一个问题。一、我们要做的是一条写博客的流水线,一个人写、三个视角审、不通过就修订复审。加审稿不是为了凑角色。
2026-08-05 23:49:19
221
原创 三个 Agent 框架,我用同一个项目各实现了一遍
一句话定位。特点。Standard model interface(统一的模型接口)。一套接口覆盖 chat model、embedding 等,跨各家 provider。换模型只需要很小的代码改动,需求演进时应用仍然是可移植的。Highly configurable harness(高度可配置的 harness)。从这个最小 harness 起步,通过 middleware 增量地加能力——护栏、重试、路由、自定义工具策略,你的场景需要什么就组合什么。
2026-08-02 23:41:11
248
原创 LangChain项目工程化:模块拆分、测试驱动开发(TDD)与CI/CD集成实战
本文通过模块拆分、TDD和CI/CD,将LangChain应用从原型升级为工程化项目。模块化是大型项目的基础,需明确职责边界。例如将和分离,便于替换向量数据库(如从Chroma切换到FAISS)。TDD能显著提升代码质量,但需平衡测试粒度。单元测试应覆盖边界条件(如空文件输入),而集成测试需模拟外部依赖。CI/CD自动化流程可减少人为错误,建议结合监控(如Prometheus)和日志分析(如ELK)。性能权衡:在模块拆分时,过度抽象会增加调用链路长度,影响性能。例如通过接口调用。
2026-03-04 23:57:00
606
原创 生产级优化指南:LangChain缓存、流式响应与错误重试机制实操
本文所有补丁均基于 LangChain 0.3.7 公开 API,未使用_private缓存补丁通过重写实现参数敏感哈希,key 可直接用于 Redis;流式补丁用封装降级逻辑,兼容现有 Chain 结构;重试补丁接管,实现状态码级精准控制。实测 72 小时:P95 延迟从 2.4s → 0.8s,超时率从 12.7% → 0.3%,重试成功率 99.2%。这些不是“锦上添花”,而是生产环境存活的底线能力。
2026-03-02 23:57:13
911
原创 LangChain Agent深度实践:编写可自主调用天气、搜索和计算器的智能体
第5/8篇|LangChain学习实录系列|所有代码在 Ubuntu 22.04 + Python 3.11.9 + LangChain 0.3.7 + Ollama 0.4.7 下逐行验证通过前四篇我们完成了链式调用、Prompt工程、本地知识库问答和FastAPI服务化部署。但真实请求常含隐式状态依赖与跨域操作——例如:这类请求无法靠静态Prompt覆盖:LLM需在运行时动态判断是否调用工具、选哪个工具、构造合法参数、处理返回结构、并决定是否继续。LangChain Agent 的核心价值不是增强LLM
2026-03-02 23:47:49
1017
原创 手把手复现:用LangChain搭个「能摸得着」的本地知识库(PDF+Markdown全支持)
让解析可见直接看到切块效果,不用猜PyMuPDF到底抠出了啥;让向量可验curl调用Ollama API,亲眼确认“Q3”被转成了,不是黑盒;让检索可控返回原文片段,能人工判断“为啥这个chunk没被召回”。真正的工程化,不是堆组件,是让每个环节都经得起质问。下一章(第4篇),我们就把这套能摸得着的系统,打包成FastAPI服务——解决并发请求排队、模型热加载、错误熔断这些生产级问题。字数:1527。
2026-03-02 23:37:59
1765
原创 从0到1实战:LangChain+Ollama+FastAPI部署可运行的私有AI助手
实例生命周期 = Uvicorn worker进程存活时间。时,所有session共享同一store字典;时,每个worker持独立storesession_id无法跨进程路由。这是开发期明确的性能权衡:牺牲横向扩展性,换取调试确定性。若需多worker支持,必须引入外部存储(如第6篇SQLite方案),否则session_id在负载均衡下必然丢失。本文交付的是一个可嵌入CI/CD、可被curlfetch直连、每一层失败点均可定位✅ Ollama API调用路径关键路径可控(curl验证→。
2026-03-02 23:36:02
842
原创 手把手复现:用LangChain构建本地知识库问答系统(支持PDF/Markdown)
`retriever.invoke("Q3")`返回空列表 | 对着终端发呆20分钟 | 先`curl http://localhost:11434/api/embeddings -d '{"model":"nomic-embed-text","input":"Q3"}'`,没返回向量说明Ollama没起来 |- **PDF解析选PyMuPDF**:`pypdf`遇到表格直接变乱码,而PyMuPDF能保留“| 里程碑 | 时间 |”这种结构,我第一次看到正确提取的表格时,默默给自己续了杯咖啡;
2026-03-02 22:56:30
711
原创 零基础入门LangChain:5分钟搭建你的第一个LLM聊天应用
《零基础5分钟搭建LLM聊天应用:LangChain避坑指南》 本文记录了作者从零搭建LangChain应用的实战经验,重点解决本地LLM调用中的常见问题。通过Ollama和LangChain组合,实现对话历史管理、类型安全调用和响应解析。关键步骤包括:创建虚拟环境、安装必要依赖(强调langchain-community必须显式安装)、拉取phi3:mini模型,以及10行核心代码实现带上下文的聊天功能。文章特别整理5个典型报错解决方案,如连接失败、导入错误等,并提供验证方法。所有命令均在macOS+Py
2026-03-02 09:35:57
924
原创 jetbrain 插件开发初体验
githubgit-commit-genie 基于AI生成标准化的Commit Message,模板如下并且支持自定义Commit Message Prompt,支持多个LLM(现支持通义系列)首先,需要设置apikey,选择模型( Open Settings > Tools > Git Commit Genie)之后,可以在Commit的dialog中就可以使用啦欢迎大家来使用它,同时也欢迎大家一块协作,提交代码,支持更多的模型。
2024-12-08 22:03:09
915
原创 CDP和Chrome
WebDriver和是用于自动化浏览器的两个主要协议,大多数的浏览器自动化工具都是基于上述其中之一来实现的。可以通过这两种形式来和浏览器交互,通过代码来控制浏览器,完成浏览器的自动化行为(包括网页加载,爬虫,截图,导出pdf等)。
2024-02-18 23:45:32
4489
原创 GO-日志分析
官网:https://github.com/uber-go/zapzap在很多开源的库中使用,比如etcddubbo-go等中。
2023-09-19 23:47:06
1118
1
原创 Go 异步任务
异步任务在开发中很常见,用来做解耦。本文介绍一下异步队列的实现的几个问题,并且结合三方库实现来分析。带着上面的问题,对比https://github.com/golang-queue/queue的实现,说明一下。
2023-08-08 23:54:29
1102
原创 Dubbogo 详解
dubbo功能很强大的微服务开发框架,支持多种通信协议,并具有流量治理的功能。dubbo在有了大转变,拥抱了云原生,从哪些方面可以体现呢?
2023-07-23 22:09:10
1439
原创 GO web开发
go官方提供了http服务,但它的功能很简单。这里介绍web开发中的一些问题,和web框架(echo)怎么解决这些问题 ,对于具体的echo的使用,可看官网官网:它的特点:关于echo和gin的不同可以看下面的内容对于我来说,有下面几点官网提供了详细的例子和使用说明,具体可以看官网。除此之外,还需要注意未知的错误发生,导致程序发生意外。在开始之前先列举go原生和echo的两种方式。
2023-07-01 23:49:26
841
原创 GO channel解析
官方文档:https://go.dev/ref/spec#Channel_types在 Go 语言中,channel 是一种用于在 goroutine 之间进行通信和同步的机制。可以用于在不同的 goroutine 之间传递数据。
2023-06-26 15:12:56
481
1
原创 GO defer详解
关于defer,找到了两篇官方的文章defer是Go语言的一种延迟调用的机制,可以在函数执行完毕之后执行动作。在函数return或者painc(这两种情况下,当前函数执行结束了,这也算函数执行完毕之后)执行。
2023-06-20 23:15:34
1002
1
原创 Go-unsafe详解
Go语言的unsafe包提供了一些底层操作的函数,这些函数可以绕过Go语言的类型系统,直接操作内存。虽然这些函数很强大,但是使用不当可能会导致程序崩溃或者产生不可预料的行为。因此,使用unsafe包时必须小心谨慎。此外,他提供了一些方法和类型如下其中Pointer的功能是很强大的,reflect包的功能大多基于它实现,具体可看下面内容。
2023-06-18 18:22:37
1243
原创 GO-slice详解
slice(切片)是go中常见和强大的类型,这篇文章不是slice使用简介,从源码角度来分析slice的实现,slice的一些迷惑的使用方式,同时也讲清楚一些问题。官方有slice相关的博客。
2023-06-11 13:55:53
1732
原创 go-Context详解
Context是一个很特殊的接口,在go里面主要承担的责任是在边界(方法,线程等)传递上下文,这些上下文包括需要有几个注意点。
2023-06-08 00:10:42
1718
1
原创 GO 性能分析
go提供了内存分析工具,pprof利用它可以看cpu和内存的情况。pprof分为大体分为两个部分数据采集有两种方式:官方官方提供了两种方式这是用来给没http服务来使用给http服务来使用的,提供了路由来方便访问。三方库profile数据分析:官方文档:https://github.com/google/pprof。
2023-06-06 01:24:40
716
原创 go调试工具-delve
上面的快速开始介绍了一些常用的使用方式,它的help写的很好,很清晰,关于单个命令就不再这里介绍了。下面主要介绍几个命令debugexectest除此之外还有一个子命令(开始dlv session之后的输入的命令)disassemble-官方文档。
2023-06-04 18:45:24
1661
1
原创 go-cli
在使用flag的时候,一般来说,有两个步骤定义flag。调用解析。正常使用。cobra是一个cli的框架,利用他可以创建强大的现代化的CLI的应用程序并且可以生成命令文件,他包含一下特点支持子命令和命令嵌套。完全的遵从的POSIX的flag。全局和局部的flag。智能建议(app server… did you mean app server?)。自动生成help命令和flag(-h --help)支持命令别名。…
2022-11-30 23:26:01
937
原创 go nil介绍
在 Go 中,为了简单和方便,nil 被设计为一个标识符,可以用来表示某些类型的零值。他不是一个不变的值,而是随着不同类型有不同的类型,在日常的编码中,编译器会根据上下文来推导出。
2022-11-09 00:34:52
1176
原创 go mock使用介绍
go mock使用介绍单元测试需要mock一些东西(比如,RPC的远程调用),这里介绍goMock的使用方式。安装需要安装两个东西gomock的包用来做mock代码库的。仓库:github.com/golang/mock/gomockgo get github.com/golang/mock/gomockgogen工具仓库:github.com/golang/mock/mockgen一个工具,用来帮助生成mock代码的。理论上来说,不用这个工具是可以的,自己用手写。go版
2022-05-29 16:16:50
3980
3
原创 MySQL-InnoDB锁
MySQL-InnoDB锁innoDB中支持下面的几种锁:Shared and Exclusive Locks(共享锁和独占锁)Intention Locks(意向锁)Record Locks(记录锁)Gap Locks(间隙锁)Next-Key LocksInsert Intention Locks(插入意向锁)AUTO-INC Locks(自动提交锁)Predicate Locks for Spatial Indexes(空间索引的谓词判断锁)Shared and Exclusi
2022-05-22 23:57:54
551
1
原创 mysql-InnoDB-mvcc
mysql-InnoDB-mvcc概述mvcc全称为Multi-Version Concurrency Control(多版本并发控制),出现的背景是为了减少锁的使用,事务的隔离级别是读锁和写锁在相互作用的不同结果(下文会详细的介绍),mvcc的出现是为了减少锁的使用,在保证隔离性的前提下提高效率。通过快照(版本)来实现。锁实现隔离性事务存在意义是保证系统的所有的数据都是符合期望的,数据的状态是一致的。数据库的理论中,为了实现这个目标需要从下面的三个点开始入手:原子性(A)隔离性(C)持久性
2022-05-15 20:45:56
496
原创 SpringDataMongoDB-4
SpringDataMongoDB-4Lifecycle EventsSpringData MongoDB提供了几个特殊的事件类型,我们可以继承AbstractMongoEventListener 重写他的方法,或者实现ApplicationListener接受MongoMappingEvent<?>事件,就可以做操作了。由下面的几个事件AfterLoadEventAfterDeleteEventBeforeDeleteEventBeforeConvertEventBefore
2022-05-02 13:53:04
1787
空空如也
如何生成一个真正意义上的随机数
2021-05-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅