• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chunqiuyiyu
V2EX  ›  程序员

两天从零开发了 DeepSeek 专属 Agent,我学到了什么?

  •  
  •   chunqiuyiyu · 7h 50m ago · 2400 views

    前几天,我在网上看到一篇介绍 AI Agent 原理的文章,于是产生了一个想法:能不能从头开发一个自己的 AI Agent ?毕竟只有了解 Agent 的工作原理,使用各种 Agent 工具时,才能更加得心应手。

    其实,Agent 的核心并不复杂。它本质上是一个循环:接收用户输入,将上下文发送给大模型,根据模型返回的结果调用内部工具,再把工具结果交给模型继续处理,直到任务完成。

    我用了两天时间,开发出了 sekrun 。它已经发布到 npm ,现在通过一条 npx 命令就能直接运行。后端接入的是 DeepSeek V4 Flash 。我很喜欢这个模型:响应迅速、体验流畅,编程能力也不错。对于我目前的开发需求来说,已经完全够用。

    执行任务时,sekrun 会显示每一步工具调用,以及对应的耗时和 Token 消耗。每轮生成结束后,还会列出:工具调用步骤数、输入与输出 Token 数量各缓存命中率,这样使用时就能清楚看到额度消耗,主打一个透明。

    DeepSeek 本身的上下文缓存价格就很低。开发 sekrun 时,我也针对缓存命中做了一些优化,让它可以用更低的成本处理更多 Token 。sekrun 本身也是用它自己开发出来的,它是一个可以自举的 Agent 。整个开发过程消耗的模型费用大约两块钱,一根雪糕的价格。

    最开始,我考虑过使用 Zig 开发。技术论坛里面对这个语言吹得天花乱坠,也有人说进入 AI 编程时代以后,开发语言已经不重要了。但仔细考虑后,还是放弃了。Zig 目前仍处于快速发展阶段,标准库和 API 还可能发生较大变化。更重要的是,我开发 Agent 是为了长期处理真实任务,而不是做一个只能展示的玩具项目。即使代码主要由 AI 编写,我也必须看得懂它写了什么,才能判断实现是否合理,把握整个项目的质量。最后选择了自己非常熟悉擅长的 JavaScript 。

    因为目标是学习 Agent 原理,目前 sekrun 没有使用任何第三方依赖。终端界面、工具调用、流式输出、会话管理和 Token 统计,都是从零实现的。也希望大家不要过度歧视 JavaScript 。语言只是工具,真正决定项目质量的,仍然是使用工具的人。AI 写代码的速度已经快到人很难跟上。开发过程中适当慢下来,理解每一次修改,反而更容易保证项目质量。

    在保证任务准确率的前提下,我目前主要通过以下方法减少 Token 消耗并提高缓存命中率:

    第一,截断内部工具的输出。工具可能返回大量日志和文件内容,但模型通常不需要看到全部结果。只保留与任务有关的部分,可以显著减少上下文长度。
    第二,压缩历史对话。当对话越来越长时,将较早的内容总结成简短记录,而不是永久保留所有原始消息。

    第三,丢弃孤立的工具消息。如果工具调用已经失去对应的上下文,继续保留这些结果只会浪费 Token ,还可能干扰模型判断。

    第四,固定系统提示词前缀。尽量让系统提示词和工具定义保持稳定,使更多上下文能够命中 DeepSeek 的缓存。

    因为这是自己从零开发的工具,我可以随时加入自己喜欢的功能。例如,我还实现了类似 Fish Shell 的输入感知和智能补全,可以根据当前输入推荐命令和历史内容,减少重复输入,提高开发效率。

    这就是我开发 sekrun 的过程。它目前仍然是一个非常早期的项目,功能也无法与成熟 Agent 相比。但从零实现工具调用、上下文管理、缓存优化和终端交互,让我真正理解了 Agent 是如何工作的。

    整个过程很有趣,我也学到了很多,分享给大家。

    preivew

    18 replies    2026-06-17 14:38:18 +08:00
    xiaoz
        1
    xiaoz  
       7h 11m ago via Android   ❤️ 1
    开源没有?
    chunqiuyiyu
        2
    chunqiuyiyu  
    OP
       7h 10m ago   ❤️ 2
    JShen
        3
    JShen  
       6h 35m ago   ❤️ 1
    写的蛮简洁的,麻雀虽小五脏俱全。很适合学习,我刚改造了一下适配 mimo 也很快。试用了一下还可以啊。
    chunqiuyiyu
        4
    chunqiuyiyu  
    OP
       6h 34m ago
    @JShen 谢谢称赞,我自己也在用这个工具,一边用一边改😘
    magicZ
        5
    magicZ  
       6h 20m ago   ❤️ 1
    cool ,这就去看看
    chunqiuyiyu
        6
    chunqiuyiyu  
    OP
       6h 19m ago
    @magicZ 欢迎给出建议,比较简陋也有 bug ,但该有的功能都有了。
    limber
        7
    limber  
       5h 53m ago   ❤️ 1
    可以分享下介绍 AI Agent 原理的文章吗
    2333wz
        8
    2333wz  
       5h 41m ago   ❤️ 1
    狠狠给⭐存档了
    ldyisbest
        9
    ldyisbest  
       5h 29m ago   ❤️ 1
    看完了,学到了很多,写的很棒👍
    chunqiuyiyu
        10
    chunqiuyiyu  
    OP
       5h 9m ago
    @limber 网上有很多,我主要参考的是这个: https://minimal-agent.com/
    chunqiuyiyu
        11
    chunqiuyiyu  
    OP
       5h 8m ago
    @2333wz
    @ldyisbest 感谢感谢😘
    limber
        12
    limber  
       3h 33m ago   ❤️ 1
    @chunqiuyiyu #10 谢谢
    PopRain
        13
    PopRain  
       3h 21m ago   ❤️ 1
    先星为敬,学习一下,准备改为 c#
    bjfane
        14
    bjfane  
    PRO
       3h 16m ago   ❤️ 1
    已 star ,赞,从 0 还是有诱惑,什么依赖都没有,bun run 直接跑,没有 npm 包带毒的问题,什么都掌握,
    从成熟库的角度,引入大量引用的库(质量高) 可能会让代码更简洁,也有可能更本身健壮。 是不是可以搞个两版
    chunqiuyiyu
        15
    chunqiuyiyu  
    OP
       3h 10m ago
    @PopRain 期待你的作品🙌
    chunqiuyiyu
        16
    chunqiuyiyu  
    OP
       3h 8m ago
    @bjfane 没必要,如果想用成熟的 agent ,deepseek 能接入的太多了
    lianggggg
        17
    lianggggg  
       3h 0m ago   ❤️ 1
    我这个也是 js 写的,自用很久了 https://github.com/LiangNiang/OpenMantis
    chunqiuyiyu
        18
    chunqiuyiyu  
    OP
       2h 34m ago
    @lianggggg 很棒👍
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5254 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 09:12 · PVG 17:12 · LAX 02:12 · JFK 05:12
    ♥ Do have faith in what you're doing.