大模型上下文模式实战:滑动窗口+摘要压缩+检索增强的完整指南
1. 先搞清楚一件事context-mode到底解决什么问题如果你这段时间在捣鼓大模型应用不管是写Agent、做RAG还是调对话机器人应该绕不开一个词context-mode也就是上下文模式。这个词听起来玄乎但我更愿意把它理解成“管理模型记忆的方式”。它解决的是一个大模型应用落地时最让人头大的问题——模型记不住事又什么都想往里塞最后窗口爆了、回答飘了、成本炸了。我先说一个我踩过的典型场景。当时我在做一个内部知识库问答机器人一开始的逻辑非常简单用户每问一句就把整段对话历史和检索到的文档片段全部拼在一起发给模型。结果用了不到两周就出问题了对话超过十轮之后模型开始“失忆”明明前面已经确认过的事情后面又问一遍它给了一个完全相反的答案。更离谱的是有一次用户上传了一份上百页的PDF我偷懒直接把全文塞进上下文结果不仅响应慢得离谱模型回答到一半开始胡说八道。这不是模型不行是我根本没设计context-mode。上下文窗口再大也有上限而且模型对信息的注意力不是均匀分布的。你把一堆无关紧要的内容和一个关键结论放在一起模型很有可能会被无关内容带跑偏。换句话说上下文不是“你能塞多少”而是“你怎么让模型在有限的信息里抓住最重要的那部分”。这就是为什么context-mode这个东西值得认真对待。这篇文章我打算用一整套我在实际项目中验证过的方法把上下文模式从概念到落地讲一遍。适合谁看呢正在做AI应用开发、对话系统、Agent编排以及所有被“模型记不住”折磨过的人。我会给出一套可以直接抄的代码逻辑、参数配置和踩坑清单保证你读完能回到项目里马上改进。2. 上下文模式的核心思路先分清“记忆”和“资料”2.1 上下文不是聊天记录的堆叠很多人对上下文的第一个误解就是把上下文等同于对话历史。实际上上下文应该分成两类东西一类是“交互记忆”也就是用户和模型之间说过的话、确认过的偏好、前面步骤的结果另一类是“外部资料”也就是你从文档、数据库、API里检索出来的知识片段。这两类信息的性质完全不同处理方式也不一样。交互记忆的特点是连续性它决定了模型在同一个会话里是不是“精分”。但如果交互记忆过长早期的内容对当前问题的价值会快速衰减。比如用户前面聊了二十轮天气突然问“刚才说的那个项目方案你帮我改一下”那二十轮天气完全属于噪声不仅占token还会干扰模型理解当前意图。外部资料的特点是时效性和准确性它决定了模型的回答是不是“有依据”。但资料不是越多越好尤其是从RAG里检索出来的片段经常带着大量冗余信息。你检索了五段文本真正有用的可能就两句话剩下三段落都是背景铺垫。如果你不做筛选模型就会在这三段落里“迷路”。所以我做context-mode的第一个原则就是分开存储差异化处理。对话历史有对话历史的裁剪方式外部资料有外部资料的压缩策略绝不混在一个数组里无脑拼接。2.2 单一模式的局限为什么不能只靠“加大窗口”我在早期的设计里也想过一个偷懒方案既然模型上下文窗口越来越大那我是不是只要买大窗口的模型、把东西都塞进去就行了答案是不行。这里有两个层面的原因。第一是成本问题。大模型的计费是按token来的你把所有历史和无用资料全部塞进去相当于每一次请求都在为过去的垃圾信息买单。一次两次不觉得等到并发量上来账单会非常难看。我算过一笔账一个每天一万次请求的应用如果平均多塞2000个无用token按中等价位的模型算一个月多花掉的钱足够再开一台高配服务器。第二是注意力问题。Transformer架构里的注意力机制虽然有很强的信息抓取能力但面对超长上下文模型对中段信息的关注度会明显下降这是个早已被验证过的现象。你塞进去的内容越长模型越容易只盯着开头和结尾看中间的关键信息反而变成了“视觉盲区”。这就是为什么有些人即使把相关资料都放进去了模型还是回答说“我没有找到相关信息”。所以context-mode的真正目标不是把上下文调大而是把上下文调准。用最少的信息密度让模型拿到最关键的决策依据。2.3 三种主流管理思路目前业界常见的上下文模式总结下来就三种滑动窗口、摘要压缩、检索增强。滑动窗口好理解就是只保留最近N轮对话更早的直接丢掉适用于快速、简短、任务型对话。摘要压缩则是把早期的对话内容定期交给模型总结成摘要用一段话替代十轮对话适用于长会话、需要连续记忆的场景。检索增强则是把对话历史和外部知识都向量化存储每次根据当前问题实时召回相关内容适用于知识密集型场景。这三个模式不是互斥的我实际落地时通常把它们组合起来用短期对话用滑动窗口中期记忆用摘要压缩长期知识用检索增强。这个组合我后面会详细讲代码实现和参数设置你先在脑子里有个框架就行。3. 方案选型不同业务场景怎么选对context-mode3.1 用“会话深度”和“知识密度”两个维度判断我在给不同的项目做技术选型时习惯用两个维度来判断你该用哪种上下文模式一个是“会话深度”就是单次对话一般会持续多少轮另一个是“知识密度”就是你希望模型回答时依托多少外部资料。如果会话深度低、知识密度也低典型的就是智能客服里的简单问答、闲聊机器人那滑动窗口就够了别做多余的设计。如果会话深度高、但知识密度低比如AI写作助手、长期陪聊角色、项目管理助手那摘要压缩是核心。如果会话深度低但知识密度高比如RAG问答、文档分析、法律咨询那检索增强是你的主菜对话历史反而简单处理就行。而如果会话深度和知识密度都很高比如“一个陪我研究课题的AI助手聊了两个月每次回答都要引用最新文献”那你必须把三种模式全部用上缺一个都会出问题。我见过很多失败的项目就是因为在设计初期没有把这个判断做清楚一上来就奔着复杂方案去结果要么过度设计、要么能力不足。3.2 别被“永远记住”的幻觉带偏还有一个非常容易被忽悠的点很多框架和产品宣传“无限上下文”“永久记忆”听起来很美好但你要冷静下来想想它本质上仍然是某种上下文模式的实现只不过是把压缩和检索做在了你看不见的地方。没有哪个系统真的能做到无损地记住一切所谓的长记忆核心都是“怎么把重要信息留存下来把不重要信息丢出去”。这就牵出一个关键指标信息留存率。我见过一些号称长记忆的对话应用表面上它确实记得你三个月前说过的话但你仔细去问细节它记住的其实是一个大方向上的模糊印象真正的关键数字、关键约束早就丢了。所以说到底你要做的不是在“记忆”上堆料而是设计一套机制去判断哪些信息值得长期保存、哪些信息只需要短期存在、哪些信息根本不用存储。我在自己的项目里会定义一个“信息分级规则”用户明确要求记住的、跨多轮反复出现的、与任务核心目标强相关的属于A级必须进长期摘要一次性的寒暄、临时性的指令、已经完成且不再复用的结果属于C级随滑动窗口丢弃。B级则放在短期缓存里等A级判断条件触发后再提升。这套规则写起来不难但效果立竿见影。3.3 三种模式的组合优先级如果你的需求确实需要组合多种模式我建议你按“检索优先、摘要托底、窗口保底”的思路来排优先级。也就是说每次请求先做检索增强看能不能从外部资料里拿到答案依据如果信息不足以回答问题就从摘要记忆里找相关历史最后才依赖滑动窗口里的近期对话。这个顺序不是为了追求花哨而是为了尽可能降低噪声。外部资料虽然需要筛选但它比对话历史更适合作为“事实依据”对话历史里的信息往往是散落的、隐晦的需要模型做推断而推断就会带来误差。所以优先让模型拿到最硬的事实再用历史记忆做补充模型回答的稳定性会明显提高。4. 实操落地手写一个够用的context-mode管理器4.1 核心数据结构设计我不用那些重型的框架直接自己维护一个Python类来管理上下文状态这个类也是我在多个项目里反复迭代后稳定下来的版本。先看数据结构from typing import List, Dict, Optional from dataclasses import dataclass, field import json dataclass class ContextMessage: role: str # user 或 assistant content: str timestamp: float msg_id: str level: str C # 信息分级A / B / C meta: Dict field(default_factorydict) dataclass class ContextState: session_id: str window_size: int 10 # 滑动窗口保留的最近消息条数 summary_threshold: int 30 # 累计消息数超过该值触发摘要压缩 summary: str # 长期摘要 recent_messages: List[ContextMessage] field(default_factorylist) archive: List[ContextMessage] field(default_factorylist) # 已压缩的原始消息这里的核心不是数据结构有多复杂而是你要有一个明确的地方去存“摘要”有一个明确的地方去存“近期窗口”还有一个地方去存“被压缩掉但可能还要追溯的原文”。很多人做上下文管理失败就是把所有消息放在一个list里然后简单截断导致摘要没地方放、旧数据没地方去最后整个上下文状态变成一锅粥。4.2 滑动窗口与摘要触发的实现下面这段是核心逻辑我把它拆成三个方法新增消息、检查是否需要压缩、执行压缩。class ContextManager: def __init__(self, session_id: str): self.state ContextState(session_idsession_id) def add_message(self, role: str, content: str) - None: msg ContextMessage( rolerole, contentcontent, timestamptime.time(), msg_iduuid4().hex, ) self.state.recent_messages.append(msg) self._maybe_compress() def _maybe_compress(self) - None: # 当超过阈值时把最早的N-10条消息做摘要并归档 recent_count len(self.state.recent_messages) if recent_count self.state.summary_threshold: return # 保留最近10条其余拿去压缩 to_compress self.state.recent_messages[:-self.state.window_size] self.state.recent_messages self.state.recent_messages[-self.state.window_size:] self.state.archive.extend(to_compress) # 压缩回调需要调用LLM self.state.summary self._summarize_messages(to_compress, self.state.summary)这里有几个细节我想强调。第一压缩的触发时机不是“对话轮数”而是“消息条数”。因为一次回复里可能包含多个消息片段按轮数算会有偏差按条数算更稳定。第二保留窗口的大小决定了模型能看到的“近景记忆”。我设置为10条也就是大概5轮对话这个数值不是拍脑袋定的而是测试下来发现少于6条模型经常缺乏足够的上下文来理解复杂任务超过14条中段信息开始被模型忽略。10条是一个相对均衡的取值。第三摘要压缩过程中旧的摘要不能丢掉。你压缩的不是“上一批消息”而是“上一批消息 旧摘要”。这样才能保证摘要持续累积而不只是对最近一批内容做总结。4.3 摘要压缩的提示词设计摘要压缩看起来只是调一次LLM接口但这里有个很多人踩过的坑如果你随便写一句“请总结以上对话”模型会给你输出一段非常笼统的概括比如“用户和助手讨论了项目进展”——这种摘要毫无价值。因为你的目的不是让模型“看懂”发生了什么而是让未来的模型“拿到足够的信息去回答问题”。我实际用的摘要指令模板是这样的你是一个对话记忆压缩器。请阅读以下对话历史提取并保留以下信息用户的明确偏好和约束条件已经确定的事实结论和关键数据未完成的任务和待办事项用户提到的关键实体名称和关系 请用简洁的条目式中文输出不要输出评价性语言不要遗漏已有的旧摘要中的信息。 以下是旧摘要 {old_summary} 以下是新对话 {messages}重点是“条目式输出”和“不遗漏旧摘要”。条目式输出的好处是后续模型读取时能快速检索而不是在一大段流畅文字里找信息保留旧摘要则保证了长期累积的连续性。这个模板你看起来简单但它是从信息的四个维度去约束模型输出的偏好、事实、任务、实体。这四个维度基本覆盖了对话记忆里最核心的信息类型。我建议你不要照抄而是根据你的业务场景增删维度。比如你做的是法律咨询那“关键时间节点”就必须列进去你做的是编程助手那“技术栈限制”和“接口约定”就需要单独开一类。4.4 检索增强的接入逻辑如果你还需要接RAG那context-mode管理器里最好也预留一个检索入口。但注意检索不能是“查到了就塞进去”而是要加一道过滤闸门。我习惯在RAG系统里返回检索结果时附带一个相关度分数。然后设置一个阈值低于阈值的片段直接过滤掉不进入上下文。阈值怎么定我一般先用一个k值做粗召回比如取top 5然后在过滤后的结果里排序再截断到top 3。这里的核心逻辑是让模型聚焦在最相关的2到3个依据上而不是一次给它一堆“可能相关”的资料。检索返回的非连续片段还要做一个拼接处理。很多RAG系统返回的是碎片化的一句话直接拼接会让模型读起来莫名其妙。我通常会在每个片段前面加上“文档来源”标记然后让模型知道这些片段来自不同的文档引导它在回答时做归因。def build_context_with_retrieval(self, query: str) - str: retrieved self.retriever.retrieve(query, top_k5) filtered [r for r in retrieved if r.score 0.7][:2] if not filtered: return self.state.summary \n lines [] for r in filtered: lines.append(f[来自文档{r.doc_name}]\n{r.content}) knowledge \n\n.join(lines) return f{self.state.summary}\n\n可用资料{knowledge}这个函数返回的是一段拼好的“系统级上下文”它会作为前缀放到最终的系统提示词之后、用户消息之前。这样模型在看用户消息之前已经先掌握了长期记忆和外部资料再配合recent_messages里的短期对话三层结构就齐了。5. 参数调优窗口大小、阈值与温度的经验取值5.1 窗口大小如何确定我前面说了窗口设为10但这不是一个通用值。你需要根据你的业务做实验。我建议你做这样一组对比测试在同样的测试集上分别把窗口设为6、8、10、12、16看模型回答准确率的变化。我自己的测试结果是在知识问答场景下窗口超过12之后准确率不升反降但在角色扮演、长对话生成场景下窗口稍微大一点反而更好。原因在于知识问答更依赖外部资料对话历史只是辅助而角色扮演的核心一致性就靠对话历史来维持。所以“窗口大小”本身没有一个标准答案它取决于你希望模型靠什么来获取答案。5.2 摘要压缩的触发阈值与模型选择摘要压缩阈值我建议设在20到40之间。太低会导致频繁压缩不仅增加调用成本而且容易在信息尚不完整时就做总结产生错误记忆太高会导致单次压缩的消息条数过多摘要质量下降因为模型面对几十条消息做总结和面对十几条消息做总结效果差距很大。压缩用的模型我建议和主对话用的模型分开。主对话可以用能力最强的旗舰模型但压缩模型选择一个中等偏小的模型就够用了。压缩任务对推理深度要求不高但对信息提取的完整性有一定要求。我实测下来用同系列的中等模型做压缩质量几乎无损成本却省了70%以上。这里有个小技巧压缩模型的temperature设置为0.2以下确保输出稳定尽量降低“脑补”风险。5.3 检索阈值与分块大小检索相关度阈值是一个需要反复试的参数。我见过很多人把阈值设为0.8以上结果经常返回空结果模型只能靠猜也有人把它降到0.5结果模型被大量无关内容干扰。7是一个非常常用的经验阈值但我建议你根据你的embedding模型做校准最好的方法是在你自己的知识库上抽几百个问题标注“相关”和“不相关”然后画一条阈值曲线看哪个点的F1值最高。另外就是分块大小。我习惯的文本分块策略是先按章节或语义段落切分然后控制每个块在300到500个字之间。太短了信息不完整模型没法回答太长了噪声多而且容易命中多个不同主题的内容。分块时还要保留一个小重叠区一般是50到100个字防止关键信息正好被截断在块边界上。6. 常见问题与排查技巧实录6.1 模型“失忆”但代码逻辑没错这类问题排查起来最气人你检查了上下文管理器消息确实都传过去了模型却像没见过一样。这种情况我遇到过三次两次都是同一个原因摘要压缩时旧的摘要被覆盖了。很多人在实现_summarize_messages时只把新消息传给模型把旧摘要漏掉导致摘要每次“从零开始”聊得越久丢得越多。每次压缩后你可以打印一次当前摘要的长度和内容概要如果发现摘要长度几乎不变、内容固定那就说明旧摘要没有参与压缩。这个问题的修复很简单我在上面的提示词模板里已经给了把old_summary作为变量传进去。另外一个“失忆”的原因是你把上下文拼接顺序放反了。模型对上下文先后位置极为敏感如果你把最新消息放在历史消息之前模型会认为最新这条是更早发生的记忆顺序整个颠倒。我在项目里专门写过一个单元测试用来验证“三条消息拼接后模型能不能正确复述顺序”这个测试能挡住80%的上下文拼装错误。6.2 摘要失真模型总结出“看似正确但细节全错”的内容摘要失真是一个隐蔽性极高的问题。它的表面症状是长时间对话后模型开始张冠李戴把A项目的结论安到B项目上或者把用户之前说过的数字“3%”变成了“30%”。出现这种问题根源多半是摘要压缩时过于频密单次压缩的对话量过大或者摘要提示词里没有强调“保留准确数字”。我排查这类问题时的经验是给摘要里的每个关键数字加上“精确引用”的要求并且让压缩模型对不确定的内容打上标记。比如提示词里加一句“如果某项信息无法确认请标记为[待确认]不要猜测具体数值”。这一招能明显减少数字类失真。6.3 检索结果不理想是嵌入模型的问题还是阈值的问题有时候你发现模型拿着检索到的资料却回答得文不对题。这时候你要先做个AB测试把检索出来的片段直接打印出来人工读一遍看看片段本身是不是真的能回答问题。如果片段本身驴唇不对马嘴那就是检索端的问题你去调上下文管理器是没用的。检索端的问题又分两类一是embedding模型和你的领域文本不匹配比如拿通用embedding去处理法律文书、医疗术语效果会很差二是分块策略有问题长句被从中间截断语义不完整。解决的办法是换一个领域适配的embedding模型或者调整分块大小。关联的上下文管理器逻辑反而最简单只要保证过滤阈值合理把检索结果交给模型对应位置就行。6.4 一个容易忽视的隐形坑摘要压缩的链路延迟这个坑不常发生但一发生就让人抓狂。当你把摘要压缩设计成一个同步调用而模型响应时间又不稳定时用户的下一轮请求可能会卡在压缩环节出现“消息发出去十几秒才看到回复”的现象。我一开始没注意直到线上反馈变多才意识到。解决办法很简单把压缩做成异步任务或者在收到新消息后先立即回复用户后台再触发下一次压缩。还有一种做法是给压缩任务加一个超时熔断如果5秒内没返回就先把最近窗口的消息原样传递保证可用性丢了摘要总比整个服务卡死强。这个取舍你要提前想清楚别等出问题了再救火。7. 写在最后的实操心得做了这多个AI应用项目踩过上下文相关的坑少说也有两位数。我最大的体会是上下文模式不是一个“调参”问题而是一个“架构”问题。你先把消息分类、存储、压缩、检索这套链路设计清楚后面再去调窗口大小、摘要阈值才有意义。否则你参数调得再漂亮也只是在垃圾进垃圾出的基础上玩花样。还有一个经验是永远要对上下文内容做可视化调试。我自己的项目里一直保留一个“debug上下文”开关开启时能把每次请求发送给模型的实际上下文打印出来。这样做的好处是当模型行为异常时你能迅速判断是上下文丢了信息还是拼装顺序错了还是检索结果太差。有了这个能力调试效率至少翻一倍。再分享一个压箱底的建议上下文模式的优化要跟着真实流量走。你测试集上的准确率数据只能代表过去上线之后观察哪些对话出现了重复提问、哪些回答偏离了意图再把这些问题场景加入测试集重新调参。模型的能力在发展业务的数据在变化上下文策略也需要持续迭代这是我目前看到的所有优秀AI应用最重要的一条护城河。

