B1 Agent Runtime 个人模块

本个人仓库以 B1 Agent Runtime 为个人负责模块。

为保证 B1 可以独立运行,仓库保留了 B1 调用所需的 B3/B4/B5 接口代码、common 工具和基础 skills。
这些文件作为运行依赖,不作为个人模块贡献重点。


1. 模块概述

1.1 模块名称

B1 Agent Runtime

1.2 模块说明

B1 是本地 Agent 系统的运行时编排模块,负责把用户输入、系统提示词、记忆文档、工具 schema、LLM 输出和工具执行结果组织成完整 Agent 流程。

B1 本身不直接实现具体工具、不直接生成模型回答、不直接管理长期记忆,而是通过接口调用团队其他模块:

  • 调用 B5 加载或保存 memory。
  • 调用 B3 获取 tools schema,并执行 tool calls。
  • 调用 B4 生成标准 AIMessage。
  • 维护 messages、trace、checkpoint、final_answer 等运行产物。

B1 在完整系统中是必要的调度中心。如果没有 B1,B3/B4/B5 只能作为独立模块运行,无法形成“模型决策 -> 工具执行 -> 工具结果回填 -> 再次推理”的 Agent loop。

1.3 完成情况概览

类型 完成情况
基础要求 完成基础 Agent Loop:UserMessage -> B4 AIMessage -> B3 ToolMessage -> B4 Final Answer,并落盘 messages、trace、final answer。
进阶要求 完成多轮对话、断点续跑、工具调用级 step_state、批量任务、历史压缩、Prompt 动态切换、CLI 交互和 B1 WebUI 演示。
可独立运行的演示 支持 fixture 模式、mock 模式、prompt_json 真实模型模式、CLI 和 WebUI。
与团队系统集成情况 B1 通过函数接口调用 B3/B4/B5,统一使用 AIMessage、ToolMessage、SkillResult 和 JSON 配置文件联调。

2. 算法与工程实现

2.1 底层实现思路

B1 的底层实现不是直接调用一次大模型得到答案,而是实现了一个可追踪的 Agent Runtime 状态机。核心流程如下:

读取 runtime_input
  -> 读取 SystemPrompt
  -> 调用 B5 加载 memory
  -> 把 memory 拼入 SystemMessage
  -> 调用 B3 生成 tools_schema
  -> 调用 B4 生成 AIMessage
  -> 如果 AIMessage 有 tool_calls,调用 B3 执行工具
  -> 将 ToolMessage 追加回 messages
  -> 再次调用 B4
  -> 直到得到最终回答或达到 max_turns
  -> 写出 messages / trace / final_answer / checkpoint

工程上,B1 将一次运行拆成三个层次:

层次 对应实现 说明
对外入口 run_agent 负责读取输入、配置、prompt、memory、tools schema,并选择单轮/多轮流程。
单轮 Agent Loop _run_single_turn 负责一次用户输入内的 LLM 调用、工具调用、ToolMessage 回填和终止判断。
多轮运行控制 _run_conversation_loop 负责多轮对话、断点恢复、Prompt 切换、历史压缩和每轮产物落盘。

B1 的工程重点是 调度和状态管理:它不直接实现工具函数、不直接操作大模型权重、不直接决定 memory 检索算法,而是通过清晰接口把 B3、B4、B5 串起来,并把运行证据保存为 JSON/Markdown 文件。

2.2 使用的大模型版本

真实模型模式使用本地 Qwen3.5-4B,由 configs/model.yaml 指定:

model:
  backend: transformers
  model_name_or_path: /root/siton-tmp/assignment_B/Qwen3.5-4B
  tokenizer_name_or_path: /root/siton-tmp/assignment_B/Qwen3.5-4B
  local_files_only: true
  torch_dtype: bfloat16
  device_map: auto

B1 支持两种运行模式:

模式 说明
mock 不加载真实模型,用规则生成 AIMessage,适合快速验收 B1 流程。
prompt_json 调用本地 Qwen3.5-4B,由 B4 将模型输出解析为标准 AIMessage。

