feat(engine): 添加运行时上下文支持并重构工具迭代限制

添加 RuntimeContext 类用于捕获模型运行时的日期时间信息,
包括UTC时间、本地时间和时区信息,并在系统提示中显示这些信息。

同时增加最大上下文消息数和工具迭代次数的配置选项,
将验证服务从引擎加载器中移除,并更新相关的数据结构和接口。

BREAKING CHANGE: 移除了验证服务,相关字段被替换为证据状态和接受状态。

- 添加 RuntimeContext 类和相关渲染方法
- 增加 max_context_messages 和 max_tool_iterations 配置
- 移除 ValidationService 相关代码
- 更新消息记录中的验证状态字段
- 添加原始工具调用检测和回退处理
This commit is contained in:
2026-05-26 11:18:35 +08:00
parent 16347caf5e
commit 6e9e74d1ee
57 changed files with 5710 additions and 1582 deletions

View File

@ -0,0 +1,63 @@
<!doctype html>
<html lang="zh-CN">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Engine 模块蓝图</title><link rel="stylesheet" href="blueprint.css"></head>
<body><main class="page">
<header class="topbar"><h1>Engine</h1><p>Engine 是执行内核:加载 runtime 依赖、捕获 memory、选择 skill/tool、组装 prompt、调用 provider、执行 tool loop并把全过程写回 session。</p></header>
<nav class="nav"><a href="index.html">索引</a><a href="providers.html">Providers</a><a href="tools.html">Tools</a><a href="skills.html">Skills</a><a href="prompt-atlas.html">Prompt Atlas</a></nav>
<section class="content">
<h2>大模块流程</h2>
<div class="flow">
<div class="step"><strong>boot</strong>EngineLoader 加载配置/registry/stores/services</div><div class="arrow">-&gt;</div>
<div class="step"><strong>run start</strong>ensure session + frozen memory</div><div class="arrow">-&gt;</div>
<div class="step"><strong>能力装配</strong>skills + tools</div><div class="arrow">-&gt;</div>
<div class="step"><strong>上下文构建</strong>ContextBuilder messages</div><div class="arrow">-&gt;</div>
<div class="step"><strong>循环</strong>provider chat -> tool calls -> tool results</div><div class="arrow">-&gt;</div>
<div class="step"><strong>收尾</strong>run_completed + receipts</div>
</div>
<h2>小模块拆分</h2>
<article class="module">
<h3>loader</h3>
<p>EngineLoader 是依赖装配根。它创建 config、session manager、memory service、tool registry/executor/assembler、skills loader/assembler、task services、MCP manager 等。</p>
<div class="subflow">
<div>读取 workspace/config。</div>
<div>初始化 stores 与 registries。</div>
<div>注册内置工具与 MCP 工具。</div>
<div>返回 EngineLoadResult 供 AgentLoop 复用。</div>
</div>
</article>
<article class="module">
<h3>AgentLoop</h3>
<p>AgentLoop 是所有 root agent 和 delegated agent 共用的执行 kernel。它支持直接 process也支持 run queue 的 submit_direct 串行消费。</p>
<div class="subflow">
<div>解析 provider/model/max_tokens/temperature/tool iteration。</div>
<div>确保 session记录 run_started、intent decision、skill/tool selection snapshot。</div>
<div>调用 provider若返回 tool_calls则逐个 ToolExecutor 执行并追加 tool message。</div>
<div>到达工具迭代上限时,追加 finalizer system message 再要求模型无工具收尾。</div>
<div>记录 run_completed、usage、skill effect receipts。</div>
</div>
<p>Prompt 相关:主链 context、tool failure guidance、tool limit finalizer 都在 <a href="prompt-atlas.html#agent-loop">Prompt Atlas</a> 展开。</p>
</article>
<article class="module">
<h3>ContextBuilder</h3>
<p>唯一负责 provider messages 形状的组件。它把身份、base system prompt、session、execution context、memory、extra sections 拼成 system prompt再把 skill 正文作为 user-role activation message 插入。</p>
<div class="subflow">
<div>build_system_prompt固定顺序拼 section<code>---</code> 分隔。</div>
<div>build_skill_activation_messages每个 SkillContext 变成一条 user 消息。</div>
<div>build_messagessystem -> skill messages -> history(跳过 system) -> current user input。</div>
<div>add_assistant_message/add_tool_resulttool loop 中追加 provider 兼容消息。</div>
</div>
</article>
<article class="module">
<h3>session</h3>
<p>session store/manager/search 负责把运行过程落成可追溯事件。可见历史和审计事件分离,避免 internal snapshots 进入下一轮 prompt。</p>
<div class="subflow">
<div>append_message 记录 role/event_type/content/tool_calls/context_visible。</div>
<div>get_history 给 ContextBuilder 提供裁剪后的可见上下文。</div>
<div>search/FTS 支持 session_search 工具和 UI 检索。</div>
</div>
</article>
</section></main></body></html>