今年有不少做 Agent 的同学开始把注意力从模型能力转到记忆模块上尤其是当 Codex 这类工具型 Agent 想要真正落地到业务里的时候记忆怎么接、存在哪、怎么读就成了绕不开的坎。我看了一圈社区里的讨论又结合自己读源码和做接入的体会挑了一个很有代表性的组合来梳理TencentDB 作为底层存储、Agent Memory 作为记忆抽象层、Codex 作为前端交互大脑。标题里那句“硬冲突”不是夸张接入过程中确实有几个设计层面的矛盾不读源码很难定位读了源码又会发现这些问题不是靠调参能解决的。这篇文章我会直接从架构角度切入把三者的边界画清楚再基于源码阅读把冲突点一个个拆开。适合三类人看一是正在给 Agent 加记忆能力的后端开发二是做 LLM 应用框架选型的技术负责人三是想理解 Codex 工具调用协议和持久化存储之间差异的同学们。我会尽量把每个冲突都落在具体的代码路径和数据结构上尽量让结论可以复现、可以参考。1. 先搞清楚三个主角TencentDB、Agent Memory 与 Codex 的定位1.1 它们是同一个层面的东西吗很多人看到这个标题的第一反应是TencentDB 不是数据库吗Agent Memory 不是一个模块吗Codex 不是一个对话模型吗这三个怎么放到一起聊其实它们确实不在同一个层面但这种跨层面的组合恰恰是现在 Agent 应用最常见的真实形态。TencentDB 是存储底座解决的是数据可靠性、持久化、事务、并发控制这些数据库层面的问题。Agent Memory 是应用层抽象解决的是“Agent 怎么记住上下文、怎么检索历史、怎么管理记忆生命周期”的问题。Codex 是前端交互与推理引擎解决的是“用户说什么、模型怎么理解、怎么调用工具、怎么生成答复”的问题。三者正好构成了一个完整的数据链路Codex 产生交互意图 - Agent Memory 决定哪些信息值得记 - TencentDB 负责把记忆真正落盘。这里有一个容易混淆的点Agent Memory 不等于数据库表它通常包含向量索引、短期工作记忆、长期事实记忆、记忆衰减策略等逻辑。TencentDB 只是这个逻辑的最终存储载体之一。读源码的时候如果只盯着一端看很容易得出错误的结论。我见过有人把 Agent Memory 直接当成一张 KV 表来设计结果上下文语义全丢了也见过有人把所有记忆都塞进一个大字段里结果 Codex 的工具调用响应慢到没法用。1.2 Codex 在这个架构里承担什么角色Codex 从模型角度看是一个代码生成模型但从 Agent 架构角度看它更像一个“会调用工具的对话调度器”。它的工作方式是接收用户消息在内部推理出需要调用的工具执行工具后把结果当成新的上下文继续生成。这段链路里有一个被很多人忽略的事实Codex 本身是无状态的。每一次请求发出后服务端拿到的是完整的会话历史模型在推理时把所有历史都放进上下文窗口。也就是说Codex 的“记忆”完全依赖外部系统把历史数据准备好喂给它。谁准备历史谁决定哪些历史要保留这就是 Agent Memory 层的职责。所以当我们在说“Codex 接记忆”的时候本质上是在说“怎么让 Codex 每一次请求都能拿到合理的记忆片段同时把新产生的信息写回持久化存储”。TencentDB 在这个环节里作为存储后端提供 ACID 保证和 SQL 查询能力让记忆的写入和读取不至于变成散装文件。2. 从源码看 Agent Memory 的存储设计逻辑2.1 记忆不是缓存而是有时序的长期状态读源码时我第一次意识到的问题就是很多人把记忆设计成了缓存。缓存的特点是过期即丢、只认 key、不关心顺序。但 Agent 的记忆比缓存复杂得多它必须保留时序、来源、置信度、关联关系。比如用户昨天说过“我更喜欢简洁的回答”今天又说“这个方案很好”这两条记忆之间可能有关联也可能互相覆盖。如果只记一条 KV这种动态变化就丢了。在 TencentDB 里设计记忆表时至少要覆盖这几个维度记忆主体用户、会话、任务、记忆内容的类型偏好、事实、临时状态、时间戳、来源消息 ID、引用计数或者权重。有了这些字段Agent Memory 才能做召回、衰减、冲突消解。单纯把记忆做成 Redis String 或者 JSON 大字段的方案在短期 demo 里能用一旦进入真实业务就会发现无法回答“为什么模型会记住这个却忘了那个”。我在一个项目里踩过这个坑最初为了快用一张agent_memory(key, value)表存所有记忆上线两天就发现模型经常拿旧偏好覆盖新偏好原因就是没有版本号和更新时间读取时无法判断哪个记忆是新的。后来改成带created_at、updated_at、source_turn_id的明细表才把问题解决。2.2 一张典型的记忆表结构长什么样我梳理过一个相对通用的设计建在 TencentDB 上既支持 SQL 查询也方便接向量检索CREATE TABLE agent_memory ( memory_id BIGINT AUTO_INCREMENT PRIMARY KEY, agent_id VARCHAR(64) NOT NULL, session_id VARCHAR(64) NOT NULL, memory_type TINYINT NOT NULL, -- 1偏好 2事实 3临时状态 content TEXT NOT NULL, embedding_id VARCHAR(128), -- 指向向量索引 source_msg_id VARCHAR(64), ref_count INT DEFAULT 1, confidence FLOAT DEFAULT 1.0, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, expire_at DATETIME, is_deleted TINYINT DEFAULT 0, KEY idx_session_time (session_id, created_at), KEY idx_agent_type (agent_id, memory_type) );这张表的设计思路是把记忆从“一段文本”升级为“带元数据的记录”。数据库只负责存和查Agent Memory 负责把记录组装成模型能理解的提示词片段。这个拆分很重要因为 Codex 需要的是“能放进上下文窗口的文本”而 TencentDB 存储的是“结构化的事实”两者之间存在一个转换层。你可能会问为什么不用纯向量数据库向量检索擅长找语义相似但不擅长精确过滤和聚合比如“找出这个 session 最近 10 条偏好变更”单靠向量是做不到的。TencentDB 加向量辅助索引的组合既能做条件过滤也能做语义召回是我目前比较推荐的方案。2.3 为什么选择 TencentDB 而不是普通 Redis先声明这里不是做数据库选型广告只是分析架构取舍。Redis 适合放短期工作记忆和热数据速度快但做复杂查询、事务回滚、历史追溯都比较吃力。Agent Memory 里有一部分数据是需要长期保存且可能跨 session 复用的这部分必须放在有持久化和事务能力的地方。TencentDB 的价值在于它可以承载记忆的全生命周期从写入、更新、软删除到分析。实际接入中我还用了它的 binlog 能力做记忆变更的异步通知这样当下游的向量索引需要同步更新时不需要在业务代码里手动埋点。这个设计在源码层面看起来很轻但解决了一个非常实际的问题Agent Memory 的数据一致性。另外TencentDB 的 SQL 能力让调试变得非常直观。我可以在出问题的时候直接跑一句SELECT * FROM agent_memory WHERE session_id? ORDER BY created_at DESC LIMIT 50看看模型到底拿到了哪些记忆这种可观测性是纯 KV 存储很难给的。3. 读源码视角Codex 的会话模型与记忆接口约定3.1 Codex 的“上下文窗口即记忆”模型我读 Codex 相关源码和协议文档时最强烈的感受就是它把记忆问题极致简化了一切都是消息。系统提示词是消息用户输入是消息工具返回结果是消息最终回答也是消息。整个对话过程就是消息列表不断增长的过程。这个模型对上层很友好因为它统一了所有输入。但对记忆系统来说它带来了一个非常棘手的问题消息列表长度和上下文窗口容量之间的矛盾。窗口是有限的而对话历史会无限增长。于是就必须有裁剪、压缩、摘要、外部检索这一整套机制。Codex 自己不解决这个问题它把注意力都放在“给定一段历史如何推理和调用工具”上。所以当我们说 Codex 有记忆能力时准确说法是Codex 有能力处理记忆系统喂给它的历史片段。这段历史的组织方式决定了模型对用户意图的理解质量。如果你把过期记忆和最新指令混在一起模型很容易被错误信息误导。这就像让一个人同时看三份矛盾的需求文档他只能在不确定中选择一种理解。3.2 工具调用是记忆写入的关键通道Codex 在推理过程中会决定是否调用工具。工具调用请求里有明确的参数结构比如工具名、输入参数等。工具执行后返回结果模型再基于结果继续生成。这个机制给了记忆系统一个天然的写入点工具调用的输入和输出都可以被记录为“记忆事件”。比如用户问“帮我看看最近的订单情况”Codex 调用查询工具工具返回订单列表Agent Memory 就可以把这个查询动作和结果摘要存储下来。当下次用户问“我上个月的订单有哪些”时记忆系统就能直接复用之前的查询结果而不需要让 Codex 从头推理。这里有个关键细节工具调用的参数往往是结构化的Codex 生成的参数遵循一定的 JSON Schema。这比自然语言消息更容易抽取关键实体。我在实现记忆抽取时就是从工具调用参数里先提取高频实体再用 LLM 做语义归纳准确率比直接解析用户消息高很多。如果你也在做 Codex 的接入建议优先利用工具调用记录这一层数据它是结构化程度最高的“记忆金矿”。3.3 Codex 从不开持久连接这决定了记忆的交互方式一个容易被忽略的架构事实是Codex 与传统客户端-服务器长连接模型完全不同。每一次对话请求都是独立的服务端不会主动记住上一个请求的“连接状态”。状态全部外置要么放在调用方的业务系统里要么放在 Agent Memory 里。这直接导致了一个设计约束记忆必须在请求之间被显式加载和保存。你不能依赖任何“连接内的隐式上下文”。每次收到用户消息时调用方都要先从 TencentDB 加载相关记忆组装成消息列表再交给 CodexCodex 完成推理和工具调用后调用方又要负责把新增信息写回 TencentDB。这个约束初看很麻烦但反过来想它反而让记忆系统变得可以插拔。因为状态不在 Codex 内部所以你可以随时调整记忆策略——改检索逻辑、改衰减参数、改提示词组织方式都不需要动模型本身。这是一把双刃剑灵活但所有责任都在你身上。4. 硬冲突逐个拆四个绕不开的架构矛盾4.1 冲突一请求-响应模型与长期会话状态模型Codex 是典型的请求-响应模型每次请求拿到完整上下文模型推理完就结束了。Agent Memory 是长期会话状态模型强调跨请求的状态连续性。这两个模型在“边界”的定义上有根本分歧。举一个具体场景用户在一个 session 里进行了 5 轮对话每一轮 Codex 都生成了工具调用。第一轮之后用户改主意了说“刚才那个查询不要了”。对 Codex 来说这就是普通的对话轮次模型可以在后续推理中自行判断忽略之前的结果。但 Agent Memory 如果已经把第一轮的工具结果写入了长期存储就会出现“已删除信息被后续读取”的问题。要解决这个问题记忆系统需要引入“逻辑删除”“版本作废”“来源消息依赖”这类机制。不能简单地把所有对话历史都变成永久记忆。我在设计时给每一条记忆增加了is_deleted和superseded_by字段当检测到用户撤回或修正意图时就把旧记忆标记为失效而不是物理删除因为 Codex 生成过程中可能还要引用它。源码里这个矛盾体现在数据表设计上如果你按“一次对话一个记录”的方式存储Session 状态的连续性就没有载体如果你按“逐条记忆事件”的方式存储Codex 又需要额外逻辑把事件重组成连续上下文。两头都要照顾复杂度就在这里。4.2 冲突二上下文窗口截断与无限历史存储Codex 的上下文窗口是有限资源哪怕实际部署时窗口已经比早期模型大很多仍然不能装下全部历史。Agent Memory 的理想目标是保存尽可能完整的历史不丢失重要信息。这两个方向天然矛盾。在源码里我看到很多人用“滑动窗口”来做截断只保留最近 N 条消息。这个方案实现简单但牺牲严重用户早期表达的偏好、关键决策依据、跨 session 的长周期事实都会被丢掉。更合理的方式是分层记忆窗口内放近期对话中期记忆做摘要长期记忆只保留经过提炼的结构化事实。TencentDB 里的实现思路是给记忆表加一个memory_level字段短期记忆、中期摘要、长期事实分表或者分分区存储。读取时按优先级组装先把最多不超过窗口大小三分之一的高优记忆放进去其余空间留给当前对话。这个比例是我多次调出来的经验值不是理论最优但比“全塞进去”靠谱得多。这里我想强调一个原则不要让 Codex 自己去处理摘要和压缩它擅长的是基于已有上下文做推理不是替你决定哪些记忆该保留。记忆的筛选和提炼应该在 Agent Memory 层完成Codex 只消费结果。4.3 冲突三工具调用的即时性与数据库事务边界Codex 在一次推理中可能连续调用多个工具这些调用之间有依赖关系。比如先创建订单再查询订单状态最后生成确认消息。Agent Memory 需要记录每一步但数据库事务通常要求原子性要么全成功要么全失败。这个冲突在并发环境下特别明显。如果多个 Codex 实例同时对一个 session 做记忆写入数据库层就面临锁定、隔离级别、死锁等一系列问题。如果用一个大事务包住所有工具调用响应延迟会上升而且一旦中间某步失败前面已经产生的记忆也会回滚这在语义上反而是错的——用户能看到中间结果记忆却消失了。我的做法是放弃“跨工具调用大事务”改为“单条记忆事件事务 事件补偿”。每个工具调用完成后立即写入对应的记忆记录提交独立事务这样即使后续调用失败已完成的记忆也不会丢失。对于需要整体一致性的场景用source_trace_id把相关事件串起来在读取时按 trace 做聚合必要时对未完成的 trace 做标记。这种“小事务 事件溯源”的模式从代码上看琐碎却真实地贴合 Agent 的交互特征。源码阅读里如果看到有人试图用一个大锁来保证记忆一致性基本可以判断那是从传统的服务端开发习惯直接搬过来的不太适合 Agent 场景。4.4 冲突四多 Session 并行写入的隐式覆盖Agent 应用很少只有一个 session 在跑。一个用户可能同时开着两个会话一个聊文档写作一个聊代码开发。两个 session 如果都往同一份用户记忆里写后写的很可能覆盖先写的。这在数据库层面表现为 UPDATE 丢失更新在 Agent 语义层面表现为“用户记忆被串台”。我在源码里见过最典型的错误写法是直接UPDATE agent_memory SET content ? WHERE user_id ? AND memory_type 1。这句话在执行时没有任何版本校验两个并行请求发出的更新会以最后提交者为准先提交的更新被静默丢弃。解决思路是引入乐观锁版本号。每条记忆记录带上version字段更新时执行UPDATE agent_memory SET content ?, version version 1 WHERE memory_id ? AND version ?。如果受影响行数为 0说明版本冲突由上层决定是合并还是丢弃。这个方法不算新颖但很多 Agent 记忆实现恰恰缺了这一层因为大多数讨论都聚焦在提示词工程和向量检索上底层一致性问题反而被忽略了。另外session 之间的记忆隔离也很关键。我的经验是全局偏好和会话临时状态必须分开存储。全局偏好可以跨 session 读取但写入时需要更严格的冲突检测会话临时状态只允许本 session 读写从根源上避免污染。5. 我的接入方案把“冲突”变成“可管理的边界”5.1 加一层 Memory Service 作为中间层不要直连数据库读完这些冲突点之后我做的第一个架构决策就是不要让 Codex 的调用链路直接操作 TencentDB而是加一个独立的 Memory Service。这个服务负责所有记忆的读写、校验、组装和版本管理。Codex 侧只暴露两个工具memory_read和memory_write。这个中间层的价值是隔离变化。Codex 的协议如果升级了比如工具调用格式变化我只需要改 Memory Service 的协议适配层存储端的表结构可以保持稳定。反过来如果我调整 TencentDB 的 schema比如增加向量字段也不必动 Codex 接入代码。这种边界在源码维护时期救了我很多次因为 Agent 场景的迭代速度太快了任何一个直接耦合都会变成后续重构的痛点。Memory Service 内部还可以做很多事情权限校验、记忆脱敏、写入限流、异常熔断。这些如果散落在业务代码里根本没法统一管理。5.2 写入侧异步合并、幂等键和版本号三件套写入路径我设计成三步。第一步工具调用完成后memory_write接收结构化参数生成带唯一幂等键的事件对象。第二步事件先发到内存队列快速返回给 Codex让推理流程不被阻塞。第三步后台消费者从队列取事件做语义去重然后写入 TencentDB。这里最关键的是幂等键设计。Codex 在重试时可能会重复提交同一个工具结果如果没有幂等键同一段记忆可能被插入两次。我用session_id trace_id message_id组合作为幂等键数据库层建唯一索引。重复写入时直接命中冲突不做二次插入。版本号机制前面已经说过它主要解决更新冲突。写入侧根据业务语义决定是新增还是更新偏好类记忆走更新路径带版本校验事实类记忆走新增路径保留历史轨迹。这套规则看起来简单但覆盖了绝大多数记忆写入场景。5.3 读取侧相关性裁剪 时间衰减 语义检索读取路径完全围绕“给 Codex 组装一段合适的上下文”来设计。每次请求进来Memory Service 先根据 session_id 取出候选记忆然后做三件事第一按时间和来源过滤把expire_at已过期的、is_deleted1的排除掉第二对短期记忆做相关性排序优先选择与当前用户消息关键词匹配的记录第三对长期事实做向量检索把最相关的 top K 个结果加入上下文。这个流程能解决“窗口截断与无限历史”的冲突因为它不是简单截断而是动态选择。组装后的上下文我会做一个长度校验如果超过 Codex 窗口的预算再按记忆优先级从低到高淘汰。淘汰时记录日志方便事后复盘看看是不是有重要记忆被错误地丢弃了。我做了一个小优化很值得分享给每条记忆加一个last_access_at字段读取时更新。这看起来多了一次写操作但它能支持“常用记忆优先保留”的策略让热记忆始终留在窗口内冷记忆自然下沉到 TencentDB 深处。5.4 Session 建模显式 conversation_id 与 turn_id会话状态的连续性问题是基础必须在建模阶段解决。我统一用conversation_id标识一个逻辑会话用turn_id标识会话内的一轮交互。Codex 的消息列表在传输层可能表现为一个带 id 的数组但在 Agent Memory 里必须把它们投影成带有层级关系的数据。这种做法让“请求-响应模型”和“会话状态模型”之间的转换变得显式而可控。每次请求里我会从上一次的turn_id继续往下找增量消息组装成“上一次摘要 增量消息”的结构既保留了长期状态又不让 Codex 每次都重复消化全部历史。我在实践里还发现显式的 turn_id 对调试特别友好。当模型生成结果不符合预期时我可以用turn_id精确回放当时的记忆快照看是记忆错了还是模型推理错了。这一步几乎成了我排查 Agent 问题的默认起点。6. 排查实录记忆接入现场最常见的问题6.1 症状一记忆写入后下一次对话完全读不到这类现象最常见的原因是写入和读取用的 session_id 不一致。Codex 内部有自己会生成会话标识但如果业务方没有把上层用户的 conversation_id 映射进去两个 id 就会错位。排查时先看 TencentDB 日志确认写入时的 session_id 和读取时是否一致再检查请求转发过程中是否被网关改造过请求头。还有一个隐蔽原因写入走的是异步队列Codex 下一次请求到来时后台消费者还没完成落库。只要在响应里加上“记忆写入状态”标识并在下一次读取前做一次状态确认就能解决。我加了一个简单的机制Memory Service 在写入后生成一个 ack tokenCodex 下一次带 token 发起请求时服务端先阻塞等待对应事件落库完成。6.2 症状二上下文爆炸Codex 响应越来越慢这是很多人都会遇到的性能滑坡。根本原因是读取侧没有做严格的长度预算每次把查到的记忆全量塞进去窗口越用越满。排查方法很简单把每次请求发送给 Codex 的上下文长度记录下来画一条趋势线。如果持续上涨说明记忆中混入了大量重复或低价值内容。我在源码里找到过一个具体元凶记忆摘要没有去重逻辑。系统每轮都会生成一份摘要并存下来读取时又把所有版本的摘要都带上导致上下文被各种相似的摘要占满。修复方式是只读取最新一份摘要其余版本只做长期存档不进入 Codex 上下文。另外可以开启 Codex 侧的 token 计数日志精确看到每条消息当前占用的 token 数再反向优化组装策略。6.3 症状三模型引用了过期记忆回答明显过时这种问题的根源通常是“记忆有效期的判定逻辑缺失”。我没有给记忆设置默认过期时间结果两天前的临时状态被当成最新事实读出来。修复方案是分类型设置生命周期临时状态默认 30 分钟过期偏好类记忆一周不更新就降权事实类记忆会做置信度衰减。还可以利用 Codex 的一个特性来兜底在系统提示词里明确注明“如果记忆内容与当前对话冲突以当前对话为准”。这句提示虽然简单却能显著减少模型被历史错误引导的概率。这属于提示词层面的代价很小的防御我建议一定要加上。6.4 症状四并行任务互相污染记忆多 session 并行时的记忆串台排查起来比前几个都麻烦因为问题往往是间歇性的。我先看写入日志确认写入记录里的session_id是否匹配再检查 Memory Service 是否在同一个进程里错误地复用了缓存。有一个让我印象很深的坑为了让读取更快我给 Memory Service 加了一层本地缓存key 用的是 user_id结果两个 session 共用同一个 user 时缓存里的记忆就串了。后来把缓存 key 改成conversation_id memory_type才排查干净。如果你也遇到类似的间歇性问题可以直接在 TencentDB 上跑联合查询对比两个 session 的记忆集合是否有异常交集。这份数据往往比应用日志更能说明问题。7. 写在后面的一点体会把 TencentDB、Agent Memory 和 Codex 组合到一起本质上是在不同抽象层级之间做翻译和妥协。读源码的时候我最大的收获并不是找到了某个“正确答案”而是明白了哪些矛盾是结构性的、不能靠小修小补绕过去。比如请求-响应模型与会话状态模型的冲突你无法通过增加缓存来根本解决上下文窗口与无限历史的矛盾也不可能靠单纯扩大窗口一劳永逸。每一次妥协背后都对应着架构决策而这些决策必须建立在理解源码实现细节的基础上。我个人现在的习惯是每接入一个 Agent 框架先画一条“数据流时序图”把消息从用户到 Codex、从 Codex 到工具、从工具到记忆存储的每一步完整走一遍然后才动手写代码。这个习惯帮我避开了很多“看起来能跑一上量就崩”的设计陷阱。如果你最近也在做类似的事不妨先从你的记忆表 schema 和工具调用日志开始读一读自己系统的真实行为硬冲突往往就藏在这些细节里。
企业数字化 ERP 产品动态
相关推荐
Hermes桌面化实践:用Tauri构建AI Agent原生应用的架构与工程节奏 一周时间,100 个 PR,一个原生桌面 App——Hermes 的 v0.16.0 Surface Release 就是这么被推出来的。这个版本把原本跑在终端里的 Hermes Agent 搬到了桌面,从托盘常驻、全局快捷键到 Skill 面板和 MCP 服务管理,全部以原生应用的形… · 2026/11/3 19:24:36
原生AI桌面应用如何一周合入100个PR?Hermes v0.16.0工程拆解 如果你最近在关注 Agent 类产品的桌面化,大概率绕不开 Hermes 这个名字。它从一套命令行工具和远程接口,硬生生长成了一个原生桌面 App,并且以 v0.16.0 Surface Release 作为新阶段的标记。这个版本最让我感兴趣的不是某个新功能,… · 2026/11/3 21:29:42
MFC老项目Tab控件封装:CTabSheet原理与避坑指南 简介:这份资源面向使用 VC2008 与 MFC 开发桌面程序的初学者和中级开发者,聚焦多选项卡界面的实现问题。它以 CTabSheet 类为核心,演示如何封装 TabCtrl 控件、派生选项卡页面、通过 CPropertySheet 组织多个页面并完成消息映射,最… · 2026/11/3 22:03:49
Folia 全屏歌词播放器装到 4 类设备上:路线选择与验收清单 Folia 全屏歌词播放器装到 4 类设备上:路线选择与验收清单 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major
Folia 是一款把歌词渲染… · 2026/11/4 11:10:45
Jasna 视频修复 GUI 实战指南:从启动卡死到解锁支持者模型的 7 个隐藏约束 Jasna 视频修复 GUI 实战指南:从启动卡死到解锁支持者模型的 7 个隐藏约束 【免费下载链接】jasna Video restoration tool 项目地址: https://gitcode.com/GitHub_Trending/ja/jasna
第一次打开 Jasna,启动窗口卡在"检查中"十几秒&… · 2026/11/4 11:10:45
Listen1:一个浏览器扩展同时搜播七个音乐平台的歌,三步装好 Listen1:一个浏览器扩展同时搜播七个音乐平台的歌,三步装好 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_e… · 2026/11/4 11:10:45
antd-mobile 从 0 到 1:5 分钟跑通,4 个页面场景搭出你的第一个 H5 antd-mobile 从 0 到 1:5 分钟跑通,4 个页面场景搭出你的第一个 H5 【免费下载链接】ant-design-mobile Essential UI blocks for building mobile web apps. 项目地址: https://gitcode.com/gh_mirrors/an/ant-design-mobile
做移动端 H5&#x… · 2026/11/4 11:09:45
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38