B1 本身不直接加载模型,而是通过 generate_ai_message(...) 代理调用 B4。这样 B1 只依赖统一的 AIMessage 接口,不绑定具体模型实现。

2.3 Prompt 工程

B1 使用的主提示词位于:

prompts/local_tool_agent.txt

核心约束包括:

Use available tools when needed.
Do not invent file contents.
If the user asks about a local file, use the file reading tool.
If a tool is needed, choose exactly one tool and wait for its ToolMessage before deciding whether another tool is needed.
Never request multiple tools in the same response.
If tool results are provided, answer based on the tool results.
Follow the user's output requirements.

这段 Prompt 的作用是让模型按 Agent 工具调用协议工作:

  • 需要本地文件内容时必须调用工具,不能编造。
  • 一次只请求一个工具,降低 B3 执行和 B1 恢复逻辑复杂度。
  • 工具返回后必须基于 ToolMessage 回答。
  • 最终输出要遵守用户要求。

Prompt 切换使用:

prompts/brief_agent.txt

其作用是把回答风格切换为简洁模式。B1 还支持通过 prompt_text 或 CLI /prompt-text 临时指定系统提示词。

2.4 使用的开源框架和工程依赖

类型 使用内容 用途
Python 标准库 argparse、pathlib、json、threading、concurrent.futures、http.server CLI、路径处理、JSON 读写、批量任务、WebUI 后端。
PyYAML yaml 配置读取 读取 tools/model/memory 配置。
transformers / torch / accelerate 本地模型推理依赖 由 B4 在 prompt_json 模式下调用 Qwen3.5-4B。
jieba 中文关键词切分 B5 memory 关键词检索依赖。
fastembed / onnxruntime 向量检索 B5 memory 向量检索依赖。
PyMuPDF 文档读取 基础 skills 中 document_reader 的 PDF 文本提取依赖。
React + Vite webui_b1 B1 演示前端。

B1 WebUI 后端使用 Python 标准库 HTTP server,没有引入 Flask/FastAPI,目的是让服务器离线环境也能直接运行。

2.5 核心算法与机制

2.5.1 Agent Loop 控制算法

B1 的核心循环位于 _run_single_turn:

while True:
  调用 B4 生成 AIMessage
  如果没有 tool_calls:
    将 content 作为 final_answer,结束
  如果有 tool_calls:
    检查 max_turns
    调用 B3 执行工具
    把 ToolMessage 追加到 messages
    继续下一轮 B4 推理

该算法解决的问题是:模型不能只生成一次文本,而是可以根据上下文动态决定是否需要工具,并把工具结果重新放入上下文继续推理。

2.5.2 断点续跑机制

B1 通过 checkpoint.json 保存运行状态,核心字段包括:

  • messages
  • tool_rounds
  • llm_calls
  • turn_index
  • tools_schema
  • selected_memory
  • runtime_input
  • step_state

工具调用级 step_state 记录:

  • phase=tool_calls:B4 已经生成 AIMessage,正在执行工具。
  • completed_tool_messages:已经完成的工具结果。
  • phase=before_next_llm:工具已经执行完,准备下一次调用 B4。

恢复时,如果某个工具已经在 completed_tool_messages 中,B1 会跳过该工具,避免重复执行。

2.5.3 历史压缩机制

B1 历史压缩位于 b1_compression.py。它先估算 messages 长度:

中文约 1.5 字符 / token
英文约 4 字符 / token

当估算值超过 configs/model.yaml 中的:

context:
  max_input_tokens: 4096

B1 会将较早 messages 交给 B4 生成摘要,并把摘要追加到 SystemMessage 的“历史对话摘要”区域,同时保留最近若干条原始消息。压缩事件写入 trace.compress_events。

2.5.4 Prompt 动态切换机制

B1 在每个用户轮次结束后检查 prompt_switches。如果当前轮次满足 after_user_turn,则:

  • 使用 prompt_path 时重新读取 prompt 文件。
  • 使用 prompt_text 时直接替换为临时 prompt 文本。

