<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[daliucheng的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/daliucheng</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; daliucheng]]></copyright><item><title><![CDATA[上下文工程：LangChain 怎么组织「喂给模型的东西」]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/163865656</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/163865656</guid><author>daliucheng</author><pubDate>Wed, 19 Aug 2026 00:12:41 +0800</pubDate><description><![CDATA[LangChain 给上下文工程下的定义是：用正确的格式，把正确的信息和工具提供给 LLM，让它能完成任务。它不谈模型能力，只谈「调用模型之前，你准备了什么」。模型是固定的黑盒，你能动的只有输入——系统提示词、消息历史、可用工具、返回格式，以及这些东西背后的数据从哪来。上下文工程就是把这部分工程化。在 LangChain v1 里，这件事几乎完全落在middleware和tool 的运行时接口上。所以这篇会先讲清楚 Agent 的执行循环、middleware 挂在哪，再展开两个维度。]]></description><category></category></item><item><title><![CDATA[文本生成的进阶：generateText / streamText 里迟早会撞上的东西]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/163834155</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/163834155</guid><author>daliucheng</author><pubDate>Mon, 17 Aug 2026 22:57:13 +0800</pubDate><description><![CDATA[读懂 Vercel AI SDK》系列第 2 篇。上一篇里已经把和streamText都跑通了。这一篇不重复"这俩函数是干嘛的",而是讲。]]></description><category></category></item><item><title><![CDATA[快速上手：5 分钟跑通第一个 AI SDK 例子]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/163735603</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/163735603</guid><author>daliucheng</author><pubDate>Fri, 14 Aug 2026 00:19:21 +0800</pubDate><description><![CDATA[读懂 Vercel AI SDK》系列第 1 篇。上一篇讲了它是什么、由哪几块组成。这一篇不谈概念,直接:从零跑通第一个例子,再升级成一个能流式对话的聊天应用。]]></description><category></category></item><item><title><![CDATA[AI SDK 总览：一个 TypeScript 工具包,如何把“接大模型“这件事变简单]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/163735535</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/163735535</guid><author>daliucheng</author><pubDate>Fri, 14 Aug 2026 00:10:55 +0800</pubDate><description><![CDATA[技术选型不能只看设计漂亮,还得看有没有人用。周下载量约2000 万+GitHub26k+star、680+贡献者支持100+模型、16+provider(OpenAI、Anthropic、Google、xAI 等)官方支持 React / Next.js / Vue / Svelte / Node.js,Python 版在 beta在 JS/TS 生态里,它基本是做 AI 应用的事实标准。生态成熟还带来一个隐性好处:遇到问题,大概率别人已经踩过、已经有答案。]]></description><category></category></item><item><title><![CDATA[聊聊 Vercel AI SDK 的流式协议：前后端到底是怎么“边想边说“的]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/163707214</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/163707214</guid><author>daliucheng</author><pubDate>Wed, 12 Aug 2026 23:27:23 +0800</pubDate><description><![CDATA[事件类型示例含义source-url引用的外部链接{"type":"source-document","sourceId":"...","mediaType":"file","title":"标题"}引用的文档file文件引用data-*任意结构化自定义数据customprovider 专属内容error{"type":"error","errorText":"出错了"}错误信息data-*data-]]></description><category></category></item><item><title><![CDATA[要做的是个什么项目：一条博客流水线，为什么拆成多个角色]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/163514536</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/163514536</guid><author>daliucheng</author><pubDate>Wed, 05 Aug 2026 23:49:19 +0800</pubDate><description><![CDATA[单独加一个编辑，是因为 AI 写技术文章会犯 prompt 劝不住的错，而且判定权得攥在函数手里，不能交给模型。编排放在哪、谁决定下一步、数据怎么流转，三家给的答案完全不同，得有多个角色才逼得出来。想来想去选了写技术博客，因为它天然就是多角色的：有一个人写，有用户来读。单个 agent 没什么难度：挂几个工具、写段提示词、跑一轮对话，三个框架写出来差不多，看不出区别，跟 QuickStart 是一个问题。一、我们要做的是一条写博客的流水线，一个人写、三个视角审、不通过就修订复审。加审稿不是为了凑角色。]]></description><category></category></item><item><title><![CDATA[三个 Agent 框架，我用同一个项目各实现了一遍]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/163421845</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/163421845</guid><author>daliucheng</author><pubDate>Sun, 02 Aug 2026 23:41:11 +0800</pubDate><description><![CDATA[一句话定位。特点。Standard model interface（统一的模型接口）。一套接口覆盖 chat model、embedding 等，跨各家 provider。换模型只需要很小的代码改动，需求演进时应用仍然是可移植的。Highly configurable harness（高度可配置的 harness）。从这个最小 harness 起步，通过 middleware 增量地加能力——护栏、重试、路由、自定义工具策略，你的场景需要什么就组合什么。]]></description><category></category></item><item><title><![CDATA[LangChain项目工程化：模块拆分、测试驱动开发（TDD）与CI/CD集成实战]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/158664788</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/158664788</guid><author>daliucheng</author><pubDate>Wed, 04 Mar 2026 23:57:00 +0800</pubDate><description><![CDATA[本文通过模块拆分、TDD和CI/CD，将LangChain应用从原型升级为工程化项目。模块化是大型项目的基础，需明确职责边界。例如将和分离，便于替换向量数据库（如从Chroma切换到FAISS）。TDD能显著提升代码质量，但需平衡测试粒度。单元测试应覆盖边界条件（如空文件输入），而集成测试需模拟外部依赖。CI/CD自动化流程可减少人为错误，建议结合监控（如Prometheus）和日志分析（如ELK）。性能权衡：在模块拆分时，过度抽象会增加调用链路长度，影响性能。例如通过接口调用。]]></description><category></category></item><item><title><![CDATA[生产级优化指南：LangChain缓存、流式响应与错误重试机制实操]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/158586401</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/158586401</guid><author>daliucheng</author><pubDate>Mon, 02 Mar 2026 23:57:13 +0800</pubDate><description><![CDATA[本文所有补丁均基于 LangChain 0.3.7 公开 API，未使用_private缓存补丁通过重写实现参数敏感哈希，key 可直接用于 Redis；流式补丁用封装降级逻辑，兼容现有 Chain 结构；重试补丁接管，实现状态码级精准控制。实测 72 小时：P95 延迟从 2.4s → 0.8s，超时率从 12.7% → 0.3%，重试成功率 99.2%。这些不是“锦上添花”，而是生产环境存活的底线能力。]]></description><category></category></item><item><title><![CDATA[LangChain Agent深度实践：编写可自主调用天气、搜索和计算器的智能体]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/158586320</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/158586320</guid><author>daliucheng</author><pubDate>Mon, 02 Mar 2026 23:47:49 +0800</pubDate><description><![CDATA[第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]]></description><category></category></item><item><title><![CDATA[手把手复现：用LangChain搭个「能摸得着」的本地知识库（PDF+Markdown全支持）]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/158586244</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/158586244</guid><author>daliucheng</author><pubDate>Mon, 02 Mar 2026 23:37:59 +0800</pubDate><description><![CDATA[让解析可见直接看到切块效果，不用猜PyMuPDF到底抠出了啥；让向量可验curl调用Ollama API，亲眼确认“Q3”被转成了，不是黑盒；让检索可控返回原文片段，能人工判断“为啥这个chunk没被召回”。真正的工程化，不是堆组件，是让每个环节都经得起质问。下一章（第4篇），我们就把这套能摸得着的系统，打包成FastAPI服务——解决并发请求排队、模型热加载、错误熔断这些生产级问题。字数：1527。]]></description><category></category></item><item><title><![CDATA[从0到1实战：LangChain+Ollama+FastAPI部署可运行的私有AI助手]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/158586226</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/158586226</guid><author>daliucheng</author><pubDate>Mon, 02 Mar 2026 23:36:02 +0800</pubDate><description><![CDATA[实例生命周期 = Uvicorn worker进程存活时间。时，所有session共享同一store字典；时，每个worker持独立storesession_id无法跨进程路由。这是开发期明确的性能权衡：牺牲横向扩展性，换取调试确定性。若需多worker支持，必须引入外部存储（如第6篇SQLite方案），否则session_id在负载均衡下必然丢失。本文交付的是一个可嵌入CI/CD、可被curlfetch直连、每一层失败点均可定位✅ Ollama API调用路径关键路径可控（curl验证→。]]></description><category></category></item><item><title><![CDATA[手把手复现：用LangChain构建本地知识库问答系统（支持PDF/Markdown）]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/158585667</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/158585667</guid><author>daliucheng</author><pubDate>Mon, 02 Mar 2026 22:56:30 +0800</pubDate><description><![CDATA[`retriever.invoke("Q3")`返回空列表 | 对着终端发呆20分钟 | 先`curl http://localhost:11434/api/embeddings -d '{"model":"nomic-embed-text","input":"Q3"}'`，没返回向量说明Ollama没起来 |- **PDF解析选PyMuPDF**：`pypdf`遇到表格直接变乱码，而PyMuPDF能保留“| 里程碑 | 时间 |”这种结构，我第一次看到正确提取的表格时，默默给自己续了杯咖啡；]]></description><category></category></item><item><title><![CDATA[零基础入门LangChain：5分钟搭建你的第一个LLM聊天应用]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/158569576</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/158569576</guid><author>daliucheng</author><pubDate>Mon, 02 Mar 2026 09:35:57 +0800</pubDate><description><![CDATA[《零基础5分钟搭建LLM聊天应用：LangChain避坑指南》 本文记录了作者从零搭建LangChain应用的实战经验，重点解决本地LLM调用中的常见问题。通过Ollama和LangChain组合，实现对话历史管理、类型安全调用和响应解析。关键步骤包括：创建虚拟环境、安装必要依赖（强调langchain-community必须显式安装）、拉取phi3:mini模型，以及10行核心代码实现带上下文的聊天功能。文章特别整理5个典型报错解决方案，如连接失败、导入错误等，并提供验证方法。所有命令均在macOS+Py]]></description><category></category></item><item><title><![CDATA[jetbrain 插件开发初体验]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/144333021</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/144333021</guid><author>daliucheng</author><pubDate>Sun, 08 Dec 2024 22:03:09 +0800</pubDate><description><![CDATA[githubgit-commit-genie 基于AI生成标准化的Commit Message，模板如下并且支持自定义Commit Message Prompt，支持多个LLM（现支持通义系列）首先，需要设置apikey，选择模型（ Open Settings > Tools > Git Commit Genie）之后，可以在Commit的dialog中就可以使用啦欢迎大家来使用它，同时也欢迎大家一块协作，提交代码，支持更多的模型。]]></description><category></category></item><item><title><![CDATA[CDP和Chrome]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/136160807</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/136160807</guid><author>daliucheng</author><pubDate>Sun, 18 Feb 2024 23:45:32 +0800</pubDate><description><![CDATA[WebDriver和是用于自动化浏览器的两个主要协议，大多数的浏览器自动化工具都是基于上述其中之一来实现的。可以通过这两种形式来和浏览器交互，通过代码来控制浏览器，完成浏览器的自动化行为（包括网页加载，爬虫，截图，导出pdf等）。]]></description><category></category></item><item><title><![CDATA[GO-日志分析]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/133052270</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/133052270</guid><author>daliucheng</author><pubDate>Tue, 19 Sep 2023 23:47:06 +0800</pubDate><description><![CDATA[官网：https://github.com/uber-go/zapzap在很多开源的库中使用，比如etcddubbo-go等中。]]></description><category></category></item><item><title><![CDATA[Go 异步任务]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/132178765</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/132178765</guid><author>daliucheng</author><pubDate>Tue, 08 Aug 2023 23:54:29 +0800</pubDate><description><![CDATA[异步任务在开发中很常见，用来做解耦。本文介绍一下异步队列的实现的几个问题，并且结合三方库实现来分析。带着上面的问题，对比https://github.com/golang-queue/queue的实现，说明一下。]]></description><category></category></item><item><title><![CDATA[Dubbogo 详解]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/131885151</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/131885151</guid><author>daliucheng</author><pubDate>Sun, 23 Jul 2023 22:09:10 +0800</pubDate><description><![CDATA[dubbo功能很强大的微服务开发框架，支持多种通信协议，并具有流量治理的功能。dubbo在有了大转变，拥抱了云原生，从哪些方面可以体现呢？]]></description><category></category></item><item><title><![CDATA[GO web开发]]></title><link>https://blog.youkuaiyun.com/daliucheng/article/details/131496117</link><guid>https://blog.youkuaiyun.com/daliucheng/article/details/131496117</guid><author>daliucheng</author><pubDate>Sat, 01 Jul 2023 23:49:26 +0800</pubDate><description><![CDATA[go官方提供了http服务，但它的功能很简单。这里介绍web开发中的一些问题，和web框架（echo）怎么解决这些问题 ，对于具体的echo的使用，可看官网官网：它的特点：关于echo和gin的不同可以看下面的内容对于我来说，有下面几点官网提供了详细的例子和使用说明，具体可以看官网。除此之外，还需要注意未知的错误发生，导致程序发生意外。在开始之前先列举go原生和echo的两种方式。]]></description><category></category></item></channel></rss>