添加 RuntimeContext 类用于捕获模型运行时的日期时间信息, 包括UTC时间、本地时间和时区信息,并在系统提示中显示这些信息。 同时增加最大上下文消息数和工具迭代次数的配置选项, 将验证服务从引擎加载器中移除,并更新相关的数据结构和接口。 BREAKING CHANGE: 移除了验证服务,相关字段被替换为证据状态和接受状态。 - 添加 RuntimeContext 类和相关渲染方法 - 增加 max_context_messages 和 max_tool_iterations 配置 - 移除 ValidationService 相关代码 - 更新消息记录中的验证状态字段 - 添加原始工具调用检测和回退处理
69 lines
3.7 KiB
HTML
69 lines
3.7 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Providers 模块蓝图</title><link rel="stylesheet" href="blueprint.css"></head>
|
||
<body><main class="page">
|
||
<header class="topbar"><h1>Providers</h1><p>Providers 把不同模型服务统一成 Beaver 内部的 <code>chat(messages, tools, model, ...)</code> 协议,屏蔽 OpenAI/LiteLLM/Anthropic/Codex/Custom 的差异。</p></header>
|
||
<nav class="nav"><a href="index.html">索引</a><a href="engine.html">Engine</a><a href="prompt-atlas.html">Prompt Atlas</a></nav>
|
||
<section class="content">
|
||
<h2>大模块流程</h2>
|
||
<div class="flow">
|
||
<div class="step"><strong>配置目标</strong>provider_name/model/api_base/key</div><div class="arrow">-></div>
|
||
<div class="step"><strong>ProviderBundle</strong>main/auxiliary/embedding</div><div class="arrow">-></div>
|
||
<div class="step"><strong>Provider.chat</strong>统一入参</div><div class="arrow">-></div>
|
||
<div class="step"><strong>协议转换</strong>system/tool/reasoning/usage</div><div class="arrow">-></div>
|
||
<div class="step"><strong>LLMResponse</strong>content/tool_calls/finish_reason</div>
|
||
</div>
|
||
|
||
<h2>小模块拆分</h2>
|
||
<article class="module">
|
||
<h3>base models</h3>
|
||
<p><code>LLMProvider</code> 定义 chat 协议;<code>LLMResponse</code> 统一模型输出;<code>ToolCallRequest</code> 统一工具调用 id/name/arguments。</p>
|
||
<div class="subflow">
|
||
<div>AgentLoop 只消费 LLMResponse,不关心具体 SDK。</div>
|
||
<div>Tool call arguments 被规范化为字符串或 dict 后交给 ToolExecutor。</div>
|
||
<div>usage 被映射回 session usage。</div>
|
||
</div>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>factory / runtime / registry</h3>
|
||
<p>根据配置创建 provider runtime,并组织 main provider、auxiliary provider 和 embedding runtime。Router、Planner、Validator 和 Skill 选择通常使用 auxiliary provider;主回答使用 main provider。</p>
|
||
<div class="subflow">
|
||
<div>resolve provider target。</div>
|
||
<div>创建 runtime,带 api key/base/header/timeout/model。</div>
|
||
<div>创建 ProviderBundle,供一次 Task attempt 复用。</div>
|
||
</div>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>LiteLLM / OpenAI-like</h3>
|
||
<p>主要走 OpenAI 风格 messages + tools。它最接近 Beaver 内部协议,转换成本最低。</p>
|
||
<div class="subflow">
|
||
<div>接收 ContextBuilder messages。</div>
|
||
<div>附加 tools、max_tokens、temperature、thinking_enabled。</div>
|
||
<div>解析 content、tool_calls、usage、finish_reason。</div>
|
||
</div>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>Anthropic 与 Codex</h3>
|
||
<p>这两类 provider 对 system prompt 有特殊要求,会把第一条 system message 提取到独立字段,剩余 messages 作为对话输入。Codex 还会使用 prompt cache key。</p>
|
||
<div class="subflow">
|
||
<div>扫描 messages,提取第一条 system。</div>
|
||
<div>其余 system 或非 system message 按 provider 能接受的格式转换。</div>
|
||
<div>调用 provider SDK,并把响应转回 LLMResponse。</div>
|
||
</div>
|
||
<p>Prompt 相关:provider 本身不创造业务 prompt,但会改变 system message 的传输位置,详见 <a href="prompt-atlas.html#provider-conversion">Prompt Atlas</a>。</p>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>fallback chain</h3>
|
||
<p>当主 provider 失败时,fallback chain 可以尝试备用目标。上层仍看到统一的 LLMResponse。</p>
|
||
<div class="subflow">
|
||
<div>主 provider 调用失败。</div>
|
||
<div>记录异常并尝试 fallback target。</div>
|
||
<div>成功则返回 fallback response;全部失败则 finish_reason/error。</div>
|
||
</div>
|
||
</article>
|
||
</section></main></body></html>
|