切换事件写入 trace.prompt_switch_events,便于验收时证明 prompt 确实发生变化。

2.5.5 批量任务与并发控制

B1 批量任务位于 b1_batch.py,使用 ThreadPoolExecutor 并发提交多个 conversation。每个任务有独立输出目录,最终汇总为 batch_results.json。

由于本地 B4 模型推理不是线程安全的,B1 对 generate_ai_message 加互斥锁:

多个任务可以并发调度;
但同一时间只有一个线程进入本地模型推理;
避免多个线程同时访问同一个模型导致不稳定。

2.5.6 可追踪输出机制

B1 每次运行都会把过程写成结构化文件:

文件 作用
messages.json 保存最终消息上下文。
trace.json 保存运行状态、LLM 次数、工具轮次、错误、压缩事件和 prompt 切换事件。
tool_messages.json 保存工具执行结果。
final_answer.md 保存最终回答。
turn_N/ 保存每个用户轮次的局部过程。

这套输出机制让 B1 不只是“跑出一个答案”,而是能证明每一步如何发生,方便验收、排错和恢复。


3. 环境、模型与数据依赖

3.1 运行环境

项目 要求
Python 版本 Python 3.10
必要依赖 见 requirements.txt,主要包括 PyYAML、torch、transformers、accelerate、jieba、fastembed、onnxruntime、PyMuPDF 等。
是否需要模型 fixture/mock 模式不需要真实模型;prompt_json 模式需要本地模型。
是否需要 GPU mock/fixture 不需要;真实模型推理建议 GPU。
是否需要外部数据集 不需要大型外部数据集;仓库内提供轻量样例文件。

3.2 模型依赖

模型 来源 项目内相对路径 用途
Qwen3.5-4B 课程服务器或本地预置模型目录 由 configs/model.yaml 中 model_name_or_path 和 tokenizer_name_or_path 指定 B4 在 prompt_json 模式下生成 AIMessage。
BAAI/bge-small-zh-v1.5 本地缓存或 HuggingFace/镜像源 由 configs/memory.yaml 中 vector_retrieval.cache_dir 指定 B5 向量检索 memory,可选。

默认模型配置示例:

model:
  model_name_or_path: /root/siton-tmp/assignment_B/Qwen3.5-4B
  tokenizer_name_or_path: /root/siton-tmp/assignment_B/Qwen3.5-4B
  local_files_only: true

如果模型路径不同,需要修改 configs/model.yaml。

3.3 数据集或样例数据依赖

数据或文件 来源 项目内相对路径 用途
周末家庭出游计划 项目自带轻量样例 data/docs/weekend_trip_plan.txt B1 文件阅读、多轮对话、Prompt 切换演示。
出游预算说明 项目自带轻量样例 data/docs/trip_budget_notes.txt B1 调用 local_file_search 的搜索样例。
B1 runtime 输入 项目自带 data/runtime_input.json 单任务 Agent Loop 演示。
多轮输入 项目自带 data/b1_adv_multi_turn.json 多轮对话和断点续跑演示。
Prompt 切换输入 项目自带 data/b1_adv_prompt_switch.json Prompt 动态切换演示。
批量输入 项目自带 data/b1_adv_batch_input.json 批量任务演示。
fixture 数据 项目自带 data/b1_fixtures/ 无模型/无外部模块时验证 B1 编排逻辑。

3.4 安装步骤

conda create -n lhq_env python=3.10 -y
conda activate lhq_env
export PYTHONNOUSERSITE=1
pip install -r requirements.txt

如果只验证 B1 fixture 模式,可不准备真实模型。


4. 文件结构与接口边界

4.1 文件结构

