1. DeepSeek Harness 是什么?先搞清楚再动手
先把话说清楚:DeepSeek Harness 本质上是一个围绕本地化 AI 编程与智能体工作流管理而设计的综合环境。它不是一个单独的 "编程语言",也不是某个 IDE 的官方插件包,而是一套把模型推理、工具链、技能集(Skill)、工作流编排整合在一起的系统。你可以把它理解成一个 "模型驾驶舱":让 DeepSeek 这类开源模型能稳定地跑在你自己的服务器上,并且通过一套可插拔的 Skill 机制,让模型能真正完成 "读代码、改文件、执行命令、调测试" 这类实际操作,而不只是陪你聊天。
很多刚接触的人会把它和 Codex、Cursor 这类产品混为一谈。我不否认它们的目标有重叠——都是想让人用自然语言驱动编程——但 Harness 更偏底层、更偏向自托管和定制化。你能完全控制模型行为、技能加载策略、甚至安全权限边界,这是云端产品给不了的。
这篇文章适合谁看?两类人最需要:
- 有本地部署需求的技术人员、运维工程师、想搞私有化 AI 编程基座的团队;
- 以及对 "AI 如何真正落地到 Coding 工作流" 这件事有强烈好奇心的开发者。
我会从安装开始,一直讲到典型编程工作流的搭建,中途穿插我在实际部署和调试中踩过的坑。内容尽量做到可复现,参数给全,代码可跑,思路说透。
1.1 DeepSeek Harness 的核心模块拆解
为了让你后面安装的时候不懵,我先花两分钟把 Harness 的内部结构拆一遍。理解了这个结构,你就知道每一步安装到底在装什么。
一个完整的 Harness 部署通常包含这几块内容:
- Harness 主程序:负责进程管理、配置解析、日志收集,相当于操作系统的内核。
- Skill 机制:这是 Harness 最核心的扩展点。每个 Skill 是一个结构化目录,里面包含描述文件(通常叫 SKILL.md)和对应的实现脚本。模型通过读取这些描述文件来决定什么时候调用哪个技能。
- 工具链适配层:让模型能安全地执行 shell 命令、读写文件、调用 Git 等操作。这层是权限控制的咽喉,也是很多人部署时遇到权限报错的根源。
- 模型推理后端:Harness 本身不内置模型权重,它要么对接本地通过 Ollama、vLLM 等方式启动的模型服务,要么对接云端 API。
- 插件/工作流扩展:比如和 IDE 的联动、和 CI 管线的集成,这些通常以独立插件形式存在。
把这套结构放在脑子里,再看下面的安装步骤,你就会发现每一个操作都是为了给某一层 "铺路"。
1.2 为什么选择本地化部署而不是直接用云端
我遇到过不少朋友问:既然 DeepSeek 官方有 API,为什么不直接用?这个问题问得合理,但答案恰恰是 Harness 存在的理由。
云端 API 的优势是零部署、快启动,但劣势也很明显:代码数据要出境(不展开,你懂的)、每次请求有延迟波动、高频调用成本累积得很快。更重要的是,云端模型通常是 "黑盒",你没法微调它的工具调用策略,也没法深度定制提示词之外的执行行为。
本地化部署后,数据完全内网闭环、延迟可控、调用成本趋近于零。更重要的是,你可以把 Harness 的 Skill 机制当成一个 "个人工具集抽屉",把公司内部的各种脚本、检查规则、代码规范注入进去,让模型在生成代码时天然遵循团队约定。这一点是云端 API 无论如何都做不到的。
我自己在部署时最看重的其实是第三点。团队里有几个人已经习惯了 Cursor 这类工具,但每次生成的代码风格五花八门,要靠人工 review 去规范。用了 Harness 之后,我把团队的 Go 项目布局规范、错误处理约定写成了几个 Skill,模型生成代码的质量肉眼可见地稳定了。
2. 安装前的环境准备与版本选型
安装 DeepSeek Harness 本身不复杂,复杂的是让它的运行环境符合预期。我第一次安装时就是忽略了一个 Python 版本问题,导致折腾了两个小时排查一个看似莫名其妙的导入报错。
2.1 Python 环境配置,版本不能马虎
Harness 主程序对 Python 有明确要求。经过实际验证,3.10 到 3.12 是兼容性最好的区间,3.9 以下的旧版本会出现部分依赖无法解析的问题,3.13 则要谨慎——不是不能用,而是部分第三方依赖还没有为它发布构建,装到一半容易翻车。
我建议你直接用 conda 或者 venv 建一个独立的虚拟环境,不要用系统自带的 Python。原因很简单:Harness 的依赖树里包含一些对版本敏感的包(比如 pydantic 的不同大版本行为差异很大),如果你系统里还跑着其他项目,很容易产生冲突。
# 以 conda 为例,创建干净环境 conda create -n harness python=3.11 -y conda activate harness # 验证版本 python --version pip --version这里有个小细节:激活环境后,最好确认 pip 指向的是虚拟环境内的 pip,而不是全局的。可以用which pip看一眼路径。我见过太多人因为环境没激活干净,安装的时候报 "已经存在" 或者装到了错误位置。
2.2 Git 安装与全局配置,绕不开的基础设施
Harness 的 Skill 版本管理、工作流模板拉取,都依赖 Git。如果你的机器上还没有装 Git,别跳过这一步——这不是可选项,是必需品。
Windows 用户直接去 Git 官网下载安装包,一路默认选项即可。macOS 用户建议通过 Homebrew 安装:brew install git。Linux 用户则根据发行版选择 apt 或 yum。
装完后,先做一次全局配置,否则后续 Harness 帮你做代码提交时会报身份缺失错误:
git config --global user.name "你的名字" git config --global user.email "你的邮箱" git config --global init.defaultBranch main第三行是我自己加的,因为有些老版本默认分支名是 master,而现代仓库普遍用 main,提前统一能避免不少后续麻烦。
还有一个容易踩的坑:国内网络环境下,从 GitHub 拉取 Skill 模板仓库偶尔会很慢甚至超时。如果你有代理工具,可以给 Git 配置代理,但这里不展开讲了。没有代理的情况下,多试几次,或者用镜像仓库地址替代也可以。
2.3 模型推理后端的选型:Ollama 还是 vLLM
Harness 本身不带模型,它需要对接一个推理服务。这里有两个主流选择,我简单对比一下。
Ollama 的优势是开箱即用,对硬件要求相对宽容,一条命令就能拉起模型服务。适合个人开发者、快速原型验证。缺点是并发能力一般,而且在工具调用(function calling)的稳定性上稍弱。
vLLM 的优势是吞吐量大、对 OpenAI 兼容接口的支持非常标准,适合团队级部署。缺点是需要自己处理模型下载、启动参数和显存规划,复杂度上了一个台阶。
我的建议是:如果你只是自己玩、搞搞清楚 Harness 的机制,直接用 Ollama 就行;如果是要放进生产环境给团队用,直接上 vLLM。下面我分别给出两种方式的启动示例。
Ollama 方式:
# 安装 ollama 后,拉取 deepseek 模型 ollama pull deepseek-coder # 启动服务,默认监听 11434 端口 ollama servevLLM 方式(以 Linux + CUDA 环境为例):
# 激活虚拟环境后安装 pip install vllm # 启动 OpenAI 兼容服务,模型名称按实际情况替换 python -m vllm.entrypoints.openai.api_server \ --model deepseek-ai/DeepSeek-Coder-33B-Instruct \ --port 8000 \ --tensor-parallel-size 2这里你需要注意,vLLM 的启动参数里--tensor-parallel-size需要根据你的 GPU 卡数和显存调整。规模小一点的模型(比如 7B 或 14B)用一张卡就够,不需要开张量并行。我犯过的错误就是盲目加大并行度,结果显存不足,启动直接 OOM。
关于显存估算,一个经验公式是:参数量(B)× 2 字节(半精度)≈ 模型权重所需显存,再加约 20% 的 KV Cache 和推理开销。也就是 13B 模型,半精度权重大约 26GB,再加推理缓存,最稳妥需要一张 40GB 显存的卡或者两张 24GB 的卡。
3. DeepSeek Harness 安装全流程实操
现在开始正题。我下面给出的安装步骤,全部基于我在 Linux 服务器(Ubuntu 22.04)上的实际部署经验。Windows 和 macOS 的差异点我会在最后单独说明。
3.1 拉取主程序并创建虚拟环境
先确认你已经按照前面章节准备好了 Python 和 Git。接下来创建项目目录、拉取主程序代码:
mkdir -p ~/apps && cd ~/apps git clone https://github.com/your-harness-repo/deepseek-harness.git cd deepseek-harness # 创建虚拟环境(如果你没有用 conda,用 python -m venv 也一样) python -m venv .venv source .venv/bin/activate这里我推荐把虚拟环境建在项目目录内部,好处是后面做版本回退、清理整套环境时非常干净。rm -rf整个目录就能一键卸载,一点都不残留。
3.2 安装核心依赖
主程序的依赖清单都在requirements.txt里。直接安装:
pip install -r requirements.txt如果你是国内网络,建议先配一个 pip 镜像源,不然个别依赖会下到怀疑人生。我一般用清华的 PyPI 镜像:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install -r requirements.txt这一步通常需要几分钟。过程中你可以去准备下一节的模型服务配置。如果中途遇到某个包编译报错,绝大多数情况是缺系统的编译依赖,比如build-essential、python3-dev,Ubuntu 上提前装好就能避免绝大多数问题。
安装完成后,可以顺手检查一下主程序是否正常引入:
python -c "from harness import config; print(config.__version__)"如果能正常输出版本号,说明核心环境没问题。如果这里报错,先不要往下走,排查环境问题比带着坏环境继续安装要划算得多。
3.3 初始化配置:配置文件和模型对接
Harness 的配置文件一般位于config/目录下,典型文件名是config.yaml。你需要把推理服务的地址写进去。
# config/config.yaml model: provider: "openai-compatible" base_url: "http://127.0.0.1:8000/v1" # 如果是 Ollama,则改为 http://127.0.0.1:11434/v1 api_key: "sk-no-auth-needed" model_name: "deepseek-coder" # 需要与推理服务实际加载的模型名一致这里有个关键点:Harness 对 OpenAI 兼容接口的适配是通过base_url和model_name两个参数来定位目标的。很多人在 Ollama 上走了弯路,就是因为忽略了 Ollama 的 API 路径本身也兼容/v1,只要模型名匹配就能通。
还有一个小坑:api_key字段不能留空,很多客户端库在请求头里发现缺失就会报 401。即使服务端并不校验 key,你也得填一个占位符,比如sk-local。这是我在实际联调时吃过亏的地方。
初始化日志和数据目录:
# 创建日志目录 mkdir -p logs # 初始化 python -m harness.cli init初始化命令会生成一些运行时需要的目录结构和默认数据文件。如果它在某个步骤叫你配置数据库路径,默认 SQLite 即可,除非你的场景有团队级并行访问需求,才需要切到 PostgreSQL。
3.4 验证安装:跑一个最小对话
到这里,主程序装好了,模型服务也启动了。先跑一个最简单的对话功能,验证整个链路:
python -m harness.cli run --prompt "用 Python 写一个计算斐波那契数列的函数"如果模型服务正常返回,你会看到终端里输出对应的代码。如果在这里出错,不要急着去搜报错信息,先按照下面三个方向排查:
- 模型服务端口是否真的在监听:
curl http://127.0.0.1:8000/v1/models看返回里有没有你配置的模型名。 - 配置文件里的
model_name是否与模型服务返回的 model id 完全一致。 - 日志目录下有没有明显的网络错误或 HTTP 状态码记录。
实话说,只要能成功跑通这一步,安装部分就算彻底完成了。后面就是真正发挥 Harness 能力的时间。
4. Skill 机制与编程工作流实战
安装只是万里长征第一步。DeepSeek Harness 真正值钱的地方,是它的 Skill 机制和可插拔的工作流设计。下面我用一个从零创建 Skill 到完成一次真实编程任务的完整过程,带你走一遍。
4.1 Skill 目录结构,一个技能就是一个文件夹
Skill 在 Harness 里不是一个抽象概念,而是磁盘上一块有固定结构的目录。下面是一个标准 Skill 的骨架:
my-custom-skill/ ├── SKILL.md # 技能描述文件,模型读懂它的入口 ├── scripts/ # 存放具体实现脚本 │ ├── run.sh │ └── analyze.py └── assets/ # 非脚本资源,比如参考文档、模板文件关键文件是SKILL.md。它采用 Markdown 格式,头部通常包含技能的元信息:名称、触发条件、输入参数、输出约定。下面是模板:
--- name: go-lint-checker description: 对指定 Go 项目执行静态检查和常见错误扫描,输出报告。 when_to_use: 当用户要求检查 Go 代码质量、寻找潜在 bug 时使用。 inputs: target_path: 要检查的项目目录路径 outputs: report_path: 生成的检查报告路径 --- ## 执行步骤 1. 接收 target_path 参数 2. 调用 scripts/run.sh 执行 go vet 和静态检查 3. 将结果写入 report_path你可能注意到,description和when_to_use这两行在模型决策中起决定性作用。模型会通过读取这两个字段来判断 "什么时候该调用这个技能"。我看到很多人创建 Skill 时在这两个字段上偷懒,结果就是模型永远想不起来用你的技能,搞得最后抱怨 "插件没用"——实际上是描述写得不到位。
Skill 写好之后,放在 Harness 的skills/目录下即可。为了让命名规范统一,我习惯每个 Skill 目录用中划线连接的小写单词,避免空格。
4.2 部署 Skill 到内网服务器:从本地到生产
你很可能会有这样一个需求:在本地开发调试了一个 Skill,需要把它部署到内网生产服务器上。实际上线前,有几个关键步骤。
手动方式很简单,把整个技能目录通过scp之类的工具拷贝到服务器指定目录,然后重启 Harness 服务进程,让它重新扫描一遍技能目录。这种方式简单直接,缺点是版本容易混乱。
更推荐的方式是用 Git 来管理技能集。在服务器上克隆技能仓库,然后创建一个软链接到 Harness 的 skills 目录:
# 在服务器上 cd ~/apps/deepseek-harness/skills ln -s /data/skills-repo/my-custom-skill my-custom-skill这样你更新技能时,只需要在技能仓库里git pull,Harness 每次加载时自动就能发现最新内容。不需要重启,隔离性和可回滚性都得到了保证。
4.3 用 Skill 完成一次真实的编程任务
理论说完了,来个实际任务串一遍。假设我要让 Harness 完成这样一个需求:"帮忙写一个 MapReduce 风格的词频统计程序,基于 Go 实现,并跑一遍单机测试。"
我提前准备了一个 Skill,名字叫mapreduce-go,它内部配置好了 Go 项目骨架生成逻辑和标准的 MapReduce 样例。实际调用时,我在 Harness 里输入指令:
使用 mapreduce-go 技能,帮我生成一个 MapReduce 词频统计程序,然后运行测试。Harness 收到指令后的处理流程大致是这样的:模型先读取mapreduce-go的SKILL.md描述,理解它能够做什么,然后调用技能目录下的脚本按预置流程完成项目初始化和代码生成,最后执行测试命令并返回结果。整个过程不需要人工手写每一步代码。
我在实际测试中,让技能脚本生成好项目后,追加了一个额外的要求:把输出结果按照词频降序排列。Harness 会在现有生成代码上继续修改,最终输出一个标准格式的结果文件,同时提供测试通过的日志。整个过程让人感觉像在和一位熟悉项目约定的协作者对接,而不是在和一个通用聊天机器人对话。
4.4 正确配置 Skill 执行权限,别被权限报错卡住
如果你在 Windows 上运行 Harness 并调用时会读写文件的 Skill,大概率会遇到这样的报错:
setnamedsecurityinfow failed (win32, error 5)这个报错就是 Harness 的沙箱机制在尝试给目标文件设置安全描述符时,进程权限不足导致访问被拒。我第一次遇到时还以为是文件被占用,其实不是。
解决办法分几步:
- 以管理员身份运行你的终端;如果你用 IDE 内置终端,也要确保 IDE 本身以管理员身份启动。
- 在 Harness 的配置文件中,把工作目录指向一个有写权限的路径,比如
C:\work而不是C:\Program Files\下面的目录。 - 检查你的项目目录是否被文件夹安全策略限制,必要时给当前用户赋予 "完全控制" 权限。
这个问题的根源在于 Harness 为了安全默认启用了 Windows 安全描述符设置,而某些目录(尤其是系统保护目录)不允许普通进程修改 ACL。理解了原因之后,处理起来就很有方向感了。当然,如果实在绕不开,直接把对应的 Skill 配置成no_acl_set: true也是一种选择,但这样做会降低安全等级,建议只在内网调试环境使用。
4.5 编程类 Skill 的推荐清单
作为目前在 Coding 方向的使用者,我整理了一份我自己最常搭配的 Skill 清单。这些技能的作用范围覆盖代码生成、质量检查和文档撰写。
- 代码规范检查器(Code Linter):对指定项目运行语法检查和风格检查,输出问题明细。
- 项目结构生成器(Project Scaffold):根据语言和用途生成项目骨架目录,减少手工搭建成本。
- Git 提交消息生成器(Commit Message Gen):读取
git diff分析变更内容,自动生成符合团队模板的提交信息。 - 单元测试骨架生成器(Unit Test Gen):对目标代码文件分析函数签名和依赖,生成基础的测试用例骨架。
- 文档注释生成器(Docstring Writer):扫描代码文件缺失的注释和文档块,规范化生成。
这些 Skill 的名称和触发词,我建议你用团队内部最自然的叫法。比如我们后端团队习惯把代码规范检查叫作 "代码体检",我就直接把当触发词写进去,实测模型识别度很高,很快就能建立使用直觉。
5. 插件与工作流,从单点能力到工程级协作
Skill 是单个原子能力,而插件和工作流是把多个 Skill 组织成完整业务流程的编排层。Harness 在这方面的设计理念很像后端开发里的 "中间件" 思想:每个环节都可以插拔、组合、复用。
5.1 工作流插件的核心逻辑
Harness 工作流的定义文件通常是一个 YAML 或 JSON 结构,描述了几个阶段和每个阶段调用的子技能。举一个实际的例子:"代码合并前自动走查流程":
name: pre-merge-review description: 拉取 PR 分支后,依次执行代码体检、单元测试生成和受影响模块范围分析 on: trigger: "merge_request" branch_filter: "^(main|release/.*)" stages: - name: lint skill: go-lint-checker - name: test_impact skill: test-impact-analyzer - name: report skill: summary-report-generator当这一流程被执行时,Harness 会按照阶段顺序依次调用 Skill,前一个阶段的产出会作为后一个阶段的部分输入。这就是工作流和单个 Skill 在体验上的核心区别:前者给你一条完整的路径,而后者只是单个节点。
再加一条个人经验:定义工作流时,阶段的拆分粒度不要太粗,也不要太细。太粗会导致单个 Skill 承担过多职责,出问题难定位;太细则又多出很多无关紧要的中间步骤,拖慢整体执行时间。我一般按 "检查 -> 生成 -> 汇总" 三段式来设计,既完整又清楚。
5.2 插件推荐与选择标准
关于插件,我最常被问到的问题是:DeepSeek Harness 做 Coding 开发最应该装哪些插件?
直接给结论,在我自己的实战环境中,下面几类插件优先级最高:
- 代码索引类插件:为 Harness 提供项目符号索引和定义跳转能力,让模型能回答 "这个函数从哪里定义" 之类的问题。
- CI 集成类插件:让 Harness 能触达已有的 CI 系统(比如 GitLab CI 或 Jenkins),方便在出问题时自动重跑失败用例。
- IDE 联动类插件:把 Harness 的回话和 IDE 编辑器联动起来,实现文本块直接插入、文件定位等功能。
- 知识库检索类插件:在 Harness 的上下文中接入团队内部文档,让模型给出建议时能引用团队自己的经验沉淀。
选择插件的标准,我一直遵循一个原则:看它是否能支撑 "闭环动作"。如果一个插件只能让模型回答问题,不能让它触发某个动作,那它在 Harness 的语境下价值就打了折扣。所谓闭环,是说给出答复之后还能继续完成 "写文件、跑测试、更新状态" 等后续操作。
5.3 内网离线环境的插件部署要点
考虑到不少团队的生产环境是内网隔离的,我再单独讲一下离线部署的要点,这也是热搜词里被反复提及的高频诉求。
离线环境中最大的问题是网络限制。无论是 Harness 本体还是插件,大部分发布物都依赖公网仓库。我的经验是:
- 在能联网的机器上用
pip download把所需依赖包全部打包成离线 wheelhouse。 - 把 Harness 的插件仓库以 bundle 形式导出,拷贝到内网后通过包管理命令离线安装。
- 将模型文件通过离线介质(移动硬盘、内网文件服务)导入到推理服务器指定模型目录。
然后注意模型加载这一步。哈内网机器上如果 Ollama 或 vLLM 的模型缓存目录里没有对应模型文件,启动服务时会因为尝试联网拉模型卡住。提前确认模型文件被正确放置是关键。内网部署慢一点没关系,但要稳。所以部署完第一件事就是把所有依赖归档好,放到团队的内部制品库,方便后续其他机器复制环境。
6. 常见问题与故障排查实录
部署运行一段时间后,你大概率会遇到下面这些场景。我把它们统一整理成问题速查表,结合我自己的排查经验,给你一份可以直接照着做的参考。
6.1 Windows 权限类问题速查
| 症状 | 可能原因 | 快速解法 |
|---|---|---|
setnamedsecurityinfow failed (win32, error 5) | 进程对目标文件无 ACL 修改权限 | 管理员运行终端和 IDE;或工作目录改到普通用户路径下 |
| 技能脚本执行失败但手动运行正常 | Harness 沙箱对脚本的启动方式不同 | 检查脚本是否有执行依赖的环境变量 |
| 文件读写正常,但 Skill 日志中为空 | 日志目录本身无写权限 | 检查日志目录权限,尝试修改目录 ACL |
6.2 模型服务连接类问题速查
| 症状 | 可能原因 | 快速解法 |
|---|---|---|
| 请求返回 404 | base_url路径缺了/v1或模型名不匹配 | 确认路径包含/v1,并检查服务返回的 model id 是否与配置一致 |
| 返回 401 | api_key字段为空 | 填一个任意占位符,不要求语义 |
| 请求超时 | 模型推理速度慢或显存不足在排队 | 检查显存利用率和推理服务的排队日志,必要时缩小并发 |
6.3 内网部署中的典型问题与解决
内网场景最典型的报错之一是安装依赖时出现 SSL 错误。这种错误通常是因为内网环境的 PyPI 镜像没有配置好,或者机器上的证书链不完全。解决手段是把 pip 指向内网镜像,并且配置可信任的证书。如果公司内部有统一的制品源,优先配成走公司内网源,这样最省心。
另一个高发问题是模型加载时的半途报错。具体表现是模型服务进程启动失败,日志里看到类似 "Failed to load model" 的信息。这通常和模型文件缺失或者版本不匹配有关。宁可在下载模型文件时多花时间校验完整性,也不要省这一步,不然加载过程会变得极难排查。
6.4 我踩过的三个坑,请你直接避开
第一个坑:在 Windows 上以非管理员模式运行。之前我为了图方便,用普通终端的 PowerShell 去启动 Harness,结果调用文件型 Skill 时频频报权限错误。折腾了半个下午才意识到是这个问题。所以如果你在 Windows 上做正式部署,第一件事就是把开发终端习惯改为 "以管理员身份运行"。
第二个坑:忽视了模型名的精确匹配。在某一次实验里,我配置里写的是deepseek-coder,但 vLLM 服务加载完成后实际暴露的模型名带了版本后缀。结果 Harness 请求时提示模型不存在,而配置检查看上去每个字段都没问题。后来直接在服务端curl查询模型列表才发现了这个差异。遇到连接类问题,永远先把服务端返回结果放在排查金字塔的最顶层。
第三个坑:把SKILL.md写得过于抽象。因为这段描述是要被模型阅读的,如果你的描述太过宽泛,模型会在其实不该调用这个 Skill 的时候调用,或者在该调用的时候干脆不调用。我自己调试过的显著改善做法是,在when_to_use里给出几个清晰的正反例子,例如 "当用户要求检查 Go 代码质量时使用;但不适用于前端项目,因为此技能只关注 Go 语言"。越具体,模型的行为就越可预测。
7. 从安装到生产力,还差几步
说到最后,我想把视角稍微拉高一点。安装一个工具只是开始,真正的生产力来自你愿意在它的设计上投入多少理解与打磨。
如果你准备在日常开发中使用 Harness,我建议从一个小技能开始,先解决你最高频、最痛的那个问题。比如你们团队每次代码提交前都要手工跑一遍静态检查,那你就先做好一个 Lint Skill,把它接入推动流程。先把这一个环节跑通,感受到摸得着的收益,再逐步扩展技能库和工作流。不要一上来就贪大求全,否则会淹没在配置和维护的细节里。
我的另一个建议是,给自己的 Skill 库设定一个更新节奏。每隔一两周,回顾一次哪些技能有用、哪些技能几乎没人用。这种管理方式跟做产品迭代没什么两样,你必须刻意观察模型的调用日志以及团队的使用反馈,然后把精力集中在真正产生价值的方向上。
最后分享一个我很喜欢的小技巧:我会在 Harness 的日志配置里开启完整的 Skill 调用链记录。这样每次看到一个异常结果,我都能反推模型在调用什么技能时做了什么决定。这个过程像看 AI 的思考过程,非常锻炼人对工具的直觉。你不需要追求把每个环节都弄懂,但至少要能看懂调用路径,这能帮你快速界定问题到底出在模型、技能还是环境。