ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

本地 Coding Agent 搭建实战:DeepSeek Harness 标准模式开发小游戏

本地 Coding Agent 搭建实战:DeepSeek Harness 标准模式开发小游戏 去年年底我搭了一套本地 Coding Agent 环境来协助日常开发主力用的就是 DeepSeek Harness。之所以没继续依赖云端编程助手一个很现实的原因是我们项目代码不能出内网但团队对 AI 辅助开发的需求又非常强烈。在对比了多种本地大模型部署方案之后我最终选择用 Harness 作为编排层配合本地模型从零开发了一个带界面的小游戏。整个过程走下来我对标准模式和思考模式的选择有了新的理解也攒了不少调教经验。这篇文章就是这次实战的完整记录。如果你正在纠结是否要本地部署 AI 编程助手或者已经开始用了但效果不理想希望这篇能给你一些参考。我会把环境搭建、模型选择、标准模式的取舍、实际编码过程中的协作方式还有踩过的坑都讲一遍——有些坑真的只有自己撞过才知道怎么避开。1. 为什么我把 Coding Agent 搬到本地三个绕不开的现实问题1.1 代码隐私与内网限制是硬约束先聊一个最直接的原因代码安全性。我们团队做的是内部业务系统代码仓库完全部署在私有网络里外部 API 根本调不通。这在很多技术团队里都很常见并不是什么特例。之前大家曲线救国的方法是用公网工具做完开发再回贴但效率太低而且一旦涉及敏感模块根本不敢往上放。后来我们把目光转向本地部署方案核心思路就一句话模型也好Agent 编排框架也好全都跑在本地数据不出机器。DeepSeek Harness 恰好支持这种方式。我把它装在公司一台配有 RTX 4090 的开发机上配合 ollama 拉取的本地模型一个完全离线可用的 Coding Agent 环境就搭起来了。1.2 云端 AI 编程工具的延迟与限流干扰心流用过在线版编程助手的朋友应该都有体会生成速度不稳定高峰期排队代码补全时断时续。对于短小的函数补全还好但一旦涉及跨文件的多轮重构这种不稳定的体验会严重影响开发节奏。本地部署之后最直观的变化是响应时间全部由本机 GPU 决定。走 Harness 的标准模式时由于减少了思考链的推理开销每次生成回复的速度明显更快。这一点的实际体验差别非常大——当 AI 能在我刚切回编辑器时就给出代码建议整个编码过程的心流就基本能保持住。1.3 模型自主可控还能长期省钱云端 AI 编程工具大多按席位收费一个团队几十个人一年下来不是小数目。而本地部署则是一次硬件投入持续优化。即使后续有更好的模型发布也只需调整模型拉取命令不需要额外付费。配合 ollama 的模型管理机制切换模型就像切换版本一样方便。这套组合对个人开发者和小团队尤其友好。一个人一台带独显的电脑就能获得一个不受额度限制、不出内网、24 小时在线的编程搭档。2. 本地环境搭建实录从模型拉取到 Harness 配置2.1 硬件与基础软件选型先交代一下我这边的环境方便你做参考操作系统Ubuntu 22.04 LTSGPUNVIDIA RTX 4090 24GB个人体验下来16GB 显存跑 7B~14B 模型也够用内存64GB模型运行时ollama也可以换成 llama.cpp 或 LM Studio但 ollama 对模型管理最省心编排框架DeepSeek Harness本地版目标语言Python开发小游戏最顺手在做环境准备前我建议先明确需求你是想写 Python 脚本、前端页面还是 C 项目不同任务对模型的代码能力要求不太一样。我做小游戏选了 Python所以模型选了 qwen2.5-coder:7b——这个模型在代码生成方面的社区评价不错显存占用也比较友好。2.2 ollama 拉取模型的完整过程ollama 的安装很简单一条命令就能跑起来。关键在于拉取模型时要选对版本。我第一次没加:7b后缀默认拉的是最新版模型体积大了不少加载时间也变长了。建议固定版本号方便管理。# 安装 ollama curl -fsSL https://ollama.com/install.sh | sh # 拉取代码专用模型7b 版本约 4.7GB ollama pull qwen2.5-coder:7b # 确认模型已就绪 ollama list如果你显存足够大比如 24GB 以上也可以考虑拉取 14b 版本代码理解和生成能力会更强但在标准模式下速度会慢一些。我的建议是先用 7b 跑通流程再根据实际效果决定是否升级到更大模型。2.3 DeepSeek Harness 的安装与连接本地模型Harness 的安装过程本身不复杂但有一点需要特别注意它默认的模型配置指向的是官方 API 地址本地部署时必须改成 ollama 的服务地址。在 Harness 的配置文件里我做了这样的调整model: provider: ollama base_url: http://localhost:11434 model_name: qwen2.5-coder:7b temperature: 0.2其中temperature: 0.2是个很重要的细节。Standard 模式下如果把温度调得太高比如默认的 0.7模型生成的代码会出现很多无意义的风格漂移调低到 0.2 之后代码生成结果的稳定性提升非常明显。2.4 验证连接跑一次最小化代码生成任务配置完成之后别急着开发先跑一个最小化任务确认连通性。我在 Harness 里简单输入请用 Python 写一个函数接收两个整数返回它们的最大公约数。如果模型配置正确几秒钟之后 Agent 就会返回对应的代码。这一步通过后整个链路就是通的了。3. 标准模式和思考模式的取舍为什么这个场景我选前者3.1 两种模式的本质差异DeepSeek Harness 内置了两种 Agent 工作模式标准模式Standard Mode和思考模式Think Mode。这两个模式我在不同任务里都用过差异非常明显对比维度标准模式思考模式推理过程直接给出答案不展示中间推理链先生成内部推理链再输出最终回答响应速度快适合交互式编码慢大段推理需要时间代码质量依赖 prompt 描述清晰度复杂任务中更稳适用场景小游戏、脚本编写、明确目标的任务复杂架构设计、跨文件重构标准模式有点像一位经验丰富的同事直接上手写代码而思考模式则像这位同事先自言自语把问题想透再动手。后者听着更靠谱但它有两个代价响应慢、显存占用更高。在 24GB 显存下跑 7b 模型思考模式对长上下文的处理更吃力多轮交互后会明显变卡。3.2 小游戏开发为什么适合标准模式带界面小游戏的特点是功能边界清晰、代码量适中、逻辑以 UI 事件驱动为主。这样的任务不需要大量的架构推演只要 prompt 里把需求和约束说清楚标准模式完全能胜任。我做的是记忆翻牌游戏Memory Match规则很简单16 张卡片8 对图案玩家翻开两张图案相同则消除全部消除即胜利。这类经典小游戏的需求描述互联网上到处都有模型在训练时也见过大量类似代码因此它不需要思考太多标准模式的快速生成、快速迭代路线刚好最匹配。3.3 标准模式下 prompt 描述的三条经验既然标准模式不展示思考链它对 prompt 的要求就更高了。我的经验可以总结成三条把需求拆成可验证的小块不要说做一个记忆翻牌游戏而是拆成生成一个 4x4 网格每张卡片是一个按钮点击时翻转显示图案匹配时卡片保持显示等具体条目。模型接收的描述越具体输出越接近预期。一次性说清界面布局和技术选型比如明确使用 tkinter 实现界面每个卡片由 Button 组件实现。这样能避免 Agent 自己在 Pygame 和 tkinter 之间反复横跳。在 prompt 里追加质量约束比如代码需要有清晰函数拆分添加简单的分数统计等。标准模式会严格执行输入的要求你不提的它大概率不做你提了的它大概率都能覆盖。4. 从零开发带界面的小游戏一次完整的 Harness 协作过程4.1 第一轮把模糊想法翻译成 Agent 能懂的需求刚开始我没经验直接输入帮我做一个记忆翻牌游戏。结果 Harness 返回的确实是一个能运行的 tkinter 程序但界面很素翻牌逻辑也只是简单翻转颜色完全没有图案匹配的过程。问题不在 Agent而在我——需求太模糊了。于是我把需求重写改成了结构化的描述用 Python tkinter 实现一个记忆翻牌小游戏。界面为一个 4x4 的按钮网格共 8 对卡片每张卡片背面显示?点击后翻转显示数字 1~8数字相同且不同的两张卡片同时翻开时视为匹配并保持显示状态不匹配则 1 秒后自动翻回。窗口标题为记忆翻牌游戏窗口大小 600x600。这一版需求提交后Agent 返回的代码质量提升非常明显。卡片翻转逻辑、匹配判断、自动翻回全部实现到位虽然界面还很朴素但已经是一个完整可玩的游戏了。4.2 第二轮增加计分和计时功能第一版跑通后我继续追加需求增加计分和计时功能。这次我在原 prompt 后面追加了一段在现有代码基础上增加以下功能在窗口顶部显示当前尝试次数和匹配对数。游戏开始时自动计时完成全部匹配时停止计时。全部匹配后弹出提示框显示所用时间和尝试次数。有趣的是标准模式在处理这类增量需求时表现很稳Agent 没有推翻之前的代码结构而是在原有类的基础上新增了属性和方法。这一步让我确定了标准模式小步迭代的协作节奏每次只加一两个功能点验证通过后再进入下一轮。4.3 第三轮界面打磨和细节调整功能完整之后我开始调整界面细节。比如卡片图案从数字改成 emoji 符号翻牌的视觉效果加上颜色区分。这里我用了一句关键描述将卡片的正面图案从数字改为水果 emoji如、、 等8 对卡片使用 8 种不同的水果。卡片背面保持统一的浅灰色。这一轮生成的代码已经像模像样了。目前这个游戏已经具备4x4 网格布局、8 对水果 emoji 卡片、点击翻牌、匹配保持、不匹配自动翻回、顶部计分板、计时器、胜利弹出提示。全程大概来回了 6~7 轮对话每轮的代码都能在本地直接运行验证。4.4 标准模式协作过程中的任务拆分心法做完这个项目再回头看标准模式下最核心的用法就是把大任务切成小任务一轮只解决一件事。这和给同事派活是一样的一次性丢十个需求过去对方很容易理不清优先级但一次只丢一两个明确任务质量和速度都会有明显提升。5. 踩坑实录Agent 生成的代码出问题后我是怎么排查的5.1 坑一tkinter 窗口闪退开发到第三轮时第一次运行 Agent 生成的代码窗口弹出后立刻闪退终端完全没有报错信息。这个坑非常典型我分享一下完整的排查思路。先在终端手动运行脚本发现仍然没有任何报错输出。但当我双击卡片时界面直接假死。直觉告诉我问题出在事件绑定或变量类型上。我逐步注释掉按钮的command回调函数后窗口恢复正常说明问题定位在回调函数内部。继续检查回调函数后发现Agent 在函数里使用了self.selected_card保存上一次翻开的卡片对象但第一次点击时该属性尚未初始化访问时会触发AttributeError。由于 tkinter 默认会吞掉回调里的异常所以终端完全没有报错。这个坑的根因其实不是 Agent 不行而是 tkinter 的事件处理机制对异常不敏感。排查的关键是把代码拿到终端里手动跑或者给回调函数加一层 try-except把异常打出来。5.2 坑二随机洗牌算法出现了不均匀分布有一版 Agent 生成的代码用random.sample生成卡片序列理论上没问题但运行多局后发现地图分布的随机性很差有时前几局卡片位置几乎一样。原因是 Agent 在创建卡片列表时误用了random.randint拼接列表由于没有移除已选元素重复出现的概率被人为放大了。这个问题的定位方法是连续开 10 局每局打印卡片序列发现某些数字频繁出现在同一位置。修正方式是明确要求 Agent 使用 random.shuffle 对卡片列表进行原地洗牌。Agent 修正后重新跑了 20 局分布均匀性恢复正常。5.3 坑三新需求让旧逻辑互相冲突有一次我同时要求增加重新开始按钮和点击卡片自动翻转Agent 生成的代码里新按钮的command没有正确调用重置函数导致重开一局后计时器还在继续走。这个 bug 暴露了增量迭代的一个隐患如果不在每一轮 prompt 里带上完整代码或关键函数名Agent 可能基于错误假设继续叠加功能。我的解决办法比较笨但有效使用 Harness 的上下文窗口特性每一轮 prompt 开头都带上当前完整代码再追加新需求。虽然会浪费一些 token但换来的是 Agent 对代码全局的把握更准确。6. 标准模式之外还可以尝试的扩展玩法6.1 让 Agent 写配套的自动化测试小游戏开发完后我用标准模式让 Agent 生成一份 pytest 测试文件用来验证洗牌算法和匹配判断逻辑。测试代码的生成质量整体满足要求关键是 prompt 要描述清楚哪些函数需要测、可能的边界值是什么。由于我们用的是标准模式Agent 不会主动多想所以我把边界条件直接列在 prompt 里比如测试洗牌后卡片总数等于 16测试洗牌后每张卡片出现次数等于 2测试点击两张相同卡片后匹配状态为 True这样生成的测试代码基本不需要修改就能通过。6.2 多智能体协作的开发规范初探DeepSeek Harness 的一个亮点是可以编排多个 Agent 实例。在实际使用中我发现多智能体协作的开发体验很有趣。我的做法是拆成两个角色一个负责代码生成一个负责代码评审。代码生成 Agent 完成功能代码评审 Agent 负责检查代码中的边界问题和风格问题。由于我用的是标准模式两个 Agent 之间的协作需要通过清晰的 prompt 约定角色边界。如果你也打算尝试多 Agent 协作建议提前在 prompt 里写明第一个 Agent 只生成代码不做解释第二个 Agent 只输出评审意见和修改建议不直接生成代码。职责越清晰协作越顺畅。6.3 本地模型的后续升级路径跑通记忆翻牌小游戏项目后我对本地模型的升级路径也有了一些自己的判断。如果后续要开发更复杂的项目比如带数据库的 Web 应用7b 模型的代码生成能力可能会成为瓶颈。到时的升级方案是在 ollama 中拉取qwen2.5-coder:14b显存 24GB 可以流畅运行。如果显存只有 8GB~12GB则考虑用qwen2.5-coder:7b配合更长的上下文窗口策略把每个 prompt 写得比之前更精细。如果机器没有独立显卡也可以退回 CPU 推理只是速度会下降不少标准模式的实时交互体验会打折扣。7. 本地 Coding Agent 的边界与我的最终体会7.1 模型能力不是唯一瓶颈Prompt 和拆分才是这个项目做下来我最深的一条感悟是标准模式下Agent 的上限由模型决定但下限由你的 prompt 决定。我之前总觉得模型能力越强输出越好。但实测下来哪怕用 qwen2.5-coder:7b 这样相对轻量的模型只要需求描述足够清晰、任务拆得足够细它依然能写出完整可运行的小游戏。反而有一种情况 Agent 容易翻车大段需求一股脑扔进去也没有说明技术栈还没有给出代码现状。这种情况下哪怕是顶配模型也很难猜中你想表达的真实意图。7.2 标准模式的实际应用价值快、稳、省如果让我给标准模式打一个标签我会选性价比。在本地硬件条件下它响应快、显存占用低、输出稳定。对于像小游戏、脚本工具、数据处理这类目标明确的任务它完全不输思考模式。而思考模式更适合那种问题都没想清楚的场景——你也不知道该怎么描述需求需要 Agent 带着你一起推理。但对绝大多数开发场景来说我们的需求其实是清晰的缺的只是一个能快速落地的执行者。标准模式刚好就是这个角色。7.3 最后再分享一个立刻能用的协作小技巧如果你刚准备在自己的机器上部署这套环境我强烈建议第一件事不是写小游戏而是做一个快速验证任务清单让 Agent 生成一个 Hello World 网页。让 Agent 修改样式并重启。让 Agent 在现有代码上增加一个按钮并绑定事件。这三步走完你基本就能摸清这套环境的脾气也就能对标准模式是否适合你的任务有一个基本判断了。本地 Coding Agent 的路子并不玄乎无非是模型 框架 清晰的交流方式。把这三件事做好了它真的能成为你电脑里最靠谱的编程搭子。
返回列表