相关新闻

claude-mem 记忆层实战:为 Claude 构建持久化记忆与向量检索系统

claude-mem 记忆层实战:为 Claude 构建持久化记忆与向量检索系统

1. 项目概述与核心定位第一次看到claude-mem这个名字,我的直觉是:这应该是一个围绕 Claude 生态做“记忆层”的项目。事实也确实如此。claude-mem本质上是一个为 Claude 这类大语言模型提供持久化记忆能力的中间层工具。它要解决的核心问题非常明确&…

2026/10/8 23:53:43 阅读更多 →
Codex桌面版“无法加载组织设置”的排查与修复指南

Codex桌面版“无法加载组织设置”的排查与修复指南

如果你平时把 Codex 桌面版当主力编码工具,大概率经历过这种让人血压瞬间拉满的时刻:提示有新版本,点了更新,重启应用,结果窗口倒是开了,却卡在同步状态上,最后弹出一句「无法加载组织设置」&am…

2026/10/8 23:53:43 阅读更多 →
RL-10-TD算法-ActorCritic03-连续动作控制01-DPG-赵:DPG07【DPG的Critic为什么会训练失败,Target Network 为什么能让 Critic 更稳定】

RL-10-TD算法-ActorCritic03-连续动作控制01-DPG-赵:DPG07【DPG的Critic为什么会训练失败,Target Network 为什么能让 Critic 更稳定】

