- 博客(51)
- 收藏
- 关注
原创 深入理解 AI Agent(1.2):Harness 工程——模型之外的竞争力
回到开头的公式:当模型能力越来越接近、不再是决定性差异时,竞争力就转移到模型之外的工程层。Harness 把「上下文」和「工具」两项细分为上下文管理、工具接口、约束、验证、纠正五项职责,构成一个工程化的最小 ReAct 闭环。模型之外的竞争力:同一个模型,只改 Harness,性能就能暴涨——工程实践才是拉。
2026-10-17 21:54:51
401
原创 LangChain入门---基于DeepSeek-V4-Pro模型
可以先在系统环境变量里填入Key变量名:DEEPSEEK_API_KEY这样变量值:Key值使用@tool@tool"""实时新闻搜索工具"""
2026-10-15 19:09:21
172
原创 深入理解AI Agent(1.1)---现代Agent=LLM+工具+上下文
本文是深入理解 AI Agent 系列的第一篇,围绕核心公式 **Agent = LLM + 上下文 + 工具**展开。文章首先厘清 Agent 与环境(Environment)两个基本概念,以及 Agent 如何通过观察(Observation)与行动(Action)和环境交互;随后分别介绍三大组件 —— 作为大脑的 LLM、作为眼睛的上下文、作为手脚的工具,并讲解模型无状态、静态前缀与轨迹、KV Cache 等关键机制;最后通过 ReAct 循环说明三大组件如何协同运转。为避免停留在概念层面,文章还
2026-10-15 19:08:30
430
3
原创 LangChain 回调机制:给你的 AI 应用装一个“黑匣子”
LangChain 的回调机制,本质上是一套事件驱动的可观测性框架。协议是 LangChain 的on_llm_end等。逻辑是你自己的:记什么、怎么记、上报到哪里,完全由你决定。它就像给你的 AI 应用装了一个“黑匣子”。飞机正常飞的时候,黑匣子默默记录;一旦你想知道发生了什么,打开它,数据都在。所以,下次你想在 LangChain 应用里加日志、算成本、做监控,先别急着改节点代码。想想能不能写个,挂上去。业务代码只管飞,黑匣子的事,交给回调。
2026-10-12 12:56:44
322
原创 别再踩并发数据污染的坑!一文吃透 Python ContextVar 上下文隔离
最后用一张表做个对比,帮你快速判断:表格特性ContextVar隔离粒度线程执行上下文(线程 / 协程)异步协程安全❌ 同线程协程共享数据✅ 每个任务独立上下文同步线程安全✅✅上下文继承❌✅ 子任务自动继承可重置回滚❌✅ 通过 Token 重置。
2026-10-12 12:55:26
269
原创 Agent = LLM + 上下文 + 工具(含观察 / 动作空间、ReAct 循环)
Agent = LLM + 上下文 + 工具(含观察/动作空间、ReAct 循环)Agent = 决策模型 + 记忆/上下文 + 工具接口 + 控制循环 + 环境反馈LLM:负责推理、理解、生成、决策。它是 Agent 的“大脑核心”。上下文:系统提示、用户输入、历史对话、记忆、工具返回结果、当前状态等。它决定 Agent“现在知道什么”。工具:API、函数调用、浏览器、代码执行、数据库、文件系统等。它让 Agent 能“做事”。观察/动作空间。
2026-10-11 21:08:57
135
原创 GraphCallbackHandler:给你的 LangGraph 图引擎装一个“黑匣子”
是 LangGraph 在 LangChain 回调体系上的专项扩展。继承自,所以 LangChain 的所有回调钩子你依然能用。新增和on_resume,专门观察图的中断与恢复。事件对象携带检查点 ID、命名空间、中断载荷,让“图停在哪、为什么停、从哪继续”变得可编程。通过挂载,和 LangChain 回调无缝混用。如果说是给你的 LLM 调用装了一个“通话记录器”,那么就是给你的整张图装了一个“黑匣子”——它记录的不只是一次调用,而是图的生命周期本身。图会中断,会恢复,会流转。
2026-09-27 13:49:21
302
原创 Spring Data JPA 实战:@Query 与 JPQL 从入门到避坑
Query是 Spring Data JPA 中非常强大的工具,而 JPQL 是它默认使用的查询语言。JPQL 是面向对象的查询语言,写实体和属性。@Query让你在 Repository 方法上直接声明 JPQL 或原生 SQL。简单查询用方法名派生,复杂固定查询用@Query,动态条件用 Specification/QueryDSL。掌握@Query和 JPQL,能让你在 Spring Boot 中写出更清晰、更灵活、更可控的数据访问层。
2026-09-23 19:23:03
142
原创 从一段模型选择代码,入门 React 状态管理
名字来源说明useStateReact 提供Hook,用来创建状态models你起的名字当前值setModels你起的名字更新函数,函数本身由 React 创建[]你写的初始值setModels这个名字是你自己起的,但函数实现是 React 提供的,不需要程序员自己写。效果一样。// 组件卸载时清理}, []);不是 React 提供的,也不是 JavaScript 自带的。项目自定义业务函数。名字来源说明asyncJavaScript 语法声明异步函数await。
2026-09-21 18:48:41
230
原创 初识 Protobuf:微服务跨语言通信的一份契约
在微服务项目里,服务往往跨进程、跨机器、跨语言。直接调用接口不现实,只能通过网络传数据。proto 的作用就是:用一份.proto契约,定义数据结构和接口;用protoc生成各语言代码;用 Protobuf 运行时库完成对象和字节流的互转;用 gRPC 等框架完成远程调用。最终实现:一份契约,多语言生成;物理结构不同,逻辑结构一致;跨进程调用,数据不跑偏。
2026-09-19 14:31:30
187
原创 机器学习概念
线性代数提供了“骨架”和“运算载体”,微积分提供了“学习动力”(梯度),概率统计提供了“灵魂”(不确定性与推断)。对于初学者,建议优先掌握矩阵运算、特征值/SVD、梯度与链式法则、概率分布与贝叶斯公式,这足以支撑理解绝大多数经典算法和深度学习基础。
2026-09-02 11:45:52
253
原创 prompts.chat:10-negative-prompting-and-constraints
为以下技术论文撰写摘要。约束:不要使用任何公式不要使用数学符号不要引用参考文献不要评价论文质量只描述论文的核心内容摘要长度:200-250词论文:[论文内容]核心要点负面提示 ≠ 替代正面提示,而是补充正面提示使用4类约束:内容、格式、行为、安全5个核心技巧:明确列表、否定词强化、替代行为、否定列表、边界约束约束要有优先级——P0绝对遵守,P1尽量遵守,P2灵活变通区分硬约束和软约束——关键安全用硬约束,质量优化用软约束避免4个反模式:过度否定、模糊否定、矛盾指令、忽视过度配合。
2026-07-13 14:24:19
305
原创 prompts.chat:08-prompt-chaining-and-multi-step-reasoning
当文档超过上下文窗口时,分段摘要再汇总。将长文档分割成多个逻辑块提示词:对以下文本块生成一段摘要(100-150词)。文本块:${chunk1}(对每个chunk重复)提示词:将以下所有分段摘要汇总成一份完整的文档摘要(300-400词)。摘要1:${summary1}摘要2:${summary2}摘要3:${summary3}...核心要点提示链 = 将复杂任务分解为多步独立提示三大核心模式:流水线、分支与合并、迭代精炼每一步保持单一职责——只做一件事,做好一件事使用结构化中间输出。
2026-07-12 14:27:15
378
原创 prompts.chat:07-few-shot-prompting
少样本提示是指在你的提示词中包含多个示例(通常2-5个),展示你期望的输入和输出模式。模型会根据这些示例推断出规律,然后应用于新的输入。核心要点少样本提示 = 用示例“教”模型理解任务和格式2-5个高质量示例是黄金区间示例要具有代表性、多样性和清晰性少样本 + 角色 + 思维链 = 强大的组合技示例一致性至关重要——所有示例应遵循同一规则覆盖所有可能的类别和边缘情况少样本提示是微调的高性价比替代方案。
2026-07-12 14:21:21
459
原创 prompts.chat:06-chain-of-thought-prompting
思维链提示是一种技术,它鼓励模型在给出最终答案之前,生成一系列中间的推理步骤。与其直接跳到结论,模型会展示它是如何一步步得出答案的。直接回答(Direct Answer)思维链(Chain-of-Thought)方式模型直接输出答案,无推理过程模型逐步展示推理,然后给出答案适用场景简单事实性问题数学、逻辑、多步推理任务可验证性低——无法检查推理是否正确高——每个步骤都可审查准确率复杂任务上较低复杂任务上显著更高幻觉风险较高——可能自信地给出错误答案较低——推理过程暴露了思维中的漏洞【批注】
2026-07-12 14:17:08
422
原创 prompts.chat:05-structured-output
大写单词作为对模型的强信号,强调关键约束或要求。少用才能发挥最大效果——过度使用会削弱其效力。指令含义示例NEVER绝对禁止"NEVER include personal opinions"(绝不包含个人观点)ALWAYS强制要求"ALWAYS cite sources"(始终引用来源)IMPORTANT关键指令"IMPORTANT: Keep responses under 100 words"(重要:回复控制在100词以内)DO NOT强烈禁止。
2026-07-12 14:10:12
714
原创 prompts.chat:04-role-based-prompting
基于角色的提示之所以强大,是因为它能聚焦模型庞大的知识、设定语气和风格的期望、提供隐式上下文,并使输出更加一致。
2026-07-10 17:28:33
365
原创 prompts.chat:03-core-prompting-principles
这些原则构成了后续所有内容的基础。在第二部分中,我们将把它们应用到具体的技术中,这些技术将极大地提升提示词的效果。
2026-07-10 17:19:33
343
原创 prompts.chat:02-anatomy-of-effective-prompt
有效的提示词是构建出来的,而不是碰运气发现的。通过理解和应用这些结构组件,你可以:第一次尝试就获得更好的结果调试不奏效的提示词创建可复用的提示词模板清晰地传达你的意图。
2026-07-10 17:03:07
529
原创 prompts.chat:01-understanding-ai-models
大语言模型(LLMs)是AI系统,它们通过阅读海量文本进行学习。它们能够写作、回答问题,并进行听起来像真人一样的对话。它们被称为“大”(large),是因为它们拥有数十亿个微小的设置(称为参数),这些参数在训练过程中被调整过。【批注】“参数”可以理解为模型内部的“旋钮”,数量越多,模型能捕捉的模式就越复杂。AI语言模型是在文本上训练出来的预测机器。它们在很多方面都表现出色,但也有真正的局限。使用AI的最佳方式是理解它的工作原理,并编写能发挥其优势的提示词。
2026-07-10 17:01:41
406
原创 prompts.chat:00a-preface
Fatih Kadir Akın 是提示工程社区的重要人物,其创建的 “Awesome ChatGPT Prompts” 仓库是 GitHub 上最受欢迎的提示词合集之一。来自世界各地的人们开始添加他们自己的提示词,分享他们的心得,互相帮助。我又试了一个提示词,接着又一个。它是首批关于提示工程(prompt engineering)的书籍之一,旨在记录我在这个领域尚且全新时学到的关于构建有效提示词的一切。
2026-07-10 16:52:42
187
原创 C++网络编程调试实战:从“parse done“到正确显示结果的坎坷之路
在开发一个简单的计算器网络服务时,我们遇到了一个令人困惑的问题:服务器明明处理了请求,客户端却只显示"parse done"而不显示计算结果。通过仔细的日志分析和代码审查,我们最终找到了问题的根源。本文将详细记录这次调试过程,希望能帮助遇到类似问题的开发者。日志是调试的第一工具在关键位置添加详细的日志输出对比正确版本和错误版本的日志差异通过日志行号快速定位问题代码这次调试经历告诉我们,在复杂的网络编程中,问题往往隐藏在最基础的地方。一个sizeof和size()
2026-03-21 16:26:25
350
原创 阿里云ECS部署C++ HTTP服务器:从代码调试到网络配置的完整指南
最近在阿里云ECS上部署一个C++编写的HTTP服务器时,遇到了浏览器访问无响应的问题。经过一番排查,发现问题的根源并非代码本身,而是网络配置。本文将完整记录这次排错过程,希望能帮助遇到类似问题的开发者。安全组是阿里云提供的虚拟防火墙,用于控制ECS实例的入方向和出方向流量。类似于物理服务器的硬件防火墙,是云服务器的第一道安全防线。
2026-03-21 16:21:30
520
原创 一次难忘的BUG调试之旅:当8080端口神秘变成36895
今天在开发一个简单的TCP回显服务器时,遇到了一个让人抓狂的BUG:明明在命令行指定了8080端口,服务器却莫名其妙地监听在36895端口。经过几个小时的调试,终于找到了罪魁祸首。现在把这次经历整理成博客,希望对遇到类似问题的同学有帮助。✅ 端口号必须用htons()转换✅ IP地址用或转换✅ 构造函数初始化列表要用参数,而不是全局变量✅ bind成功后用验证实际端口。
2026-03-10 20:33:40
387
原创 Socket编程踩坑记:为什么accept返回的socket fd总是0?
最近在学习Linux网络编程,跟着视频教程实现一个简单的TCP服务器。代码写完后运行,发现日志中显示的socket文件描述符总是0,而不是预期的4:而视频教程中显示的是。这个差异引起了我的注意,开始了一段有趣的debug之旅。我的类实现如下(简化版):问题定位1. 文件描述符的基础知识在Unix/Linux系统中,文件描述符的分配规律是:0:标准输入(stdin)1:标准输出(stdout)2:标准错误(stderr)3:第一个打开的socket/文件4:第二个打开的socket/文件以
2026-03-10 20:25:50
252
1
原创 LeetCode---基础算法刷题指南
应用场景:链表环检测、数组原地修改经典题目:移动零、复写零、快乐数应用场景:有序数组、回文判断经典题目:两数之和、三数之和、盛水容器应用场景:子串、子数组问题特点:同向移动的双指针应用场景:回文子串特点:从中心向两边扩展边界条件:双指针移动时要确保不越界去重处理:多指针问题中跳过重复元素很重要指针更新顺序:先计算结果再移动指针,避免错过解时间复杂度:双指针通常将 O(n²) 优化为 O(n)
2026-02-01 21:50:45
555
原创 Linux网络编程------网络基础
注:可搭配经典“俄罗斯套娃”或“洋葱图”可视化,外层为下层协议报头,内层为上层数据,箭头标注“封装(发送方,自上而下)”“分用(接收方,自下而上)”,直观呈现数据流动过程。数据在网络中的流动,本质是“封装”与“分用”的过程——发送方自上而下封装,接收方自下而上分用,这是理解网络通信的关键,也是复习时必须吃透的知识点。补充:为什么叫“TCP/IP协议栈”?:负责全网主机定位和路径选择,核心协议是IP协议,核心设备是路由器,用IP地址实现全局寻址,解决“全网寻人”问题——这是互联网的核心层之一。
2026-02-01 16:15:40
697
原创 从 Linux 线程控制到 pthread 库
多线程编程如同一场精心编排的交响乐,每个线程都是一个乐手,共享乐谱(地址空间),但演奏着自己的部分(独立栈和上下文)。记住:理论理解是基础,实践调试是关键,而编写安全高效的并发代码,是我们永恒的追求。线程在进程内部运行,共享进程的绝大部分资源(如地址空间、全局变量、文件描述符表),但每个线程拥有自己独立的栈和硬件上下文(寄存器、程序计数器等)。:即使是分离的线程,如果进程退出,所有线程都会立即终止。:理解 pthread_t 的本质、TCB 的作用、用户级线程库的实现。:这是一个非常关键的问题。
2026-01-23 21:03:08
981
原创 数据库期末复习分享
比较运算符:核心用于单条件筛选,重点掌握BETWEENIS NULL,避免用LIKE判断 NULL;逻辑运算符ANDORNOT用于多条件组合,复杂逻辑记得加()明确优先级;算术运算符:用于数值计算,注意NULL值的处理(IFNULL场景化运算符EXISTS替代NOT IN避 NULL 坑,LIKE做模糊查询。
2026-01-18 21:38:56
815
原创 深入理解Linux线程机制:线程概念,内存管理
是“合租”,大家住同一套房(地址空间),用同一个客厅(全局变量)、同一本通讯录(文件表),但各有各的卧室(栈)和私人用品(寄存器状态)。:理解了“合租”的底层机制,我们就能清晰地区分,在一个进程内,哪些资源是所有线程共享的,哪些是每个线程私有的。命令查看进程和它下面的所有LWP(线程),观察PID(进程ID)和LWP(线程ID)的关系。,大家看的还是同一张地图,只是执行的“路线”(代码位置)和携带的“行李”(寄存器、栈)不同。怪不得线程切换比进程切换快得多,因为它不需要切换最耗时的页表(CR3)。
2026-01-18 21:37:25
803
原创 深入理解Linux信号机制:中断、用户态与内核态
通过这次深入探索,我们看到信号不再是孤立的进程通信机制,而是连接应用层、操作系统内核和硬件中断的桥梁。
2026-01-16 14:23:02
916
原创 [特殊字符] 深入理解Linux信号机制:信号的产生,保存和捕捉
当进程异常终止时,操作系统会将进程的内存状态保存到磁盘文件(core文件),用于后续调试。信号产生:5种方式(键盘、命令、系统调用、硬件异常、软件条件)信号保存:三张表(pending、blocked、action)信号递达:内核态返回用户态时检查,自定义处理有4次状态切换信号处理:使用sigaction,注意可重入性Core Dump:用于事后调试,线上环境通常关闭。
2026-01-16 14:16:39
938
原创 深入理解Linux信号机制:从内核到应用
阻塞的信号不会丢失,只是推迟传递。当信号被解除阻塞时,如果有多个pending的信号,:快速按多次Ctrl+C,handler可能只被调用1-2次,因为常规信号不排队。创建一个守护进程,只能通过特定信号(如SIGUSR1)优雅退出。实现父子进程间的信号通信协议:父进程发送信号,子进程回应。如何实现一个进程不会被意外杀死(守护进程的基础)?:如何创建一个只能被SIGKILL杀死的进程?信号处理函数执行时,同种信号再次到达会怎样?如果进程在睡眠时收到信号,会发生什么?,而实时信号会传递多次。
2026-01-16 14:08:37
626
1
原创 Linux System V IPC机制深度解析:共享内存、消息队列与信号量
在多进程编程中,进程间通信(IPC)是一个核心话题。System V IPC是Unix/Linux系统中经典的进程间通信机制,它包括共享内存、消息队列和信号量。本文将深入探讨这三种IPC机制的原理、使用方法和内核实现。
2026-01-05 20:25:52
787
原创 Linux--System V 共享内存完全指南:从原理到实践
在进程间通信(IPC)的世界里,共享内存以其无可比拟的速度优势脱颖而出。想象两个进程需要频繁交换大量数据——如果每次通信都要经过内核缓冲区的拷贝,效率将大打折扣。让不同进程直接读写同一块物理内存共享内存是IPC工具箱中的"高性能武器"。它打破了进程间的壁垒,让数据可以在不同进程间自由流动。能力越大,责任越大。共享内存的高效性伴随着更复杂的资源管理和同步需求。掌握共享内存不仅是学习一个技术,更是理解操作系统如何平衡隔离与共享这一永恒主题。
2026-01-03 21:48:47
726
1
原创 Linux系统下进程池设计与实现详解
本文详细讲解了如何基于Linux管道通信机制实现一个进程池系统。进程池技术通过预先创建多个子进程并建立管道通信信道,实现了任务的高效派发和执行,避免了频繁创建和销毁进程的开销。进程池技术通过复用已创建的进程,显著提升了系统性能。本课程实现的进程池系统展示了:管道通信在实际项目中的应用主从架构的设计思想多进程编程中的常见问题和解决方案面向对象思想在系统编程中的应用关键收获:理解了管道通信的同步特性和生命周期管理掌握了多进程编程中的文件描述符继承问题学会了如何设计和实现一个简单的进程池系统。
2025-12-26 22:41:14
788
原创 Linux进程间通信与动态链接技术详解
延迟绑定(Lazy Binding)是一种优化技术,在动态链接过程中,不是一次性将所有库函数的地址全部重定位,而是在实际调用某个函数时才进行地址绑定。延迟绑定优化动态链接性能动态链接器在程序启动时完成库加载和重定位进程通信必须通过操作系统提供的共享资源管道机制基于文件系统实现单向进程通信。
2025-12-25 21:04:28
1075
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