InSoulForge项目解析:用 C++23 构建 Agent 执行系统:Jev 决策、异步工具与分层记忆

简介: InSoulForge 是一个基于 C++23/Drogon/Lua/SQLite 的轻量级 Agent 执行框架,聚焦模型调度、异步运行时、工具发现与分层记忆管理。它通过 Jev 专用决策模型降低生成成本,协程优化 I/O 等待,Lua 实现安全工具扩展,MCP 按需加载工具,并以批次事务维护记忆。非通用规范,重在可控性与可观测性。(239字)

把模型接口接入应用并不复杂,困难的是持续运行后的执行控制:哪些输入值得调用生成模型?工具如何异步执行?外部工具数量增长后,如何控制上下文?历史信息如何保留,又不让每次请求无限膨胀?

本文以开源项目 InSoulForge 的现有实现为例,介绍一套基于 C++23、Drogon、Lua 和 SQLite 的 Agent 执行架构。讨论限定在模型调度、异步运行时、工具发现与记忆管理,不涉及具体消息平台及其接入方式。

项目仓库:https://github.com/DreamDonghao/insoulforge。以下内容描述当前实现,不是所有 Agent 系统都必须采用的通用规范。

一、将决策与文本生成拆开

事件驱动的 Agent 不一定需要响应每一个输入。若所有输入都交给主力模型分析并生成结果,决策成本与生成成本便混在一起,也难以分别优化。

InSoulForge 将主要职责拆为三部分:

组件 职责 输出
Jev 对有明确选项的高频问题做优先判断 结构化选项、概率分布与置信度
Router LLM 未启用 Jev 或 Jev 无法确定时的决策 是否执行及执行策略
Executor 生成回复、规划并调用工具 工具调用或最终输出

它们不是每次都顺序执行的三个固定步骤。明确规则可以直接决定是否进入生成流程;Jev 有效且足够确定时,也不必再请求 Router LLM。

二、Jev:用专用模型处理结构化决策

不只是要求聊天模型输出 JSON

Jev 是 TypeSafe AI 的结构化决策模型,属于其称为 System One 的模型体系。它不生成开放式聊天正文,而是针对输入状态和带类型的问题返回结构化结果。Choice 类型提供选中项、各选项概率及置信度;另有用于评分和条件判断的问题类型。TypeSafe 官方介绍

对于“执行还是跳过”“选择什么语气”“采用哪个长度档位”这样的任务,调用方可以明确给出候选项及判定标准,让程序直接消费结果。相比生成一段分析再提取结论,这种接口将模型职责限定在清晰的决策边界内。

这并不意味着普通聊天模型不能提供结构化输出,而是两者的产品目标不同:Jev 专门面向软件中的判断任务,生成模型则继续负责开放式表达和复杂任务执行。OpenRouter 模型说明

在代码中用置信度控制交接

当前实现向 Jev 提交上下文、触发消息标识和多个 Choice 问题,分别判断是否执行、语气以及输出长度档位。执行选项包含 reply、skip 和 unclear。

程序校验结果后再决定流程:

输入事件 → 明确规则检查
             ↓ 需要模型判断
          Jev(可选)
             ├─ 有效且达到置信度阈值 → 采用决策
             └─ 不确定、响应无效或请求失败 → Router LLM
                                                ↓
                                     需要执行时进入 Executor

默认置信度阈值为 0.60,可在管理后台调整。程序读取的是决策的 confidence,不是 probabilities.reply。二者表示不同字段,不能相互替代,更不能将阈值直接解释为系统的实际正确率。

收益来自减少不必要的生成式判断

设每个适用事件都会先请求 Jev,平均费用为 Cj;其中比例 p 的事件需要 Router LLM 兜底,平均费用为 Cr。忽略其他差异时,决策阶段的期望费用近似为:

使用 Jev:Cj + p × Cr
只用 Router LLM:Cr

只有当 Cj + p × Cr < Cr 时,这一阶段才具有费用优势。这里尚未计入 Executor、重试及其他处理成本,也不能据此直接推导整个应用的成本降幅。

延迟同样存在取舍:直接采纳 Jev 结果的事件可以跳过 Router 请求,兜底事件则多了一次前置请求。因此应观察实际请求耗时、兜底比例和决策质量,再调整阈值,而不是直接套用模型厂商的宣传倍数。

三、以协程组织执行,而不是阻塞事件循环

