发布时间:2026/6/20 12:59:11
第16章 MemGPT / Letta —— Agent 记忆的「操作系统」
论文: MemGPT: Towards LLMs as Operating Systems (2023)项目: github.com/letta-ai/letta (原 MemGPT)16.1 核心思想把 LLM 当作操作系统类比计算机操作系统管理内存的方式操作系统内存层次:┌──────────┐ 最快/最小 │ 寄存器 │ ├──────────┤ │ L1/L2 │ │ Cache │ ├──────────┤ │ RAM │ ← 主内存 ├──────────┤ │ 磁盘 │ ← 持久化 └──────────┘ 最慢/最大MemGPT 的内存层次:┌──────────────┐ 最快/在上下文中 │ Core Memory │ ← 当前对话 记忆块 │ (上下文内) │ (类似 RAM) ├──────────────┤ │ Recall Memory │ ← 完整对话历史 │ (上下文外) │ (磁盘可检索) ├──────────────┤ │ Archival Memory│ ← 外部知识库 │ (向量数据库) │ (归档存储) └──────────────┘ 最慢/最大核心洞察LLM 的上下文窗口 操作系统的 RAM上下文有限但通过「换页」技术可以管理无限容量的信息OS 用虚拟内存换页 → MemGPT 用记忆管理工具换页16.2 MemGPT 的内存管理机制 架构示意┌────────────────────────────────────────────────────┐ │ MemGPT Agent │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ Core Memory (上下文内) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │ │ │ │ System │ │ Memory │ │ Conversation │ │ │ │ │ │ Prompt │ │ Blocks │ │ History │ │ │ │ │ └──────────┘ └──────────┘ └──────────────┘ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ │ ┌──────────┴──────────┐ │ │ │ 对话历史管理工具 │ │ │ │ ───────────────── │ │ │ │ conversation_search │ ← 搜索完整历史 │ │ │ core_memory_append │ ← 编辑记忆块 │ │ │ core_memory_replace │ ← 替换记忆块 │ │ └─────────────────────┘ │ │ │ │ │ ┌────────────────────┴──────────────────────────┐ │ │ │ 外部记忆上下文外 │ │ │ │ ┌────────────────┐ ┌──────────────────────┐ │ │ │ │ │ Recall Memory │ │ Archival Memory │ │ │ │ │ │ (对话历史全文) │ │ (向量库 知识检索) │ │ │ │ │ │ archival_memory │ │ archival_memory │ │ │ │ │ │ _search │ │ _insert │ │ │ │ │ └────────────────┘ └──────────────────────┘ │ │ │ └──────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────┘核心工具Agent 通过 Function Calling 调用send_message: 向用户发送消息MemGPT 唯一的消息出口core_memory_append: 向 Core Memory 块追加信息core_memory_replace: 替换 Core Memory 块的内容conversation_search: 搜索完整对话历史archival_memory_insert: 将信息存入归档记忆向量化archival_memory_search: 从归档记忆中检索16.3 Heartbeat 机制 —— Agent 的「自我意识」传统 Agent 的问题工具调用 → 返回结果 → 给用户 → 结束Agent 没有机会检查「我做得对不对」Heartbeat 的解决方案每个工具的返回结果中包含一个 request_heartbeat 参数如果设为 true → 工具执行完毕后控制权交还给 AgentAgent 可以检查结果 → 发现错误 → 自动重试代码示意# 工具返回结果{ tool_call_id: call_123, content: 搜索结果为空, request_heartbeat: true // ← 请求心跳 }# Agent 收到心跳后→ 搜索结果为空我换一个关键词试试→ 再次调用 search(换一个搜索词)→ 这次找到了这类似于你在命令行执行 ls 之后shell 不会直接退出而是等你输入下一个命令Heartbeat 就是给 Agent 的「命令提示符」16.4 Sleep-Time Compute —— 后台记忆整理MemGPT v2 的创新2025年。核心思想Agent 在「休眠」时用户不互动时启动一个后台 Agent 来整理记忆。做什么浏览最近的对话历史提取重要信息 → 写入 Core Memory删除过时的信息更新用户画像合并重复的记忆类比就像你睡觉时大脑在整理白天的记忆不重要的事情遗忘重要的事情巩固效果Letta 在 LoCoMo 基准测试上达到 74.0% 准确率仅用文件系统 GPT-4o-mini16.5 Letta Filesystem ——「文件系统 最好的记忆工具」2025年8月Letta 发表了一篇震撼论文Is a Filesystem All You Need?→ LoCoMo 基准测试 74.0%超过专用记忆工具 Mem0 的 68.5%为什么文件系统做记忆效果惊人文件操作是 LLM 最熟悉的范式grep / open / close / search_files这些工具在 LLM 训练数据中大量出现Agent 对它们的使用非常自然简单即正确专用记忆工具引入额外复杂性多了出错的环节Agent 需要理解专用工具的特殊语义无需学习新范式每个记忆工具Mem0/Zep/LangMem都有自己的 APILLM 需要「学会」每个新工具而文件操作是 LLM 的「母语」核心启示面试金句Agent 的记忆质量取决于 Agent 管理上下文的能力而不是记忆工具的复杂度。文件系统 好用工具 最佳记忆方案。16.5.1 Heartbeat 与 Sleep-Time 的工程实现 —— 不只是「定时器」▍ Heartbeat 的成本计算 —— 「自我纠错」要花多少钱面试官问「Heartbeat 每次都要多调一次 LLM成本怎么控制」每次 Heartbeat 触发时Agent 要把「当前状态 工具结果」发给 LLM让 LLM 判断是否需要进一步行动。这确实增加了成本。控制策略a) 选择性 Heartbeat —— 不是每个工具都请求心跳只在「关键工具」数据库写入、API 调用执行后触发b) 使用廉价模型做 Heartbeat —— Heartbeat 判断是「是否需要继续」不要求深度推理 → 用 gpt-4o-mini 就够c) Heartbeat 超时限制 —— 最多触发 3 次心跳避免死循环d) Token 预算驱动 —— 累计消耗超过阈值 → 停止心跳直接总结经验数据合理的 Heartbeat 机制增加 15-25% 的额外成本但减少 30-50% 的错误率 → ROI 是正的。▍ Sleep-Time Compute 的调度设计Letta 的 Sleep-Time Compute 不是简单的 cron 任务。它需要判断什么时候触发用户 5 分钟无交互1 小时处理哪些记忆最近 10 轮对话所有对话用什么模型整理记忆不需要 GPT-4o小模型够用工程实现建议用户交互结束后启动一个 30 秒的倒计时倒计时内用户再次交互 → 取消倒计时倒计时结束 → 启动 Sleep-Time Agent用廉价模型Sleep-Time Agent 扫描本轮对话 → 提取要点 → 更新 Core Memory完成后 Agent 回到待机状态注意Sleep-Time Compute 不是实时需求 → 可以异步执行不阻塞用户的下一次交互。这也是为什么 Letta 使用后台 Agent 的原因。▍ 记忆压缩的工程权衡 —— 保留什么丢弃什么MemGPT 记忆管理最核心的决策「什么信息值得进入 Core Memory」面试可以主动分析值得保留 → 用户偏好「我喜欢简洁回答」、事实信息「我是北京人」、任务上下文「正在做税务报表已完成 Q1-Q3」可以丢弃 → 临时搜索词、失败的尝试、已过时的数据、与当前任务无关的闲聊内容工业界的经验法则Core Memory 控制在 2000 tokens 以内留给对话历史足够的空间。超过上限 → 触发记忆整理合并相似、删除过时、归档低频16.6 MemGPT 架构的简化实现下面实现一套 MemGPT 风格的 Agent 记忆管理模拟器核心三组件CoreMemoryBlock —— 存储 Agent 的核心身份信息人类/角色Heartbeat —— 定时触发反思模拟 Sleep-Time ComputeMemoryManager —— 统一的记忆读写接口这套架构的精髓在于Agent 不是被动地被调用而是像操作系统一样持续运行定期自我审视和整理记忆。 对应的代码实现core_memory_appendcore_memory_replacearchival_memory_insertarchival_memory_searchcompact_conversationheartbeat_should_continuedemo_memgpt_workflowMemGPTAgentfrom typing import Optional import json import time import hashlib class MemGPTAgent: MemGPT 架构的简化实现 —— 展示核心概念。 实现 1. Core Memory 块System Human Persona 2. 记忆编辑工具core_memory_append/replace 3. Conversation Search对话历史搜索 4. 上下文压缩对话历史过长时自动压缩 def __init__(self, system_prompt: str ): 初始化 MemGPT Agent。 Args: system_prompt: 系统提示词。 # Core Memory 块 self.core_memory { human: 用户偏好和背景信息, persona: AI助手专业且友好, system: system_prompt or 你是一个有用的 AI 助手。, } # 完整对话历史Recall Memory self.conversation [] # 归档记忆简化版字典存储 self.archival {} # 已压缩的摘要 self.compacted_summary def _build_context(self, max_recent: int 10) - list[dict]: 构建发给 LLM 的上下文。 包含 1. Core Memory 块 2. 压缩摘要如果有 3. 最近 N 条对话 Args: max_recent: 最大保留的最近消息数。 Returns: 上下文消息列表。 context [] # Core Memory 组装 core_text \n.join( f### {key}\n{value} for key, value in self.core_memory.items() ) context.append({ role: system, content: fmemory\n{core_text}\n/memory, }) if self.compacted_summary: context.append({ role: system, content: fsummary\n{self.compacted_summary}\n/summary, }) # 最近 N 条对话 recent self.conversation[-max_recent:] if self.conversation else [] context.extend(recent) return context def core_memory_append(self, block: str, content: str): 向 Core Memory 块追加内容。 Args: block: 块名human/persona。 content: 追加的内容。 if block in self.core_memory: self.core_memory[block] \n content def core_memory_replace(self, block: str, content: str): 替换 Core Memory 块的内容。 Args: block: 块名。 content: 新内容。 if block in self.core_memory: self.core_memory[block] content def archival_memory_insert(self, key: str, content: str): 向归档记忆插入一条信息。 Args: key: 检索键。 content: 信息内容。 self.archival[key] { content: content, timestamp: time.time(), } def archival_memory_search(self, query: str) - str: 从归档记忆搜索简化版关键词匹配。 Args: query: 搜索词。 Returns: 匹配的结果。 results [] for key, entry in self.archival.items(): if query.lower() in key.lower() or query.lower() in entry[content].lower(): results.append(f[{key}] {entry[content]}) return \n.join(results[-5:]) if results else 未找到相关信息 def compact_conversation(self): 对话压缩早期对话 → 摘要放入 compacted_summary。 这是 MemGPT 最核心的操作之一 当对话历史过长时对早期部分做摘要压缩。 if len(self.conversation) 20: return # 取最早的 10 条对话做压缩 old_part self.conversation[:10] self.conversation self.conversation[10:] # 简化的摘要生成 topics set() for msg in old_part: for word in msg.get(content, ).split(): if len(word) 3: topics.add(word.lower()) new_summary ( f此前讨论了以下话题{, .join(list(topics)[:10])}... ) if self.compacted_summary: self.compacted_summary \n new_summary else: self.compacted_summary new_summary def heartbeat_should_continue(self, last_tool_result: str) - bool: 判断是否需要 Heartbeat继续给 Agent 控制权。 如果工具调用失败或者返回不充分 返回 True 让 Agent 继续思考和行动。 Args: last_tool_result: 上一步工具调用的结果。 Returns: 是否需要继续。 # 模拟判断如果结果包含错误信号 error_signals [未找到, 错误, 失败, 抱歉, 无法] return any(sig in last_tool_result for sig in error_signals) def demo_memgpt_workflow(): 演示 MemGPT 的完整工作流。 print( * 60) print( MemGPT 记忆架构演示) print( * 60) agent MemGPTAgent() # Step 1: 展示初始 Core Memory print(\n 初始 Core Memory:) for key, value in agent.core_memory.items(): print(f [{key}] {value}) # Step 2: Agent 学习用户信息 → 写入 Core Memory print(\n 用户告诉 Agent 自己的偏好) agent.core_memory_append(human, 喜欢简洁的回答风格) agent.core_memory_append(human, 是Python开发者经常需要代码帮助) agent.core_memory_replace(persona, Python 专家助手回答简洁专业) print( 更新后的 Core Memory:) for key, value in agent.core_memory.items(): print(f [{key}] {value}) # Step 3: 模拟对话 print(\n 模拟对话) dialogs [ (user, 帮我写一个快速排序算法), (assistant, 好的这是一个 Python 快速排序实现\ndef quicksort(arr):\n if len(arr) 1:\n return arr\n pivot arr[0]\n left [x for x in arr[1:] if x pivot]\n right [x for x in arr[1:] if x pivot]\n return quicksort(left) [pivot] quicksort(right)), (user, 谢谢再帮我分析一下时间复杂度), (assistant, 快速排序的平均时间复杂度是 O(n log n)最坏情况是 O(n²)...), ] for role, content in dialogs: agent.conversation.append({role: role, content: content}) print(f 当前对话数: {len(agent.conversation)}) # Step 4: 写入归档记忆 print(\n 归档记忆) agent.archival_memory_insert( quicksort, 快速排序O(n log n) 平均O(n²) 最坏非稳定排序 ) agent.archival_memory_insert( python_best_practice, Python编码规范PEP 8, 类型注解, 单元测试 ) agent.archival_memory_insert( user_preference, 用户偏好简洁代码不喜欢过度注释 ) print(f 已存入 {len(agent.archival)} 条归档记忆) # Step 5: 搜索归档记忆 print(\n 搜索归档记忆) result agent.archival_memory_search(排序) print(f 搜索「排序」→ {result}) # Step 6: 模拟对话压缩 print(\n ️ 对话压缩演示) # 模拟大量对话 for i in range(50): agent.conversation.append({ role: user, content: f问题{i}这是一条测试消息, }) agent.conversation.append({ role: assistant, content: f回答{i}这是一条回复, }) print(f 压缩前: {len(agent.conversation)} 条消息) agent.compact_conversation() print(f 压缩后: {len(agent.conversation)} 条消息) print(f 摘要: {agent.compacted_summary[:100]}...) # Step 7: Heartbeat 机制演示 print(\n Heartbeat 机制演示) test_cases [ (查询成功找到 3 条结果, False), (未找到相关数据请更换搜索词, True), (工具调用失败API 超时, True), (计算完成结果为 42, False), ] for result, expected_heartbeat in test_cases: needs_heartbeat agent.heartbeat_should_continue(result) status ✅ if needs_heartbeat expected_heartbeat else ❌ print(f {status} 「{result[:25]}...」→ 需要心跳: {needs_heartbeat}) # Step 8: 展示 LLM 上下文 print(\n 发给 LLM 的上下文结构) context agent._build_context(max_recent3) for i, msg in enumerate(context): role msg[role] content msg[content][:80].replace(\n, ) print(f [{i}] {role}: {content}...)16.7 本章总结核心要点回顾MemGPT 把 LLM 当操作系统管理Core Memory RAM上下文中快速访问Recall Memory 磁盘对话历史全文可检索Archival Memory 归档向量库 外部知识Heartbeat 机制工具调用后把控制权交还给 AgentAgent 可以检查结果、发现错误、自动重试类似命令行的「命令提示符」Sleep-Time Compute (MemGPT v2)Agent 休眠时后台整理记忆提取重要信息、删除冗余、更新画像Letta Filesystem 的启示文件系统做记忆 简单 效果好LoCoMo 74.0%超过专用工具的 68.5%Agent 不需要复杂的记忆工具需要好用的工具面试速记MemGPT 的核心创新是什么→ OS 级内存管理Core Memory Recall Archival→ 通过工具让 Agent 自己管理自己的记忆→ Heartbeat 机制实现自我纠错→ 「文件系统就是最好的记忆工具」 对应的代码实现from typing import Optional import json import time import hashlib if __name__ __main__: print(╔══════════════════════════════════════════════════════╗) print(║ 第16章MemGPT / Letta 记忆架构 ║) print(║ Core Memory · Heartbeat · Sleep-Time · Filesystem ║) print(╚══════════════════════════════════════════════════════╝) demo_memgpt_workflow() print(\n▶ MemGPT 内存层次对应关系) print(- * 50) layers [ (Core Memory, RAM, 当前上下文 可编辑记忆块), (Recall Memory, 磁盘, 完整对话历史可搜索), (Archival Memory, 归档, 向量数据库外部知识), ] for mem, os, desc in layers: print(f {mem:18s} ↔ {os:6s} → {desc}) print(\n✅ 第16章完成)

