前言
之前分享过《大道至简:拒绝臃肿框架,用飞书与原生脚本打造极简私人 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 的解决方案也很朴素:
- 逐帧解析:对 API 返回的 SSE 流,逐条判断是
reasoning_content还是tool_calls - 无损透传:思维链内容完整保留在会话上下文中,不影响下一轮调用
- 自动适配:根据模型版本自动注入
reasoning_effort参数
这不需要什么高深的技术,就是对协议细节的尊重——认真读文档,认真处理边界情况。
四、飞书直连:内网穿透?不需要
传统机器人方案需要公网 Webhook,意味着你得有公网 IP 或者 frp/ngrok 隧道。Lite Agent 另辟蹊径——用飞书 WebSocket 直连。
优势很明显:
- ✅ 不需要公网 IP,内网 VPS 也能用
- ✅ 不需要域名 + HTTPS 证书
- ✅ 延迟更低,省去 HTTP 握手开销
这个灵感来源于我刷 OpenWrt 那篇文章——能用系统自带的能力解决问题,就别引入额外组件。
五、会话记忆与任务编排
sessions.db 是 SQLite 单文件,记录了每一轮对话的:
- 用户意图(Intent)
- 当前目标(Goal)
- 已完成步骤(Steps)
- Token 消耗(Token Usage)
当用户说"帮我检查一下这个月的账单,顺便看看系统安全状况",引擎会自动:
- ✅ 目标分解 → 拆成 2 个子任务
- 🔄 顺序执行 → 先查账单,再查安全
- 📊 汇总结果 → 用自然语言整合回复
整个过程完全异步,支持中途打断、追问、纠错。
六、性能与资源占用
实测数据(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 的设计——如何在不依赖外部向量数据库的情况下,实现语义级别的长期记忆。敬请期待!