后端使用 C++23 和 Drogon,以 drogon::Task<T> 表达可等待的异步操作。模型请求、HTTP 工具调用等 I/O 可以通过 co_await 串联,让控制流保持接近同步代码的阅读方式。

协程的价值是将等待与线程占用分离,而不是自动把任意函数变成非阻塞操作。同步文件操作、长时间计算或阻塞式第三方调用,放进协程后仍然会占用当前线程。

因此,执行路径需要区分三种状态:

  • 正在计算:当前线程实际执行代码。
  • 等待异步 I/O:挂起协程,完成后恢复。
  • 需要后台处理:由独立的任务生命周期管理,不能假设使用协程就已经隔离了计算负载。

同一会话的回复流程按状态排队处理。每次回复处理取得消息快照,并保留触发消息标识,避免将“用于理解语境的上下文”和“本次需要处理的事件”混为一谈。

四、给工具调用明确的执行预算

Executor 采用迭代式工具调用:请求模型、执行返回的工具、附加结果,再进入下一轮。没有边界时,查询失败或模型反复尝试都可能延长调用链。

当前实现设置最大迭代轮数,默认 8 轮,并在每次模型请求中提供当前轮次及剩余轮数。同轮包含多个工具调用时只计一轮,因此它是模型迭代预算,不是严格的工具调用次数上限。

最后一轮只开放回复或不回复等收尾工具;后端也会拒绝本轮未开放的工具,而不只是依靠提示词约束。配置为 1 轮时,首轮即只能收尾。

工具结果尽量包含具体失败原因,使模型能够区分参数错误、网络异常和远端业务失败。上下文保留必要的工具名称、参数与处理状态,但不长期保存完整工具结果,也不重复记录最终回复工具已有的正文。

这些机制限制单次执行的扩展范围,但不等同于费用硬上限:输入长度、模型价格和同轮工具数量仍会影响实际开销。

五、Lua 与 C++ 异步运行时如何协作

Lua 扩展的目标是让工具逻辑可以独立编辑和加载,而无需重新编译主程序。工具通过名称、描述、JSON Schema 参数和脚本定义对模型暴露能力。

关键问题不在于能否运行脚本,而在于脚本请求 I/O 时,宿主线程是否被阻塞。

当前实现通过 Lua 协程与宿主操作分发协作:

Lua 调用 http.request(options)
    ↓
coroutine.yield 返回操作描述
    ↓
C++ 校验并执行异步 HTTP 请求
    ↓ co_await 等待结果
C++ 将结果传回 Lua,恢复脚本

消息发送等宿主能力也采用操作分发方式。脚本不需要直接访问 C++ 对象布局,宿主则能明确控制哪些操作可用、参数如何校验,以及错误如何返回。

这种机制解决的是已暴露接口中的异步等待,并不让 Lua 成为安全沙箱,也不自动解决脚本中的死循环或长时间计算。脚本仍应作为受信任扩展管理;运行不可信代码需要另外设计隔离和资源限制。

六、MCP 工具按需展开,而不是全部注入

远程服务可能包含几十个工具。若每次请求都提交所有工具及完整参数 Schema,会增加输入长度,也使模型更难选择当前任务真正需要的工具。

当前 MCP 集成分为目录、查询和启用三个层次:

  1. 系统提示词只提供已启用服务的名称与用途描述。
  2. 模型使用 mcp_list_tools 查询目标服务,获取分页工具摘要。
  3. 模型使用 mcp_enable_tools 选择需要的工具,完整参数 Schema 从下一轮请求开始开放。

选择状态只属于本次回复,不在会话之间共享。后端检查本轮开放范围与工具定义版本,不允许模型在同一轮先启用、再直接调用尚未进入本轮定义的工具。查询分页大小、单次启用数量和单次回复工具总量均可配置。

当前客户端主要支持 Streamable HTTP 的工具发现与调用,不支持 stdio、OAuth 和完整 MCP 功能集。SSE 在完整响应结束后解析,不能处理所有长期连接场景。远程工具调用不自动重试,避免在结果不明确时重复产生副作用。

按需发现降低的是工具定义的常驻输入规模,并不构成权限隔离。服务是否可信、工具能访问哪些数据,仍需单独审查。

七、耗时任务:将启动与完成分成两个事件