相关新闻

OpenClaw:企业级AI能力调度中间件实战指南
2026/6/20 11:59:11

OpenClaw:企业级AI能力调度中间件实战指南

1. OpenClaw不是“另一个Cursor”:它到底在解决什么真问题?OpenClaw这个名字最近在开发者圈子里突然密集出现,但很多人点开GitHub仓库第一眼就愣住了——界面简陋、文档稀疏、连个像样的Demo视频都没有。更困惑的是,它和Cursor、C…

阅读更多
马克·布鲁克揭秘负载均衡系统经济学:M/M/c 模型延迟随服务器数量渐近改善
2026/6/20 11:59:11

马克·布鲁克揭秘负载均衡系统经济学:M/M/c 模型延迟随服务器数量渐近改善

关于我 我叫马克布鲁克(Marc Brooker),喜欢打造实用且酷炫的东西,热衷于构建大型项目。此外,我还涉足机械加工、焊接、烹饪和滑雪等领域。我是西雅图亚马逊云服务(AWS)的一名工程师,…

阅读更多
Gemini企业级集成:从对话模型到产业API中枢的范式迁移
2026/6/20 11:59:11

Gemini企业级集成:从对话模型到产业API中枢的范式迁移

1. 这不是模型退化,是产品逻辑的主动转向——从“全能型AI”到“可嵌入式工具链”的底层迁移Gemini 被吐槽“越来越烂”,这个说法在中文互联网上高频出现,但背后其实藏着一个被严重误读的事实:它根本没在“变烂”,而是…

阅读更多
C++迭代器与范围编程
2026/6/20 13:59:12

C++迭代器与范围编程

C迭代器与范围编程迭代器是STL中连接容器和算法的桥梁。C20引入的范围库提供了更简洁的遍历方式,结合视图可以高效处理数据序列。迭代器类别决定其能力:输入、输出、前向、双向和随机访问。#include #include #include #include #include #includevoid i…

阅读更多
网盘下载效率革命:智能直链解析工具重塑文件获取体验
2026/6/20 13:59:12

网盘下载效率革命:智能直链解析工具重塑文件获取体验

网盘下载效率革命:智能直链解析工具重塑文件获取体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…

阅读更多
WinCC C脚本实战:从基础操作到高级动画的完整指南
2026/6/20 13:59:12

WinCC C脚本实战:从基础操作到高级动画的完整指南

1. WinCC C脚本入门:从零开始掌握基础操作 第一次接触WinCC C脚本时,我也被那些看似复杂的代码吓到过。但实际用起来才发现,它就像工业自动化领域的"乐高积木",通过简单的模块组合就能实现强大功能。WinCC作为西门子经…

阅读更多
目标文件/可执行文件查看-C/C++
2026/6/20 13:59:12

目标文件/可执行文件查看-C/C++

文章目录linux系统目标文件查看文件头段表内容段其他段符号表可执行文件查看程序头表程序虚拟地址空间分布手动生成目标文件Windowslinux系统 # 查看文件格式 $ file simpleSection.o simpleSection.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped目…

阅读更多
ARM7 LPC210x定时器、PWM与看门狗实战配置与避坑指南
2026/6/20 13:59:12

ARM7 LPC210x定时器、PWM与看门狗实战配置与避坑指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于ARM7内核的LPC2101/02/03这类经典微控制器的项目中,定时器外设的掌握程度直接决定了你能否实现精准的时序控制、高效的PWM驱动以及可靠的系统监控。很多新手开发者拿到芯片手册,看到一堆寄存…

阅读更多
求职简历 PPT 模板怎么选?实测优选百度文库 AI 智能模板,覆盖全行业高效落地
2026/6/20 12:59:12

求职简历 PPT 模板怎么选?实测优选百度文库 AI 智能模板,覆盖全行业高效落地

简介:想要高效打造高通过率简历 PPT,选对模板平台是关键。本文围绕求职场景深度解析百度文库简历 PPT 模板全链路优势,依托平台 18 亿专业资源、GenFlow4.0 智能底座、行业首创智能 PPT 能力,从产品底层逻辑、内容资源、排版设计、…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/17 23:21:18

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/18 4:35:02

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/18 15:04:04

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
洛雪音乐终极音源指南:一站式获取全网无损音乐的完整解决方案
2026/6/20 0:59:03

洛雪音乐终极音源指南:一站式获取全网无损音乐的完整解决方案

洛雪音乐终极音源指南:一站式获取全网无损音乐的完整解决方案 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 你是否厌倦了在不同音乐平台之间来回切换,只为找到一首歌的无…

阅读更多
Display Driver Uninstaller深度清理方案:显卡驱动残留问题的终极解决方案(2024版)
2026/6/20 0:59:03

Display Driver Uninstaller深度清理方案:显卡驱动残留问题的终极解决方案(2024版)

Display Driver Uninstaller深度清理方案:显卡驱动残留问题的终极解决方案(2024版) 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitco…

阅读更多
深入解析MC68HC908AS32A的SCI模块:从异步通信原理到寄存器实战配置
2026/6/20 0:59:03

深入解析MC68HC908AS32A的SCI模块:从异步通信原理到寄存器实战配置

1. 项目概述:深入MC68HC908AS32A的异步串行通信核心在嵌入式系统开发中,尤其是面对工业控制、车载电子或智能仪表这类需要设备间稳定对话的场景,串行通信接口(SCI)往往是工程师最可靠的老朋友。它不像并行总线那样需要…

阅读更多
GIT修改用户名
2026/6/20 3:11:17

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/19 20:40:12

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/20 7:34:01

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多