lhq_agent_b1_personal/
├── code/
│   ├── b1_agent_runtime.py       # B1 主运行时
│   ├── b1_batch.py               # B1 批量任务
│   ├── b1_compression.py         # B1 历史压缩
│   ├── b1_webui_server.py        # B1 WebUI 后端
│   ├── b3_tool_layer.py          # B1 运行依赖:工具 schema 和工具执行接口
│   ├── b4_local_agent_llm.py     # B1 运行依赖:B4 兼容入口
│   ├── b4/                       # B1 运行依赖:B4 AIMessage 生成实现
│   ├── b5_memory.py              # B1 运行依赖:memory 加载和保存接口
│   └── common/                   # 公共 IO、路径、日志、schema 工具
├── configs/                      # B1 运行所需配置
├── data/                         # B1 样例输入、fixture、轻量文档
├── memory/                       # B5 样例 memory
├── prompts/                      # SystemPrompt 模板
├── skills/                       # B3 执行工具时依赖的基础 skills
├── webui_b1/                     # B1 演示前端,保留 dist
├── requirements.txt
└── README.md

4.2 接口边界

类型 来源 / 去向 数据格式 说明
输入 用户 / CLI / WebUI JSON 文件或 HTTP JSON B1 runtime input,包含 conversation_id、user_input、toolset、turns 等字段。
输入 B5 selected_memory.json / dict B1 调用 B5 后获得的 memory 文档列表。
输入 B3 tools_schema.json / list B1 调用 B3 后获得的工具 schema。
输入 B4 AIMessage / dict B4 返回的 assistant 消息,可能包含 tool_calls。
输出 B3 tool_calls / list 当 B4 请求工具时,B1 将 tool_calls 交给 B3 执行。
输出 文件系统 JSON / Markdown messages.json、trace.json、tool_messages.json、final_answer.md、checkpoint.json。
输出 B5 messages/trace/final_answer 路径 任务成功后 B1 可调用 B5 保存 conversation/global memory。

5. 基础要求实现与演示

5.1 基础功能说明

B1 基础功能是实现一个完整 Agent Loop:

用户输入 -> 构造 messages -> 调用 B4 -> 判断 tool_calls
  -> 如需工具,调用 B3/B2 得到 ToolMessage
  -> ToolMessage 追加回 messages
  -> 再次调用 B4
  -> 得到最终回答并保存输出

基础版本重点证明 B1 能统一调度模型、工具、记忆和消息链,而不是只完成一次普通问答。

5.2 基础功能实现路径

文件 / 函数 / 脚本 作用
code/b1_agent_runtime.py::run_agent B1 对外主入口,读取输入、配置、prompt、tools、memory,并选择单轮或多轮流程。
code/b1_agent_runtime.py::_run_single_turn 单轮 Agent Loop,负责调用 B4、判断 tool_calls、调用 B3、追加 ToolMessage。
code/b1_agent_runtime.py::_memory_context 将 B5 返回的 memory 文档格式化后拼接进 SystemMessage。
code/b1_agent_runtime.py::generate_ai_message B1 调用 B4 的代理入口。
code/b3_tool_layer.py B1 运行依赖,用于生成 tools schema 和执行工具。
code/b5_memory.py B1 运行依赖,用于加载和保存 memory。

基础流程:

runtime_input.json
  -> run_agent
  -> load_memory / get_tools_schema
  -> _run_single_turn
  -> generate_ai_message
  -> execute_tool_calls
  -> messages.json / trace.json / final_answer.md

5.3 基础功能输入格式与样例

字段 / 输入文件 类型 / 格式 是否必需 说明
conversation_id string 是 会话 ID,用于 trace、输出目录和 memory ID。
user_input string 是 第一轮用户任务。
system_prompt_path string 是 SystemPrompt 文件路径。
selected_memory_ids list[string] integrated 模式需要 手动指定 memory_id。
use_global_memory boolean integrated 模式需要 是否加载全局 memory。
toolset string 是 工具集名称,如 basic_tools。
max_turns integer 是 最大工具调用轮次。
save_memory string 是 none、conversation 或 global。

样例输入:

样例文件 用途
data/runtime_input.json 验证基础 Agent Loop。
data/b1_fixtures/b1_fixture_input.json 验证 B1 编排逻辑,不依赖真实模型。

5.4 基础功能演示命令

