前言

之前分享过《大道至简:拒绝臃肿框架,用飞书与原生脚本打造极简私人 Agent》,聊到了如何用最朴素的方式让 AI 接管服务器运维。今天想深入一层,从源码架构的角度,复盘一下 Lite Agent 这个项目的设计取舍——为什么敢说"零外部依赖"?又是如何做到的?

如果你看过我前两篇文章——关于账单自动解析工具刷 OpenWrt,你会发现一个共性:能用原生方案解决的问题,绝不引入第三方框架。Lite Agent 把这个理念贯彻到了极致。


一、零外部依赖不是噱头,是设计原则

很多人听到"AI Agent"第一反应就是 LangChain、AutoGPT、CrewAI……动辄几百 MB 的依赖。但 Lite Agent 的核心引擎,全部使用 Python 内置库 实现:

模块使用的内置库用途
HTTP 请求urllib调用 DeepSeek API
数据库sqlite3会话管理 & 记忆存储
并发threading多轮工具调用编排
JSON 解析json结构化数据交换
日志logging全链路调试追踪

唯一的外部依赖是飞书官方 SDK lark-oapi——这是接入飞书 WebSocket 所必需的,而且那是平台 SDK,不是框架。也就是说,核心引擎本身做到了 0 pip install

为什么这么执着?因为依赖越少,维护成本越低、故障点越少、部署越丝滑。


二、Skill Engine:一秒钟把脚本变成 AI 工具

项目最核心的设计是 Skill Engine(动态技能引擎)。它的工作流如下:

用户自然语言 → DeepSeek 理解意图 → 匹配技能 → 调用本地函数 → 返回结果 → AI 组织回复

关键在"匹配技能"这一步。Lite Agent 的做法极简:

  • 每个技能是一个普通的 Python 函数,加上 @skill 装饰器和类型注解
  • 启动时自动扫描 skills/ 目录,动态生成 Tool Calling 的 JSON Schema
  • 调用时通过 threading 异步执行,超时自动熔断

看一个实际例子——账单查询技能的核心代码结构:

@skill
def billing_report(months: int = 3) -> str:
    """生成月度财务汇总报表"""
    # 直接操作 SQLite,零 ORM
    data = query_from_sqlite(months)
    return format_as_table(data)

没有复杂的抽象层,没有 Chain、Graph、Pipeline 那些概念。函数即工具,就这么简单。

这个设计直接继承了我在账单解析工具中的思路:复杂逻辑靠 Python 本身搞定,框架只做调度


三、深度思考模型的完美适配

用 DeepSeek-R1 / V4-Pro 这类推理模型做 Tool Calling,有个大坑:思维链(reasoning_content)和工具调用请求会交错出现,很多框架在这个场景下疯狂报 400 错误。

Lite Agent 的解决方案也很朴素:

  1. 逐帧解析:对 API 返回的 SSE 流,逐条判断是 reasoning_content 还是 tool_calls
  2. 无损透传:思维链内容完整保留在会话上下文中,不影响下一轮调用
  3. 自动适配:根据模型版本自动注入 reasoning_effort 参数

这不需要什么高深的技术,就是对协议细节的尊重——认真读文档,认真处理边界情况。


四、飞书直连:内网穿透?不需要

传统机器人方案需要公网 Webhook,意味着你得有公网 IP 或者 frp/ngrok 隧道。Lite Agent 另辟蹊径——用飞书 WebSocket 直连

用户发消息 → 飞书服务器 → WebSocket 推送 → VPS 本地处理 → WebSocket 回复

优势很明显:

  • 不需要公网 IP,内网 VPS 也能用
  • 不需要域名 + HTTPS 证书
  • 延迟更低,省去 HTTP 握手开销

这个灵感来源于我刷 OpenWrt 那篇文章——能用系统自带的能力解决问题,就别引入额外组件


五、会话记忆与任务编排

sessions.db 是 SQLite 单文件,记录了每一轮对话的:

  • 用户意图(Intent)
  • 当前目标(Goal)
  • 已完成步骤(Steps)
  • Token 消耗(Token Usage)

当用户说"帮我检查一下这个月的账单,顺便看看系统安全状况",引擎会自动:

  1. ✅ 目标分解 → 拆成 2 个子任务
  2. 🔄 顺序执行 → 先查账单,再查安全
  3. 📊 汇总结果 → 用自然语言整合回复

整个过程完全异步,支持中途打断、追问、纠错。


六、性能与资源占用

实测数据(1C2G 轻量云 VPS):

指标数值
进程常驻内存~45 MB
冷启动时间< 0.3 秒
单次工具调用耗时~200ms(不含 LLM 推理)
飞书消息往返延迟~1.5s(含 DeepSeek 推理)

对比 LangChain 系框架动辄 200MB+ 的常驻内存,Lite Agent 简直就是一股清流。


七、总结与展望

从去年开始做这个项目,初心一直没有变:用最轻量的方式,让 AI 真正帮我们干活

  • 不用 Kubernetes 编排 Agent
  • 不用 VectorDB 存记忆(我甚至集成了 Chroma 但默认不启用)
  • 不用 Message Queue 做异步

能用 dict 解决的问题,就不用 ORM;能用 sqlite3 解决的问题,就不用 PostgreSQL;能用函数解决的问题,就不用框架。

这就是 Lite Agent 的架构哲学。

代码完全开源:github.com/maifeipin/lite_agent,欢迎 Star ⭐ 和 PR。

下一篇打算写写 Memory Engine 的设计——如何在不依赖外部向量数据库的情况下,实现语义级别的长期记忆。敬请期待!