图片生成等操作不适合一直占据当前工具迭代流程。当前设计让工具先返回任务已启动,再由后台任务负责执行和交付结果。

工具启动任务 → 返回任务标识 → 当前回复可以继续或结束
                    ↓
               后台执行与交付
                    ↓
               生成系统完成事件
                    ↓
               触发新的回复处理

同一会话同时只允许一个此类耗时任务,其他会话独立处理。完成后,结果及必要描述进入上下文,系统事件告知执行状态;失败也通过事件返回,让后续模型基于实际结果回应。

运行中任务不跨重启恢复。这是当前面向可重新发起任务的取舍,不适合直接用于要求持久化交付、严格审计或事务补偿的流程。

八、分层记忆与批次提交

近期上下文、短期记忆和长期记忆承担不同职责:近期上下文保留原始对话,短期记忆保存整理后的信息,长期记忆通过可选的 Embedding 服务向量化,存入 SQLite 后按余弦相似度检索。

长期记忆既可以在预处理时自动召回,也可以通过工具主动查询。未配置 Embedding 时,仍保留短期记忆能力。

维护流程采用“先计算,后提交”:

达到触发数量 → 复制最旧消息批次及补充上下文
    ↓
提取和整理记忆 → 准备向量 → 计算互动评分
    ↓ 全部成功
SQLite 事务写入结果 → 提交成功后移除对应旧消息

每个会话最多存在一个进行中的维护批次。网络请求在数据库写事务之外完成,避免在等待模型时持续持有写锁。任一准备步骤失败,结果不写入,消息保留,等待后续输入重新触发。

事务保证的是本次数据库写入的原子性,并不覆盖消息列表更新和进程崩溃之间的全部状态。当前没有持久化维护任务,也不宣称提供崩溃条件下的 exactly-once 语义。

这减少了恢复队列和中间状态的复杂度,但也明确了边界:若业务要求严格去重、跨重启恢复或可靠任务交付,就需要增加任务标识、持久化状态及幂等设计。

九、可观察性比单一成功率更有用

管理后台使用 Vue 3,集中展示模型配置、工具状态、执行参数、日志和请求记录。对于这类多阶段系统,排查问题时应区分:

  • Jev 是否成功返回,决策是否因置信度不足而兜底。
  • Router 与 Executor 是否使用了预期模型。
  • 工具是否实际调用,还是模型仅在文本中声称执行过。
  • 远程操作是否完成,以及结果是否成功交付。
  • 记忆计算是否成功,数据库结果是否提交。

HTTP 200 只表示请求在该层面成功,不能代替业务校验。空结果、缺少字段和无法交付的输出,都需要在对应层面识别。

请求记录也不是可以无条件公开的调试材料:提示词、工具参数和返回内容可能包含敏感数据,应限制访问,并在分享前检查脱敏情况。

总结

这套架构的重点不是把所有工作都交给更大的模型,而是拆分不同类型的责任:用 Jev 处理有边界的结构化决策,用 Router LLM 处理不确定情况,用 Executor 组织执行;通过协程等待 I/O,通过 Lua 和 MCP 扩展工具,通过批次处理与事务维护记忆。

这些设计提供了控制延迟、调用范围和系统复杂度的手段,但不自动保证更低成本、更高准确率或可靠交付。实际效果仍需要结合负载、模型表现和失败模式验证。

代码与实现细节见 InSoulForge 仓库、开发文档及 MCP 客户端文档。

相关文章
|
SQL 关系型数据库 MySQL
【2.5w字吐血总结 | 新手必看】全网最详细MySQL笔记
【2.5w字吐血总结 | 新手必看】全网最详细MySQL笔记
2373 1
|
1天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1198 0
|
25天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9561 32
|
11天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
9天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
773 1
|
6天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型全解析:核心原理拆解,性能实战测评与落地部署教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为System One Model(系统一模型),对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
511 0
|
23天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
2590 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
7天前
|
存储 人工智能 自然语言处理
千问办公官网入口链接在哪?2026年最新QwenWork测评、千问办公怎么样?一文看懂
千问办公(QwenWork)是阿里云推出的AI智能办公平台,提供网页端和阿里云官网双入口。支持PPT/Word/Excel生成、多模态处理、网页全栈搭建、钉钉深度集成等6大核心能力。个人版免费可用,高级版198元/月;企业版198元/人/月。新用户注册即赠2000积分。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
989 0

热门文章

最新文章