从 code/ 目录执行:

cd code
conda activate lhq_env

fixture 模式:

python b1_agent_runtime.py \
  --input ../data/b1_fixtures/b1_fixture_input.json \
  --outdir ../outputs/B1_fixture

mock 模式:

python b1_agent_runtime.py \
  --input ../data/runtime_input.json \
  --tools_config ../configs/tools.yaml \
  --memory_config ../configs/memory.yaml \
  --model_config ../configs/model.yaml \
  --llm_mode mock \
  --outdir ../outputs/B1_single_mock

观察点:

  • 终端无 fatal 报错。
  • 输出目录中生成 messages.json、trace.json、final_answer.md。
  • trace.json 中能看到 llm_call_count、tool_rounds_used 和工具调用记录。

5.5 基础功能输出格式

输出文件 / 返回字段 格式 说明
messages.json JSON 最终消息链,包含 system、user、assistant、tool。
trace.json JSON 运行轨迹,包含状态、LLM 调用次数、工具轮次、turns、错误和事件。
final_answer.md Markdown 最终回答文本。
tool_messages.json JSON 工具执行结果封装成的 ToolMessage 列表。
selected_memory.json JSON B5 加载到的 memory 文档。
tools_schema.json JSON B3 生成的工具 schema。

5.6 基础功能结果截图

本仓库未提交截图。运行后可截图以下文件或 WebUI 页面:

outputs/B1_single_mock/trace.json
outputs/B1_single_mock/messages.json
outputs/B1_single_mock/final_answer.md

6. 进阶要求实现与演示

6.1 选择的进阶要求

进阶要求 是否完成 对应文件 / 函数 简要说明
多轮对话 是 _run_conversation_loop 将预定义 turns 或 CLI 输入追加到同一 messages 上下文。
断点续跑 是 _save_checkpoint、_load_checkpoint、step_state 保存 checkpoint,恢复时跳过已完成工具调用。
批量任务 是 b1_batch.py::run_batch 线程池并发调度多个 conversation,并对 B4 推理加锁。
历史压缩 是 b1_compression.py::_compress_history 根据上下文阈值压缩旧消息为摘要,保留最近消息。
Prompt 切换 是 _check_prompt_switch、_reload_system_prompt 指定轮次后切换 prompt 文件或临时 prompt 文本。
CLI 实时对话 是 _run_conversation_loop CLI 分支 支持 /prompt、/prompt-text、/exit。
WebUI 演示 是 b1_webui_server.py、webui_b1/ 展示 B1 六个演示场景和运行证据。

6.2 进阶功能一:多轮对话

功能说明

多轮对话允许 B1 在同一个 messages 中持续追加用户输入,而不是每轮重新开始。这样后续问题可以引用前面回答和工具结果。

实现路径

文件 / 函数 / 脚本 作用
b1_agent_runtime.py::_run_conversation_loop 管理多轮输入队列、turn_N 输出目录和根 trace 汇总。
data/b1_adv_multi_turn.json 多轮样例输入。

输入格式与样例

字段 / 输入文件 / 配置项 类型 / 格式 是否必需 说明
turns list[object] 否 后续用户输入列表,每项包含 user_input。

演示命令

python b1_agent_runtime.py \
  --input ../data/b1_adv_multi_turn.json \
  --tools_config ../configs/tools.yaml \
  --memory_config ../configs/memory.yaml \
  --model_config ../configs/model.yaml \
  --llm_mode prompt_json \
  --outdir ../outputs/B1_multi_turn

输出格式

输出文件 / 返回字段 格式 说明
turn_N/messages.json JSON 每轮执行后的局部消息链。
messages.json JSON 根目录最终完整消息链。
trace.json.total_turns number 成功完成的用户轮次。

6.3 进阶功能二:断点续跑

功能说明

断点续跑用于程序中断后恢复当前 conversation。B1 保存轮级状态,也保存工具调用级 step_state。如果本轮中已有工具执行成功,恢复时不会重复执行这些已完成工具。

实现路径

