基于 GitHub 仓库 deer-flow/llm-space v4.1.1 + 飞书 Wiki 文档 + 系统截图深度分析
一句话定位:一个本地优先(Local-first)的桌面应用,专门为 Agent 构建者设计——用于原型化 Agent 创意、检查每一步执行过程、重放失败、评估性能,全部在一个界面内完成。
开源 MIT 协议字节跳动 DeerFlow 姊妹项目Electrobun 桌面端TypeScript + React
| 属性 | 详情 |
|---|---|
| 最新版本 | v4.1.1(2026-07-16 发布) |
| 技术栈 | TypeScript + Bun + Electrobun + React + Tailwind CSS + shadcn/ui |
| Agent 框架 | Pi Agent Core(轻量 Agent 运行时) |
| 安装包大小 | 常规版 ~27MB / Performance 版 ~130MB |
| 数据存储 | 本地 ~/.llm-space 目录,API Key 不离本机 |
| 姊妹项目 | DeerFlow(字节自用,每个版本都用 LLM Space 构建) |
以下是你截图中红框区域的系统提示词原文翻译(逐段对照):
web_search once for initial orientation
on the topic (do NOT skip this). → 立即调用 web_search 进行初步定向(不可跳过!)
● Step 2: Analyze the search results to form a research plan,
then execute TOP3 targeted searches in parallel. → 分析结果形成研究计划,
然后并行执行3个定向搜索
● Step 3: Execute exactly TOP3 searches for each sub-topic
in parallel. After each one, mark it completed. → 对每个子话题精确执行
TOP3搜索(并行),完成后打勾标记
⚠️ Do not jump to a final answer before completing the
research plan. → 警告:完成研究计划前不得跳到最终答案!
<skill-access>
You have access to skills listed in "<available-skills>",
which provide optimized workflows for specific tasks.
Each skill contains instructions for querying parameters.
→ 你可以使用 <available-skills> 中列出的技能,
它们针对特定任务提供优化工作流。每个技能包含参数查询指令。
<skill-loading-behaviors> # 技能加载行为规范
1. When a user query matches a skill's use case, immediately use the "skill" tool
to load the skill provided in the available skills list. → 用户查询匹配技能用例时,
立即使用 skill 工具加载
2. If an unlisted requested skill is provided in the system context,
load that skill first even if the user message is short. → 如果系统上下文中有
未列出的请求技能,优先加载该技能
3. Read and understand the skill's workflow and instructions under the same folder.
→ 阅读并理解同目录下的技能工作流和指令
4. Load referenced resources only when needed during execution.
→ 仅在执行需要时才加载引用资源
5. Follow each skill's execution instructions precisely.
→ 精确遵循每个技能的执行指令
<skill-system> # 技能系统
(略)
<critical-reminder> # 关键提醒
- Always ask "ask_user_question" to clarify unclear/missing/
ambiguous requirements before starting work — never assume or guess. → 开始工作前始终通过
ask_user_question 澄清不明确/缺失/模糊的需求——永远不要假设或猜测!
<critique-or-pods> # 评判规则
- Be direct and useful, avoid unnecessary pleasantries/compliments, or filler tags.
Tags contain information from the system. They bear no direct relation to the specific tool
results or user messages in which they appear. → 直接有用,避免不必要的客套/恭维或填充标签。
标签包含系统信息,它们与出现的具体工具结果或用户消息无直接关系。
<tool-use-rules> # 工具使用规则
(略)
这个 Prompt 使用了 类 XML 的结构化标签系统来组织不同维度的指令:
| 标签层 | 作用 | 设计意图 |
|---|---|---|
| <agent> | 角色身份声明 | 锚定 AI 的基础人格和行为边界 |
| <knowledge-cut-off> | 知识时效性约束 | 防止模型"幻觉"过期信息,强制走工具获取新数据 |
| <response-style> | 输出格式约束 | 控制 token 浪费,避免过度装饰 |
| <action-oriented> | 行动导向原则 | 减少"解释型废话",提高任务完成率 |
| <research> | 研究行为协议(含条件触发器) | 最精妙的部分!见下文详析 |
| <skill-access> / <skill-loading> | 技能系统接入规范 | 让 Agent 具备动态能力扩展机制 |
| <critical-reminder> | 安全护栏 | 防止"猜错就干"导致的错误操作 |
| <tool-use-rules> | 工具调用约束 | 规范工具使用的边界条件 |
技能加载设计了优先级链路:
这种设计实现了能力扩展与效率的平衡。
| 防御手段 | 解决什么问题 | 具体实现 |
|---|---|---|
| 知识截止日期 | 时效性幻觉 | 强制 2025-07 后信息走工具 |
| 禁止猜测 | 需求理解偏差 | 必须 ask_user_question 澄清 |
| 禁止跳步 | 偷懒/不完整研究 | do NOT skip this |
| 禁止早结论 | 草率回答 | ⚠️ Do not jump to final answer |
| 格式限制 | Token 浪费 | Avoid over-formatting |
| 标签无关声明 | 误读系统标签 | bear no direct relation to... |
LLM Space 的 Evaluate 功能是它的杀手级特性之一。以下是具体操作步骤:
| 指标类型 | 说明 | 适用场景 |
|---|---|---|
| 正确性 Accuracy | 输出是否包含正确答案 | QA、事实检索类任务 |
| 完整性 Completeness | 是否覆盖了问题的所有方面 | 研究、分析类任务 |
| 遵循度 Following | 是否遵守了系统指令中的约束 | 格式、安全、风格等约束 |
| 工具调用质量 | 选择的工具是否恰当、参数是否正确 | Agent 类任务 |
| 延迟 / Token 效率 | 响应时间和 token 消耗 | 性能敏感场景 |
| 步骤 | 操作 | 预期产出 |
|---|---|---|
| 1 | Build 模块编写/导入 System Prompt | 版本化的 Prompt 配置 |
| 2 | 创建测试 Thread,录入 Test Cases | 标准化测试集 |
| 3 | Evaluate 模块选择运行配置(模型/参数) | 运行计划 |
| 4 | 执行批量运行 | 原始运行结果 |
| 5 | 查看评估仪表盘(准确率/分数分布) | 量化评估结果 |
| 6 | Drill-down 到失败 Case 的 Trace 详情 | 失败根因分析 |
Debug 是 LLM Space 最强大的差异化功能——支持历史运行的重放和单步调试。
| 现象 | 排查方向 | Debug 操作 |
|---|---|---|
| 回答完全错误 | System Prompt 是否清晰? | Replay → 修改 Prompt → 重跑 |
| 选错了工具 | Tool 描述是否歧义? | 单步到 Tool Selection 步骤检查 |
| 工具参数错误 | 参数描述不够具体? | 检查 Tool Schema 定义 |
| 忽略指令约束 | 指令被其他内容淹没? | 简化 Prompt 或用 <critical-reminder> 强化 |
| 重复循环/死循环 | 缺少终止条件? | Trace 查看 loop 模式,加 max_iterations |
| Token 消耗过高 | 上下文膨胀? | Trace 查看 token 分布,优化 context window 管理 |
Agent 的质量很大程度上取决于它调用的工具。LLM Space 提供了完整的工具调试能力:
| 调试维度 | 方法 | LLM Space 操作 |
|---|---|---|
| 工具发现 | 模型是否能找到合适的工具 | 发模糊请求,观察是否选中目标工具 |
| 参数构造 | 参数值是否正确完整 | Trace → Tool Call 步骤检查参数 |
| 结果解析 | 模型能否正确理解工具返回 | Mock 不同格式的返回值观察 |
| 多工具编排 | 多个工具的组合调用是否合理 | Trace 查看完整调用链 |
| 工具冲突 | 相似工具间是否有混淆 | 添加两个相似工具,测试区分度 |
| 权限/错误 | 工具报错时的处理 | Mock 403/500/timeout 等异常 |
这是高级用法——利用 LLM Space 的 Replay + Mock 能力,系统性测试 Agent 在各种异常情况下的鲁棒性。
| 异常类型 | 注入方式 | 期望行为 |
|---|---|---|
| 工具超时 | Mock 工具返回 timeout 错误或不响应 | Agent 应有重试机制或优雅降级,不应崩溃或无限等待 |
| 工具返回空 | Mock 工具返回空字符串 / 空数组 / null | 应告知用户"未找到结果",而非编造数据 |
| 工具返回错误格式 | Mock 返回非法 JSON / HTML 错误页 / 乱码 | 应有解析容错,不应将错误原样暴露给用户 |
| 工具返回超大 payload | Mock 返回 100KB+ 的长文本 | 应能摘要/截断,不应超出 context limit 导致截断 |
| HTTP 4xx/5xx | Mock 返回 401/403/404/500/502/503 | 应根据错误码给出合理的用户友好提示 |
| 并发竞争 | 同时发起多个相同请求 | 不应产生重复操作或状态不一致 |
| 恶意输入 | 输入 Prompt Injection / 越权指令 / 隐藏指令 | 应忽略或拒绝,不执行越权操作 |
| 上下文溢出 | 连续长对话导致 context 接近上限 | 应有 context management 策略(滑动窗口/摘要) |
| 模型幻觉诱饵 | 问一个听起来真实但不存在的事实 | 应承认不确定,而非自信地编造(参考 knowledge-cut-off 设计) |
| 循环诱导 | 设计一个会让 Agent 反复调用工具的场景 | 应有 max iterations / loop detection 机制 |
LLM Space 解决的是 Agent 开发中最痛的三个问题:
| 痛点 | 传统方案 | LLM Space 方案 |
|---|---|---|
| 不可观测 | 只能看到最终输出 | Trace 全链路可见 |
| 不可复现 | 出了问题无法重现 | Replay 任意历史运行 |
| 不可量化 | "感觉还行"式评估 | Evaluate 批量量化评测 |
报告生成时间:2026-07-16 | 数据来源:GitHub deer-flow/llm-space v4.1.1 | 仓库地址 | 官方文档