s09
SOUL 人格系统
智能层对话式引导生成
Bootstrap Skill 4 阶段对话 → SOUL.md通过自然对话而非手动配置生成 Agent 人格,降低用户门槛
对话式引导生成
Bootstrap Skill 4 阶段对话 → SOUL.md通过自然对话而非手动配置生成 Agent 人格,降低用户门槛
通用 Agent 缺乏个性——所有用户得到相同的交互体验。手动编写 system prompt 门槛高、格式不统一、难以维护。DeerFlow 的 SOUL 系统通过 Bootstrap Skill 引导式对话自动生成结构化的 SOUL.md,再由 load_agent_soul() 注入 system prompt,实现零门槛的个性化 Agent 创建。
# Agent 人格配置 ## 角色 数据分析专家,擅长 Python 和 SQL ## 沟通风格 严谨但不死板,用数据说话 ## 行为边界 - 不执行破坏性操作 - 数据敏感操作需确认
setup_agent 工具 — Bootstrap 流程的最终步骤:将 SOUL.md 写入 Agent 目录
@tool
def setup_agent(
soul: str, # 完整的 SOUL.md 内容
description: str, # Agent 一行描述
runtime: ToolRuntime,
) -> Command:
"""Setup the custom DeerFlow agent."""
agent_name = runtime.context.get("agent_name")
paths = get_paths()
agent_dir = paths.agent_dir(agent_name)
agent_dir.mkdir(parents=True, exist_ok=True)
# 写入 config.yaml(名称+描述)
config_data = {"name": agent_name, "description": description}
yaml.dump(config_data, open(agent_dir / "config.yaml", "w"))
# 写入 SOUL.md(人格定义)
(agent_dir / "SOUL.md").write_text(soul)
return Command(update={
"created_agent_name": agent_name,
"messages": [ToolMessage(content=f"Agent '{agent_name}' created!")]
})load_agent_soul — 从 Agent 目录加载 SOUL.md 注入 system prompt
SOUL_FILENAME = "SOUL.md"
AGENT_NAME_PATTERN = re.compile(r"^[A-Za-z0-9-]+$")
def load_agent_soul(agent_name: str | None) -> str | None:
"""读取 SOUL.md — 定义 Agent 的人格、价值观和行为边界。
注入到 lead agent 的 system prompt 中。"""
agent_dir = (get_paths().agent_dir(agent_name)
if agent_name else get_paths().base_dir)
soul_path = agent_dir / SOUL_FILENAME
if not soul_path.exists():
return None
content = soul_path.read_text(encoding="utf-8").strip()
return content or None