文件 / 函数 / 脚本 作用
b1_agent_runtime.py::_save_checkpoint 保存 messages、tool_rounds、llm_calls、runtime_input、tools_schema、selected_memory 和 step_state。
b1_agent_runtime.py::_load_checkpoint 读取并校验 checkpoint。
b1_agent_runtime.py::_run_single_turn 根据 step_state.completed_tool_messages 跳过已完成工具。

输入格式与样例

字段 / 输入文件 / 配置项 类型 / 格式 是否必需 说明
resume boolean 否 为 true 时尝试读取当前 outdir 下的 checkpoint.json。
checkpoint.json JSON 恢复时需要 中断前保存的运行状态。

演示命令

先运行并中断,再使用同一 outdir 和 resume=true 的输入恢复。

python b1_agent_runtime.py \
  --input ../data/b1_adv_multi_turn.json \
  --tools_config ../configs/tools.yaml \
  --memory_config ../configs/memory.yaml \
  --model_config ../configs/model.yaml \
  --llm_mode prompt_json \
  --outdir ../outputs/B1_resume_demo

输出格式

输出文件 / 返回字段 格式 说明
checkpoint.json JSON 中断时存在,正常完成后删除。
checkpoint.step_state.phase string 当前工具执行阶段,如 tool_calls、before_next_llm。
checkpoint.step_state.completed_tool_messages list 已完成工具结果,用于恢复时跳过。

6.4 进阶功能三:历史压缩

功能说明

当 messages 估算长度超过 model.yaml 中的上下文阈值时,B1 会把较早历史压缩为摘要,并追加到 SystemMessage 中,同时保留最近若干条原始消息,避免上下文过长。

实现路径

文件 / 函数 / 脚本 作用
b1_compression.py::_estimate_tokens 基于字符数估算 token。
b1_compression.py::_generate_summary 调用 B4 生成历史摘要。
b1_compression.py::_compress_history 保留最近消息,将旧消息合并进 rolling summary。
b1_agent_runtime.py::_run_conversation_loop 在用户轮次进入 B4 前触发压缩检查。

输入格式与样例

字段 / 输入文件 / 配置项 类型 / 格式 是否必需 说明
context.max_input_tokens integer 是 压缩触发阈值。
turns list 否 多轮越长越容易触发压缩。

演示命令

可把 configs/model.yaml 中 context.max_input_tokens 临时调小后运行多轮样例。

python b1_agent_runtime.py \
  --input ../data/b1_adv_multi_turn.json \
  --tools_config ../configs/tools.yaml \
  --memory_config ../configs/memory.yaml \
  --model_config ../configs/model.yaml \
  --llm_mode prompt_json \
  --outdir ../outputs/B1_history_compression

输出格式

输出文件 / 返回字段 格式 说明
trace.compress_events list 记录压缩发生的轮次、压缩前后消息数量。
messages.json[0].content string SystemMessage 中包含历史摘要。
compress_summary_*.json JSON 摘要生成过程产物。

6.5 进阶功能四:Prompt 切换

功能说明

B1 支持在指定用户轮次后切换 SystemPrompt。可以切换到 prompt 文件,也可以直接使用临时 prompt 文本。

实现路径

文件 / 函数 / 脚本 作用
b1_agent_runtime.py::_check_prompt_switch 判断当前轮次是否需要切换 prompt。
b1_agent_runtime.py::_reload_system_prompt 从文件重新读取 prompt。
CLI 分支 支持 /prompt 和 /prompt-text。

输入格式与样例

"prompt_switches": [
  {
    "after_user_turn": 1,
    "prompt_path": "../prompts/brief_agent.txt"
  }
]

或:

"prompt_switches": [
  {
    "after_user_turn": 1,
    "prompt_text": "You must answer only in English from now on."
  }
]

演示命令

python b1_agent_runtime.py \
  --input ../data/b1_adv_prompt_switch.json \
  --tools_config ../configs/tools.yaml \
  --memory_config ../configs/memory.yaml \
  --model_config ../configs/model.yaml \
  --llm_mode prompt_json \
  --outdir ../outputs/B1_prompt_switch

输出格式

输出文件 / 返回字段 格式 说明
trace.prompt_switch_events list 记录 prompt 切换轮次和切换方式。
messages.json[0].content string 切换后的 SystemPrompt。

6.6 进阶功能五:批量任务

功能说明

批量任务输入是 JSON 数组,每个元素都是一个独立 conversation。B1 用线程池并发调度多个任务,并为每个任务创建独立输出目录。

本地 B4 模型推理不是线程安全的,因此 b1_batch.py 对 B4 调用加互斥锁:任务可以并发排队和写结果,但同一时刻只允许一个线程进入本地模型推理。

实现路径

文件 / 函数 / 脚本 作用
b1_batch.py::run_batch 读取 batch 输入、提交线程池、汇总结果。
b1_batch.py::_locked_generate 对 B4 推理加锁。
data/b1_adv_batch_input.json 批量输入样例。

演示命令

python b1_agent_runtime.py \
  --batch ../data/b1_adv_batch_input.json \
  --tools_config ../configs/tools.yaml \
  --memory_config ../configs/memory.yaml \
  --model_config ../configs/model.yaml \
  --llm_mode mock \
  --max_workers 2 \
  --outdir ../outputs/B1_batch

输出格式

输出文件 / 返回字段 格式 说明
batch_results.json JSON 汇总 total、success、error 和每个 conversation 的结果。
<conversation_id>/trace.json JSON 每个子任务独立 trace。
<conversation_id>/final_answer.md Markdown 每个子任务最终回答。

7. 与团队系统的集成说明

团队完整系统中,B1 是运行时总控模块。调用方式主要有三种:

  1. 命令行直接运行 code/b1_agent_runtime.py。
  2. WebUI 后端 code/b1_webui_server.py 通过 subprocess 调用 B1。
  3. 完整系统或其他脚本直接调用 run_agent(...) 函数。

调用时传入:

  • runtime input JSON
  • configs/tools.yaml
  • configs/memory.yaml
  • configs/model.yaml
  • 输出目录
  • LLM 模式:mock 或 prompt_json

B1 返回:

  • Python dict 形式的运行结果
  • 输出目录下的结构化产物

联调接口约定:

  • B4 必须返回标准 AIMessage。
  • B3 必须接收 tool_calls 并返回 ToolMessage 列表。
  • B5 必须返回包含 selected_memory_docs 的 dict。
  • B2 Skill 必须返回可 JSON 序列化的 SkillResult。

本个人仓库保留了上述依赖代码,是为了保证 B1 可以独立运行和复现;个人贡献重点仍是 B1 的运行时编排、状态管理、进阶能力和 Web 演示。


8. 已知问题与后续改进

问题 当前原因 后续改进
integrated 模式依赖 B3/B4/B5 接口 B1 的职责就是调度这些模块,完全删除依赖后无法运行。 README 中明确依赖边界,个人贡献聚焦 B1。
真实模型依赖本地路径 大模型权重不能上传 GitHub。 提供模型下载说明或路径检查脚本。
WebUI 场景偏演示 WebUI 面向验收,部分参数由后端固定生成。 增加可编辑场景配置和更灵活的 prompt switch。
历史压缩触发点较粗 当前主要在用户轮次进入 B4 前判断。 封装统一的 B4 调用前压缩检查。
fixture 模式数据固定 fixture 只验证 B1 编排逻辑。 增加更多 fixture 覆盖异常、断点和多工具场景。

9. GitHub 提交说明

本仓库不上传:

  • 大模型文件
  • outputs/ 运行结果
  • node_modules/
  • __pycache__/

保留 webui_b1/dist/,用于服务器没有 Node.js 时直接托管 B1 前端。

S
Description
B1 Agent Runtime module with multi-turn dialogue, tool orchestration, checkpoint resume, history compression, prompt switching, batch execution, and WebUI demo.
Readme
1.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 91.7%
JavaScript 5.4%
CSS 2.8%