第九章 Critic 为什么会训练失败 1 Moving Target 1.1 问题来源 TD Target 本身依赖网络估计: y=r+γQwˉ(s′,μθˉ(s′)) y=r+\gamma Q_{\bar w}(s,\mu_{\bar\theta}(s)) y=

2026/10/8 23:52:43 阅读更多 →

最新新闻

Agent-Reach:LLM API智能路由与成本可控调度中枢

Agent-Reach:LLM API智能路由与成本可控调度中枢

1. 项目概述:Agent-Reach 是什么?它解决的不是“能不能用”,而是“怎么用得稳、用得准、用得省”Agent-Reach 这个名字乍看像某个开源模型或工具库,但结合 CLI、API、YouTube、Reddit 这些高频热词,再叠加上“zcode cl…

2026/10/9 6:34:27 阅读更多 →
HTML5移动端拍照上传全链路实战:从getUserMedia到EXIF修正与断网续传

HTML5移动端拍照上传全链路实战:从getUserMedia到EXIF修正与断网续传

简介:本资源是一套面向Web前端开发者与全栈初学者的HTML5移动端拍照上传实战方案,聚焦在普通HTTP环境下调用手机摄像头实时拍照并上传至PHP后台的核心功能实现。资源共22个文件,包含1个可直接运行的index.html主页面、1个uploadfile.php服务端…

