Files
steven_li 6e9e74d1ee feat(engine): 添加运行时上下文支持并重构工具迭代限制
添加 RuntimeContext 类用于捕获模型运行时的日期时间信息,
包括UTC时间、本地时间和时区信息,并在系统提示中显示这些信息。

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

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

- 添加 RuntimeContext 类和相关渲染方法
- 增加 max_context_messages 和 max_tool_iterations 配置
- 移除 ValidationService 相关代码
- 更新消息记录中的验证状态字段
- 添加原始工具调用检测和回退处理
2026-05-26 11:18:35 +08:00

83 lines
4.9 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="zh-CN">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Skills 模块蓝图</title><link rel="stylesheet" href="blueprint.css"></head>
<body><main class="page">
<header class="topbar"><h1>Skills</h1><p>Skills 模块负责加载、选择、注入、学习和发布 Beaver 技能。技能不是普通文档摘要,而是会被 ContextBuilder 作为显式 user 消息注入当前 run 的操作指导。</p></header>
<nav class="nav"><a href="index.html">索引</a><a href="engine.html">Engine</a><a href="tasks.html">Tasks</a><a href="prompt-atlas.html">Prompt Atlas</a></nav>
<section class="content">
<h2>大模块流程</h2>
<div class="flow">
<div class="step"><strong>目录加载</strong>published/builtin/drafts/specs</div><div class="arrow">-&gt;</div>
<div class="step"><strong>候选召回</strong>embedding retrieve</div><div class="arrow">-&gt;</div>
<div class="step"><strong>LLM 选择</strong>shortlist/final 或 node skill selection</div><div class="arrow">-&gt;</div>
<div class="step"><strong>注入</strong>SkillContext -> activation message</div><div class="arrow">-&gt;</div>
<div class="step"><strong>学习</strong>accepted task evidence -> candidate -> draft -> review -> publish</div>
</div>
<h2>小模块拆分</h2>
<article class="module">
<h3>catalog loader</h3>
<p>扫描和加载 published skills、builtin skills并构建供 embedding/LLM 选择的候选摘要。它也提供 load_published_skill、get_skill_record、get_skill_tool_hints。</p>
<div class="subflow">
<div>读取 SKILL.md 和 frontmatter。</div>
<div>记录 name、description、version、content_hash、tool hints。</div>
<div>输出 selection candidates。</div>
</div>
</article>
<article class="module">
<h3>SkillAssembler</h3>
<p>主 agent 每个 run 的 skill 选择器。先用 embedding 召回候选;候选太多时先 LLM shortlist再把完整 skill 正文截断后交给 LLM final selection。</p>
<div class="subflow">
<div>query = task_description 或 AgentService 提供的 skill_selection_context。</div>
<div>embedding top-k 召回 selection candidates。</div>
<div>shortlist 阶段只看摘要,返回最多 N 个 skill names。</div>
<div>final 阶段看候选正文,返回最终激活 skill names。</div>
<div>加载正文strip frontmatter生成 SkillContext。</div>
</div>
<p>详细 prompt 见 <a href="prompt-atlas.html#skill-assembler">Prompt Atlas</a></p>
</article>
<article class="module">
<h3>activation injection</h3>
<p>ContextBuilder 不把 skill 正文塞进 system prompt而是每个 skill 生成一条 user-role activation message。这样 skills 的正文和主 system prompt 分层清晰。</p>
<pre>[SYSTEM: The "{skill.name}" skill (version {skill.version}) is active for this run.
Follow its instructions as active guidance unless the user overrides them.]
{skill.content}</pre>
</article>
<article class="module">
<h3>drafts / reviews / publisher</h3>
<p>草稿、审核和发布构成 skill 的人工治理链路。Learning 只生成候选和草稿,不直接把新能力静默注入 published 目录。</p>
<div class="subflow">
<div>DraftService 保存草稿内容和 metadata。</div>
<div>ReviewService 记录审核意见、状态、决策。</div>
<div>SkillPublisher 把通过审核的草稿写成正式 skill spec。</div>
</div>
</article>
<article class="module">
<h3>learning</h3>
<p>从用户接受后的 Task evidence 中提取学习候选,合成新 skill 或修订草稿,再经过 safety/eval/review。Safety/Eval 只评估 skill draft不评估 task result。</p>
<div class="subflow">
<div>Task accepted 后触发 learning一个 task 的所有 runs 都进入证据包,并标记 final_accepted_run_id。</div>
<div>LearningService 构建 learning candidates。</div>
<div>EvidencePacket 收集 task summary、session excerpts、tool names、user acceptance event 和 revision history。</div>
<div>SkillDraftSynthesizer 用 LLM 生成 frontmatter/content/change_reason JSON。</div>
<div>SafetyChecker 做确定性扫描Eval 评估后进入 draft/review。</div>
</div>
</article>
<article class="module">
<h3>missing skill guidance</h3>
<p>当 team node 没有匹配 published skill 时TaskSkillResolver 生成一次性 ephemeral guidance。它以 SkillContext 形式进入 delegated agent但不会发布为正式 skill。</p>
<div class="subflow">
<div>输入 task goal、user request、node id/task、skill query、required capabilities。</div>
<div>LLM 返回 guidance_name、description、content、tags。</div>
<div>若失败,用 fallback payload 生成基础指导。</div>
<div>SkillContext name = <code>ephemeral:{guidance_name}</code>version = <code>ephemeral:{guidance_id}</code></div>
</div>
</article>
</section></main></body></html>