1. 从"资料汇总"四个字里读出真实需求
看到"DSec学习资料汇总"这个标题,加上一串围绕 DeepSeek、Agent、沙盒、系统架构的热搜词,我第一反应不是"又一个资源清单",而是——这背后其实藏着一个非常具体的困境:想系统入门大模型应用开发,尤其是 Agent 方向,但市面上的资料要么太散、要么太浅、要么一上来就假设你已经懂了底层架构。
我自己带过几个刚转方向的朋友,也帮一些团队做过内部技术分享,最常听到的抱怨就是:"我知道 DeepSeek 能跑,也知道 Agent 是个趋势,但到底从哪开始?先学提示词还是先学框架?沙盒是干嘛的?系统架构那套东西跟 Agent 开发有什么关系?"这些问题单拎出来都能搜到答案,但拼不成一条完整的路径。
所以这篇东西我不打算做成一个"链接大全"。那种汇总网上太多了,收藏完就吃灰。我想做的是把 DSec 这个方向——也就是围绕 DeepSeek 生态、Agent 开发、沙盒隔离、系统架构这几块——拆成一条能真正走通的学习链路。每一块讲清楚它解决什么问题、为什么在这个位置出现、以及我实际踩过哪些坑。
适合谁看?如果你是刚接触大模型应用开发、想往 Agent 方向走的开发者,这篇能帮你省掉大量"东一榔头西一棒子"的时间。如果你已经能跑通简单的对话应用,但一碰到工具调用、记忆管理、沙盒隔离就卡壳,那中间几节会对你更有用。如果你纯粹是想了解 DeepSeek 本地部署和系统架构层面的东西,后面也有对应内容。
需要先说明一点:下面涉及的具体工具版本、参数配置,都是基于我实际动手时的常见实践整理的,不同环境可能有差异,你照着做的时候以自己环境的实际输出为准。
2. 先把"DSec"这个词拆开:它到底指什么
2.1 DeepSeek 是模型,不是全部
很多人一上来就把 DeepSeek 等同于"一个能聊天的模型",这个理解会限制后面的学习。DeepSeek 本身是一系列模型,有不同参数规模、不同量化版本,能跑在从消费级显卡到多卡服务器的各种环境里。但真正让它在应用层有价值的,是它作为"推理内核"被嵌进更大的系统里。
我习惯把整个技术栈分成四层来看:
| 层级 | 作用 | 典型关注点 |
|---|---|---|
| 模型层 | 提供推理能力 | 模型选型、量化、显存占用 |
| 运行时层 | 让模型跑起来 | 本地部署、推理服务、并发 |
| 编排层 | 让模型干活 | Agent 框架、工具调用、记忆 |
| 隔离层 | 让模型安全干活 | 沙盒、权限、资源限制 |
"DSec"这个词,我理解它覆盖的是后三层——也就是怎么把 DeepSeek 这个内核,变成一个能安全、可控、可扩展地执行任务的系统。这也是为什么热搜词里同时出现了"沙盒""系统架构""Agent 安全"这些词,它们本来就是一件事的不同侧面。
2.2 为什么"沙盒"会跟 Agent 绑在一起
这是我觉得最值得先讲清楚的一个点。Agent 的本质是让模型去调用工具、执行操作。一旦模型能执行操作,就必然面临一个问题:它执行错了怎么办?它被诱导执行了危险操作怎么办?它陷入循环疯狂调用怎么办?
沙盒就是回答这个问题的。它给 Agent 一个"可以随便折腾但折腾不出圈"的环境。热搜词里出现的"tee沙盒""windows沙盒无法启用"这些,本质上都是同一个需求在不同平台上的落地方式。TEE(可信执行环境)是从硬件层面做隔离,Windows 沙盒是从操作系统层面做隔离,思路不同但目标一致。
我个人的经验是:初学阶段不用一上来就搞 TEE 这种重方案,先用进程级或容器级的隔离把流程跑通,理解"隔离边界在哪里、什么能进什么不能出",比直接啃硬件隔离概念要高效得多。
2.3 系统架构这块知识为什么绕不开
热搜词里有"系统架构设计师32小时通关""分布式交换机系统架构""stm32系统架构"这些,看起来跟 AI 八竿子打不着。但如果你真要把 Agent 做成一个能上线的系统,架构思维是躲不掉的。
举个最实际的例子:单机跑一个 Agent 很轻松,但你要让它同时服务几十个用户、每个用户的会话状态要隔离、工具调用要排队、失败要重试、日志要能追溯——这时候你面对的就是一个分布式系统问题。消息队列、状态存储、服务发现、限流熔断,这些传统后端架构里的东西,一个都不会少。
所以我的建议是:不要因为"我是做 AI 的"就跳过系统架构。相反,Agent 开发做深了,架构能力反而是区分普通开发者和高级开发者的关键。
3. 本地把 DeepSeek 跑起来:部署路径与显存账
3.1 先算清楚你的硬件能扛什么
在动手之前,先做一道算术题。模型显存占用有个粗略公式:
显存占用 ≈ 参数量 × 每参数字节数 + 上下文缓存
以常见的量化方案为例,不同精度下每参数占用大致如下:
| 量化精度 | 每参数字节 | 7B 模型显存 | 14B 模型显存 | 32B 模型显存 |
|---|---|---|---|---|
| FP16 | 2 字节 | 约 14GB | 约 28GB | 约 64GB |
| INT8 | 1 字节 | 约 7GB | 约 14GB | 约 32GB |
| INT4 | 0.5 字节 | 约 3.5GB | 约 7GB | 约 16GB |
这还没算上下文缓存。上下文越长,KV Cache 占用越大,实际显存会比上表高不少。我见过太多人按参数量买了卡,结果一开长上下文就爆显存。
我的实操建议是:先按 INT4 估算,然后留出至少 30% 的余量给上下文和运行时开销。如果你只有一张 8GB 的卡,7B 的 INT4 版本是比较稳的起点;如果有 24GB,14B 的 INT4 或 7B 的 INT8 都能跑得比较舒服。
3.2 推理服务选型:别只盯着一个方案
本地部署 DeepSeek,常见的推理服务方案有几类,各有适用场景:
- 面向单机快速验证的方案:安装简单,一条命令拉起,适合先跑通流程。缺点是并发能力弱,长上下文支持有限。
- 面向生产吞吐的方案:支持连续批处理、PagedAttention 这类优化,并发高、显存利用率好,但配置项多,调优有门槛。
- 面向轻量边缘的方案:对硬件要求低,适合在资源受限环境里做原型。
我自己的路径是:先用最简单的方案把"模型能回答、能调用工具"跑通,确认整条链路没问题,再换成高吞吐方案做压测。反过来做的话,你会在还没理解业务逻辑的时候就被一堆配置参数淹没。
启动服务时有个细节容易被忽略:上下文长度参数。很多方案默认上下文只有 4K 或 8K,但 Agent 场景经常需要塞入工具定义、历史对话、检索结果,很容易超。启动时显式把上下文长度调大,比如设到 32K,能省掉后面很多"为什么模型突然失忆"的困惑。
3.3 验证部署是否真的成功
跑起来不等于跑对。我习惯用三个测试来验证:
- 基础对话测试:问一个需要多步推理的问题,看它能不能给出连贯答案。
- 长上下文测试:塞入一段几千字的文本,问一个只有读完才能回答的问题,验证上下文确实生效。
- 并发测试:同时发多个请求,观察响应时间和显存占用,确认服务不会崩。
第三步最容易被跳过,但恰恰最重要。Agent 场景下并发调用是常态,单请求跑通不代表系统可用。
4. Agent 开发:从"会聊天"到"会干活"的关键跨越
4.1 Agent 和普通对话应用的本质区别
普通对话应用是"你问我答",Agent 是"你给目标,我自己想办法达成"。这个差别听起来简单,实现起来涉及一整套机制。
核心区别在于 Agent 有一个循环:思考 → 选择工具 → 执行 → 观察结果 → 再思考。这个循环什么时候停?由模型自己判断,或者由外部设置最大轮次。这就带来了普通应用没有的问题:循环失控、工具调用失败、中间状态丢失。
我见过最常见的翻车场景是:Agent 调用一个搜索工具,返回结果为空,它不理解"空"的含义,于是换个说法再搜,还是空,再换……直到把轮次耗尽。这不是模型笨,是提示词里没告诉它"连续两次空结果就应该换策略或直接报告"。
4.2 工具调用:Agent 的手脚怎么接
工具调用是 Agent 能力的核心。实现上,你需要做三件事:
- 定义工具:用模型能理解的格式描述每个工具的名字、用途、参数。描述要具体,"搜索信息"这种太模糊,"根据关键词搜索网页并返回前五条摘要"就清楚得多。
- 解析调用:模型输出工具调用请求后,你的代码要能正确解析出工具名和参数。
- 执行并回传:执行工具,把结果按约定格式塞回对话历史,让模型继续推理。
这里有个我踩过的坑:参数类型不匹配。模型可能把数字参数输出成字符串,或者把数组输出成逗号分隔的字符串。如果你的工具函数严格校验类型,就会直接报错。稳妥的做法是在执行前做一层参数清洗和类型转换,而不是指望模型每次都输出完美格式。
另一个经验是:工具数量不要一次给太多。我试过给 Agent 挂二十多个工具,结果它经常选错。后来精简到五六个核心工具,准确率明显上升。工具太多会稀释模型的注意力,这跟人面对太多选项反而难以决策是一个道理。
4.3 记忆管理:Agent 的"记性"怎么设计
Agent 的记忆分几种,别混为一谈:
- 短期记忆:当前对话的历史,通常直接放在上下文里。
- 长期记忆:跨会话需要保留的信息,得存到外部存储,用的时候检索回来。
- 工作记忆:当前任务执行过程中的中间状态,比如已经查了哪些资料、完成了哪几步。
短期记忆最简单,但也最容易出问题——上下文塞满了怎么办?我的做法是设置一个阈值,超过就把早期对话做摘要压缩,保留关键信息,丢掉冗余细节。摘要本身可以让模型来做,成本不高。
长期记忆我一般用向量检索方案:把重要信息转成向量存起来,需要时按相似度召回。这里的关键是什么该存。我的经验是只存"结论性"和"偏好性"的信息,比如"用户偏好简洁回答""项目使用 Python 技术栈",而不是把每句话都存进去。存太多反而会干扰检索质量。
4.4 编排框架:自己写还是用现成的
这是很多人纠结的问题。我的看法是:第一个 Agent 建议自己手写一遍。
原因很简单,框架帮你封装了循环、工具调用、记忆管理这些逻辑,但如果你不理解这些逻辑本身,出了问题你根本不知道从哪查。手写一遍之后,你会清楚地知道每一步在干什么,这时候再用框架,就是站在更高的视角做取舍,而不是被框架牵着走。
手写一个最小 Agent 其实不复杂,核心就是一个循环加几个函数。跑通之后你会发现,所谓框架,无非是把这些函数做得更通用、更健壮、支持更多场景而已。
等你需要多 Agent 协作、复杂工作流编排的时候,再引入框架也不迟。那时候你评估框架的标准会很清晰:它有没有解决你手写时遇到的具体痛点。
5. 沙盒隔离:让 Agent 安全地"动手"
5.1 为什么必须有隔离层
Agent 能执行代码、能读写文件、能发网络请求,这些能力是双刃剑。没有隔离,一次错误的工具调用可能删掉重要文件,或者让系统暴露在风险中。
沙盒要解决的核心问题是:给 Agent 一个能力完整但边界清晰的环境。在这个环境里,它可以自由操作;出了这个环境,它什么都碰不到。
热搜词里"windows沙盒无法启用"这类问题,反映的就是大家在尝试用系统自带隔离能力时的常见障碍。不同平台的隔离方案成熟度不一样,选型时要考虑你的部署环境。
5.2 隔离方案的几个层次
从轻到重,隔离方案大致有这么几档:
| 隔离层次 | 实现方式 | 隔离强度 | 适用场景 |
|---|---|---|---|
| 进程级 | 独立进程 + 权限限制 | 中 | 单机开发、可信代码 |
| 容器级 | 容器运行时隔离 | 较高 | 生产环境、多租户 |
| 虚拟机级 | 完整虚拟化 | 高 | 高风险代码执行 |
| 硬件级 | 可信执行环境 | 最高 | 敏感数据处理 |
我的建议是:开发阶段用进程级或容器级就够了,重点是理解"边界怎么划"。生产环境如果涉及执行用户提交的代码,容器级是底线,条件允许再往上走。
5.3 沙盒里最容易忽略的三件事
第一件是资源限制。光隔离文件系统不够,还得限制 CPU、内存、执行时间。我见过 Agent 生成一个死循环代码,把整个沙盒的 CPU 占满,连带影响其他任务。设置超时和资源上限是必须的。
第二件是网络策略。沙盒默认应该禁止或严格限制网络访问,需要联网时走白名单。否则 Agent 可能被诱导去访问不该访问的地址。
第三件是输出审查。沙盒里的执行结果回传给模型之前,最好过一遍检查,避免把敏感信息带出来。这一步很多人不做,但一旦出问题就是大问题。
5.4 一个实用的沙盒设计思路
我常用的思路是"最小能力原则":Agent 需要什么能力就给什么,绝不多给。具体做法是:
- 文件系统只挂载一个临时工作目录,用完即销毁
- 网络默认关闭,需要时按域名白名单开放
- 执行时间设硬上限,超时直接终止
- 所有操作记日志,方便事后追溯
这套思路不复杂,但能挡住绝大多数意外情况。关键是要在 Agent 开发早期就把隔离层设计进去,而不是等出了问题再补。后补的隔离往往漏洞百出,因为整个系统的假设已经建立在"没有隔离"之上了。
6. 系统架构视角:把 Agent 做成能上线的系统
6.1 单机 Demo 和线上系统的差距
单机跑通一个 Agent,和让它稳定服务真实用户,中间隔着一整个架构设计的距离。我列几个最直观的差距:
- 状态管理:Demo 里状态在内存里,重启就没了;线上要持久化,还要支持多实例共享。
- 并发处理:Demo 一次一个请求;线上要处理并发,还要防止单个用户占满资源。
- 故障恢复:Demo 崩了就崩了;线上要能自动重试、降级、告警。
- 可观测性:Demo 靠打印日志;线上要有完整的链路追踪和指标监控。
这些不是"锦上添花",而是"能不能用"的分界线。
6.2 会话状态该放哪
Agent 的会话状态包括对话历史、工具调用记录、中间结果。放内存最简单,但多实例部署时会出现"请求打到哪个实例,状态就在哪个实例"的问题。
常见做法是把状态外置到共享存储,比如键值存储或数据库。每个会话一个 ID,任何实例都能根据 ID 取到完整状态。这样实例就可以无状态化,扩容缩容都方便。
代价是每次读写都有网络开销。我的经验是:热数据放缓存,冷数据落库,中间加一层合理的过期策略。别小看这个设计,会话状态管理做不好,后面所有功能都会受影响。
6.3 工具调用的可靠性设计
工具调用是 Agent 系统里最容易出故障的环节。外部 API 会超时、会限流、会返回错误。如果每次失败都让整个 Agent 挂掉,体验会非常差。
我的做法是给每个工具调用加三层保护:
- 超时控制:单次调用设上限,超时立即返回失败,不让 Agent 干等。
- 重试策略:对可重试的错误(如网络抖动)做有限次重试,指数退避。
- 降级方案:重试仍失败时,返回一个明确的失败信息给模型,让它决定是换工具还是报告用户。
第三点特别重要。很多实现里工具失败就直接抛异常,模型根本不知道发生了什么。正确的做法是把失败也作为一种"观察结果"回传给模型,让它有机会调整策略。
6.4 可观测性:出了问题怎么查
Agent 系统出问题时,最难的是定位。因为一次请求可能涉及多轮模型调用、多次工具执行,中间任何一环出问题都会导致最终结果异常。
我的经验是做好三件事:
- 全链路追踪:给每个请求一个唯一 ID,所有相关日志都带上这个 ID,方便串起来看。
- 关键节点埋点:模型调用的输入输出、工具调用的参数和结果、每轮的耗时,都要记录。
- 指标监控:成功率、平均轮次、平均耗时、工具调用失败率,这些指标能帮你提前发现趋势性问题。
这套东西搭起来有点工作量,但一旦上线,你会庆幸自己做了。没有可观测性的 Agent 系统,就像在黑箱里调试,全靠猜。
7. 学习路径:我建议的推进顺序
7.1 别按"知识点"学,按"能跑通的东西"学
很多人学 Agent 的方式是:先看提示词工程,再看框架文档,再看架构设计,最后动手。这个顺序的问题是,前面全是抽象概念,没有反馈,很容易失去动力。
我建议反过来:先定一个能跑通的小目标,缺什么补什么。比如第一个目标是"让模型调用一个计算器工具完成数学题"。这个目标很小,但涉及了工具定义、调用解析、结果回传整条链路。跑通之后,你对 Agent 的理解会比看十篇文章都深。
然后逐步加难度:加记忆、加多工具、加沙盒、加并发。每一步都在上一步的基础上扩展,知识是长在实践上的,不是悬空的。
7.2 各阶段的时间投入参考
根据我带人的经验,一个有一定编程基础的人,大致的时间分布是这样的:
- 跑通本地部署 + 基础对话:1 到 2 天
- 手写一个最小 Agent(单工具):2 到 3 天
- 加上记忆和多工具:3 到 5 天
- 引入沙盒隔离:2 到 3 天
- 架构化改造(状态外置、可观测性):1 到 2 周
这个节奏不是死的,但能给你一个预期。如果某个阶段卡了很久,大概率是跳步了,回头补一下前置知识。
7.3 几个容易走弯路的地方
第一个弯路是过早追求模型效果。有人一上来就纠结"为什么我的 Agent 不如别人的聪明",然后疯狂调提示词。其实很多时候问题不在提示词,而在工具设计、记忆策略、错误处理这些工程层面。先把工程做扎实,效果自然上来。
第二个弯路是忽视安全边界。觉得"我自己用,不用搞那么严"。但 Agent 的能力越强,意外造成的后果越严重。隔离和限制不是给别人看的,是保护你自己的。
第三个弯路是只学不记。Agent 开发涉及的东西很杂,模型、框架、架构、安全,每个方向都有细节。我建议养成记录的习惯,把踩过的坑、验证过的配置、想通的原理都写下来。这些记录后面会变成你自己的"资料汇总",比任何现成的清单都有用。
8. 关于资料整理本身的一点经验
回到"资料汇总"这个主题。我自己的资料库经历过几个阶段:最早是收藏夹,看到好的就存,结果几千条从来没打开过;后来改成笔记,按主题分类,好一些但还是容易变成"只存不看";现在我的做法是以输出倒逼输入——每学一个东西,就写一段能给别人讲清楚的说明,写不出来说明没真懂。
这个转变带来的最大好处是,资料不再是"囤积",而是"消化"。你不需要一个庞大的资料库,你需要的是一个能随时调用的理解。那些真正理解的东西,不需要查资料也能讲出来;那些讲不出来的,存再多链接也没用。
所以如果你正在整理自己的 DSec 学习资料,我的建议是:别追求全,追求通。挑一条主线——比如"从本地部署到能跑 Agent 到加上沙盒"——把这条线走通,走的过程中自然会产生属于你自己的资料。这些资料的价值,远高于任何一份别人整理的汇总。
最后分享一个我一直在用的小方法:每学完一个模块,用一句话回答"这个模块解决了什么问题"。如果答不上来,说明还没学透,回去再看。这个自检很简单,但能帮你避免"学了很多却说不清学了什么"的状态。