2026/10/9 6:34:27 阅读更多 →
Jetpack Compose与HarmonyOS ArkUI状态管理对比:从remember到@State的迁移指南

Jetpack Compose与HarmonyOS ArkUI状态管理对比:从remember到@State的迁移指南

我去年接了一个双端项目——既有Jetpack Compose写的Android端,又有HarmonyOS的ArkUI版本。一开始我想着:"都是声明式编程,Compose和ArkUI应该差不多。"结果真正写起来才发现,UI描述方式的相似只是表象,单是…

2026/10/9 6:34:27 阅读更多 →
基于SpringBoot+Vue的二手车交易系统:从业务拆解到部署实践

基于SpringBoot+Vue的二手车交易系统:从业务拆解到部署实践

做一个二手车交易系统,听上去像是个老掉牙的练手项目,但真把它拆开来看,你会发现它几乎把一个商业项目该有的技术问题都覆盖了一遍。基于SpringBootVue的二手车交易管理系统源码,配上MyBatis和MySQL,这套组合不是什么花…

2026/10/9 6:34:27 阅读更多 →
带平衡约束的最短路:从ICPC Ballance题看帕累托状态压缩

带平衡约束的最短路:从ICPC Ballance题看帕累托状态压缩

题目名是Grand Prix of Ballance,从ICPC 2024成都站出来的。我第一眼看到这个标题的时候,第一反应是“Ballance”这个单词拼错了还是故意玩梗,后面在大屏幕上看到题目背景里那个悬浮轨道和滚动的小球,才确认就是那个经典的平衡球游…

2026/10/9 6:34:27 阅读更多 →
Vue 3 网络请求封装与 Element Plus 组件库选型实战指南

Vue 3 网络请求封装与 Element Plus 组件库选型实战指南

1. 项目到了第10节,网络请求这关必须打通学 Vue.js 看到“网络请求”这一节,很多人的第一反应是“不就是调个接口嘛”。但真到了实际项目里你会发现,网络请求层的设计决定了你后面写页面是舒服还是遭罪。这一节的内容说白了就两件事&#xff…

2026/10/9 6:33:26 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →