一天一个开源项目(第246篇):rec —— Recursive 自研的本地推理引擎,在 Mac 上跑 Flint 编码模型,称比 llama.cpp 快 1.4–2.6 倍

0 阅读9分钟

引言

"Our lightning-fast inference engine."

这是"一天一个开源项目"系列的第 246 篇文章。今天带你了解的项目是 rec(recursive-oss/rec)。

本地跑模型这件事,大家已经有 llama.cpp、Ollama、LM Studio 这些成熟选项。rec 走的是另一条路:不做通用,只服务一个模型和一类场景。它是 Recursive 公司专门为自家 Flint 语言模型写的推理引擎,目标是让编码智能体在 Mac 上本地跑起来足够快。

需要先说清楚:这是一个很新、很小的项目(写作时 151 Stars、6 个 commits),对它的评价要克制。本文会重点讲它怎么用、边界在哪,以及哪些说法目前只是项目自述。

你将学到什么

  • rec 的定位:为什么是"专用推理引擎"而不是又一个 llama.cpp
  • 硬件要求与安装方式
  • rec launch 与 rec serve 两种使用姿势
  • OpenAI / Anthropic 兼容的本地 API 怎么接
  • 命令一览
  • 性能声明的测试条件,以及该怎么看待它

前置知识

  • 用过本地 LLM 工具(Ollama、llama.cpp、LM Studio 任一)
  • 了解 OpenAI 兼容 API 的基本调用方式
  • 对编码智能体 harness(如 OpenCode、pi)有基本概念

项目背景

项目简介

rec 是在本机运行 Recursive 公司语言模型 Flint 的自研推理引擎,面向单会话场景。Flint 在文档里的定位是"fast, local agentic coding",即快速的本地智能体编码模型,既能本地跑,也能云端跑,再接入编码工具(harness)。

rec 的职责可以拆成三件事:

  1. 自动下载模型,并在 Mac 上高效推理
  2. 自动配置并启动编码 harness(pi 或 OpenCode)
  3. 对外提供本地 OpenAI / Anthropic 兼容 API,方便接入自己的客户端

作者/团队介绍

  • 组织:recursive-oss(Recursive 公司)
  • 文档站称 Flint 由其自研的 "autoresearch" 系统 "Eureka Machine" 构建
  • 具体个人作者和贡献者名单:项目页未展示
  • 项目创建时间:未提供

项目数据

  • ⭐ GitHub Stars: 151
  • 🍴 Forks: 16
  • 📝 Commits: 6
  • 🐛 Issues: 7,Pull requests: 4
  • 📄 License: Apache-2.0
  • 📚 文档: docs.recursive.com

主要功能

核心作用

在 Apple Silicon Mac 上,用比通用运行时更快的速度本地跑 Flint,并把它顺手接到编码智能体里。

使用场景

  1. 本地编码智能体

    • 用 rec launch pi 一条命令起模型加 harness,代码不出本机。
  2. 给自己的客户端提供本地模型

    • 通过 OpenAI 兼容接口 /v1/chat/completions 接入任何兼容客户端。
  3. 给 Anthropic 协议的工具接入本地模型

    • 通过 /v1/messages 接口,把 ANTHROPIC_BASE_URL 指向本地服务。
  4. 对比本地推理引擎的吞吐

    • 在同一台机器上与 llama.cpp 对照测试单会话解码速度。

快速开始

硬件与环境要求

  • Apple Silicon Mac,型号为 M4 Pro、M5 Pro 或 M5 Max
  • 至少 48 GB 统一内存
  • 约 30 GB 可用磁盘空间
  • 使用 pi 需要 Node.js 22 和 npm

安装

curl -fsSL https://raw.githubusercontent.com/recursive-oss/rec/main/install.sh | bash

rec 会安装到 ~/.local/bin 并加入新终端的 PATH,其余数据位于 ~/.local/share/rec。

启动

rec launch pi        # 官方推荐
rec launch opencode

首次运行会下载模型和 harness。关闭终端后服务继续运行,用 rec stop 停止。rec 的 harness 与系统里自己安装的相互隔离,可用 rec exec 在其环境里运行命令:

rec exec pi install npm:PACKAGE

官方特别提醒:rec 针对单会话优化。如果要多个 agent 并行,请参考官方文档里的其他运行方式。

使用自己的 harness

先启动服务(保持终端开启,出现 flint is ready. 后即可从另一个终端连接):

rec serve

想看 rec launch 用了哪些环境变量和命令行,可以只打印不执行:

rec launch --args pi
rec launch --args opencode

把其中的 harness 路径换成你自己的。如果想保留自己的设置与会话,需要去掉指向 rec 设置和会话的那几个变量。

直接请求 OpenAI 兼容 API:

curl -fsS http://127.0.0.1:11500/v1/chat/completions \
  -H "Authorization: Bearer $(rec auth token)" \
  -H 'Content-Type: application/json' \
  -d '{"model":"flint","messages":[{"role":"user","content":"Say hello."}],"max_tokens":128}'

其他客户端的配置:

  • OpenAI 兼容:base URL http://127.0.0.1:11500/v1,模型名 flint,API key 用 rec auth token 的输出
  • Anthropic 兼容:端点 http://127.0.0.1:11500/v1/messages,将 ANTHROPIC_BASE_URL 指向 http://127.0.0.1:11500,token 可作为 bearer 或 x-api-key 发送,模型名同样是 flint

核心特性

  1. 专用于 Flint 的推理引擎

    • 不追求支持所有模型,换来针对性的优化空间。
  2. 一条命令的本地编码环境

    • rec launch 自动下载模型、配置并启动 pi 或 OpenCode。
  3. 两套兼容 API

    • OpenAI 与 Anthropic 协议,本地即可接入现有工具链。
  4. 隔离的 harness

    • rec 管理的 harness 与系统安装互不干扰。
  5. 本地鉴权

    • 服务需要 rec auth token 生成的 key,而不是裸奔的本地端口。
  6. 完整的命令行管理

    • 启停、状态、模型下载、环境自检、升级、卸载齐全。

命令一览

命令作用
rec launch pi|opencode按需启动服务并打开 harness
rec exec pi|opencode ARGS运行 harness 命令
rec serve在当前终端启动模型服务
rec status查看服务是否运行
rec stop停止服务
rec auth token打印本地 API key
rec pull仅下载模型
rec doctor检查硬件与安装
rec update更新到最新版本
rec uninstall移除 rec、模型和设置

各命令的选项可以用 rec COMMAND --help 查看。

项目优势

项目自述的性能声明是:在 M4 Pro 上,与 llama.cpp 相比,吞吐为其 1.4–2.6 倍,上下文长度覆盖 1K 到 252K。

测试条件如下:

项条件
设备Apple M4 Pro(48 GB)
权重精度4-bit
输出长度1,024 个 token
重复每个上下文长度跑五次
统计范围不含 prefill

与其他方案的定性对比(项目页没有给出正式对比,以下是我基于其定位的整理):

维度recllama.cpp / Ollama / LM Studio
支持模型专用于 Flint通用,覆盖大量模型
硬件仅 Apple Silicon(M4 Pro / M5 Pro / M5 Max),48 GB 起范围广得多
并发针对单会话优化取决于具体运行时
开箱即用的编码环境自带 pi / OpenCode 一键启动需要自行配置
成熟度很新,6 个 commits久经考验

什么时候值得试?

  • 你有符合要求的 Mac,想在本地跑一个编码智能体
  • 你想亲自验证"专用引擎能比通用运行时快多少"
  • 你需要同时提供 OpenAI 与 Anthropic 两套本地接口

项目详细剖析

设计取舍:专用而非通用

rec 最值得讨论的是它的取舍。通用推理运行时要支持大量模型结构、量化格式、后端,代价是难以对某一个模型做到极致。rec 反过来:只服务 Flint,只服务 Apple Silicon,只优化单会话解码。

这种取舍的好处和代价都很明确:

好处代价
只支持 Flint可以围绕单一模型结构做针对性优化换模型就用不了
只支持高端 Mac可以假设统一内存带宽和容量硬件门槛高(48 GB 起)
只优化单会话解码延迟最优多智能体并行不是它的主场

项目结构

根目录可见 cli、engine、packaging、tests 等目录,以及 go.mod、.golangci.yml、ruff.toml 等配置文件,可以看出至少有 CLI 与 engine 的分层,并涉及 Go 与 Python 的工具链。语言占比和具体的引擎实现,项目页没有给出,这只是从文件名做的推测。

引擎内部具体做了哪些优化、为什么比 llama.cpp 快,项目页和文档站都没有说明,本文也就不做臆测。如果你想知道原理,需要读 engine 目录源码或等待官方的技术说明。

怎么看待那个"1.4–2.6 倍"

这是项目自己的测试结果,几点要留意:

  • 只算解码,不含 prefill。 编码智能体场景里长上下文的 prefill 往往占大头,而这个数字不包含它。
  • 单一机型。 只给了 M4 Pro 48 GB 的数据。
  • 对手是 llama.cpp。 版本、编译选项、量化方式的细节页面没有提供。
  • 模型不同。 rec 跑的是 Flint,对比是否在同一模型、同一量化上进行,页面也没有说明。

因此更稳妥的做法是:把它当作"值得自己复测的线索",而不是定论。

局限与需要留意的点

  • 硬件门槛高。 仅支持 M4 Pro、M5 Pro、M5 Max,且要 48 GB 统一内存和约 30 GB 磁盘。
  • 模型绑定。 它是 Flint 的引擎,不是通用运行时。
  • 单会话。 官方明确提示多 agent 并行要换运行方式。
  • 项目很早期。 6 个 commits,接口和行为可能变化。
  • curl | bash 安装。 生产或敏感环境建议先读 install.sh。
  • 文档站的信息有限。 模型架构、上下文长度、发布日期等,当前文档站首页都没有给出,需要看模型卡。

项目地址与资源

官方资源

相关资源

  • Flint 模型卡与发布状态:见文档站的 model card 与 releases 页面
  • 文档站列出的其他运行 Flint 的方式:Ollama、Unsloth、LM Studio、llama.cpp,以及 Hugging Face Transformers、SGLang、vLLM

总结与展望

核心要点回顾

  1. 专用引擎:rec 只为 Flint、只为 Apple Silicon、只为单会话优化,用通用性换速度。
  2. 开箱即用:一条命令安装,rec launch pi 就能得到本地编码智能体环境。
  3. 接口友好:同时提供 OpenAI 与 Anthropic 兼容的本地 API,并有本地鉴权。
  4. 谨慎看待性能声明:1.4–2.6 倍来自项目自述,仅限解码、单机型,值得自己复测。

适用人群

  • 拥有 48 GB 以上高端 Mac、想本地跑编码智能体的开发者
  • 关注本地推理引擎设计取舍的工程师
  • 想对比专用引擎与通用运行时差距的评测者

学习建议

先跑一遍 rec doctor 确认机器满足要求,再 rec launch pi 体验端到端流程。想验证性能声明,就在同一台机器上按它给出的条件(4-bit、1,024 输出 token、每个上下文长度五次)自己复测,并把 prefill 时间单独记录下来。


探索 PrimeSkills —— 精选 AI agent 和技能工具,每一个都经过真实工作流验证。没有炒作,只有真正好用的工具。

访问我的个人主页,获取更多见解和有趣的产品。