我开源了一套 AI Agent 框架:有性格、有规则、还会自己造工具

一个律师写的 Agent 框架------不靠 prompt 约束 agent,用投票、先例和宪法来管。

大家好,我是张泽钰律师。日常办案件,业余写 Python。法律人的思维方式和 AI Agent 治理意外地匹配------核心都是同一个问题:怎么给一个自主实体授权,同时防止它乱来。

这就是我构建 OpenSymphony的初始想法,我构建并 MIT 开源了这个Agent框架。已在 PyPI 发布(pip install opensymphony),395 个测试跑通。

痛点在哪 ?

市面上大部分 Agent 框架解决的是"编排"问题------怎么把 LLM 调用串起来。几乎没人解决一个更难的问题:Agent 是谁?它遵守什么规则?它做错了谁来拦它? 靠人来拦是不现实的,靠它自己自觉更是痴人说梦。

用过 LangChain Agent 的话,应该遇到过这些:

  • 不一致 :昨天还好用的 Agent 今天变成了另一个人。Prompt drift 是真实存在的

  • 不可审计 :Agent 做了一个决策,没有记录为什么。没有先例,没有审查

  • 不安全 :你可以在 system prompt 里说"小心一点",但没有任何结构性机制阻止风险操作

  • 不成长:Agent 不会学习。同样的错误反复犯

OpenSymphony 用三个架构支柱来应对:Soul(灵魂)、Governance(治理)、Self-evolution(自我进化)。

支柱一:Soul ------ 持久的 Agent 身份

Agent 的性格不是一段 prompt。是一个 YAML 文件,编译成行为约束。

yaml 复制代码
# souls/my_agent.yaml  
id: my_agent  
name: MyAgent  
archetype: Code Reviewer  
  
thinking_framework: |  
  You are a code reviewer focused on security and correctness.  
  Rules:  
  1. Flag any unvalidated user input  
  2. Check for race conditions in concurrent code  
  3. Prefer readability over cleverness  
  
values:  
  - Security first  
  - Evidence-based review  
  - Constructive feedback  

thinking_framework 是操作逻辑,values 是优先级冲突时的排序原则。还可以定义 veto conditions------硬性阻止某些操作的开关。

这不叫 prompt engineering。Soul Compiler 把 YAML 编译成结构化的行为框架,跨会话、跨 session 持续有效。Agent 不会忘记自己是谁。

内置了 13 个 Soul:themis(法律推理)、athena(策略)、crit(对抗审查)、shield(安全)、code(实现)、novelistscreenwriter 等等。每个都有自己的思考框架、价值层级和否决条件。

打个法律上的比方:Soul 就像职业行为准则。律师不会接了案子才临时想"律师-当事人保密义务是什么"。它是框架自带的。这里也一样。

支柱二:Governance ------ 结构化决策

这部分最能体现法律背景带来的差异。

律所里,决策走层级。助理起草,资深合伙人审查,风险委员会标记冲突,先例指导后续判断。OpenSymphony 做同样的事:

css 复制代码
Request → Gateway → [Intent Bridge] → [Governance] → Runtime → Kernel → Response  
                                        ↑  
                              Voting / Precedent / Defense  

治理层有四个机制:

VotingMechanism ------ 多个 Agent 投票决策。可配多数规则和超时。三个 Agent 里两个说"这个操作安全",就通过。反对意见被记录。

PrecedentStore ------ 历史决策变成可搜索的先例。Agent 下次遇到类似决策时,检索相关历史。这就是普通法的运作方式------stare decisis(遵循先例),只不过用在 AI Agent 上。

DefenseLayer ------ 每个操作被分类为 saferiskydangerous。Risky 操作需要额外审查。Dangerous 操作除非人类覆盖否则直接拦截。

HITLManager ------ 高风险操作需要人工确认。Agent 提议,人决定。

python 复制代码
from opensymphony.kernel import SymphonyKernel  
  
kernel = SymphonyKernel()  
kernel.load_souls("souls/")  
  
# 请求经过治理层后才执行  
response = kernel.chat("crit", "Should we deploy this untested change to production?")  

当你问 crit Agent 能不能上线未经测试的代码,DefenseLayer 标记为 risky。VotingMechanism 可以轮询多个 Agent。PrecedentStore 调出类似历史决策。HITLManager 可以要求你签字。

我们要达到的效果就是:没有哪个 Agent 能独自做出不可逆决策。

支柱三:Self-Evolution ------ Agent 自己造工具

Tool Workshop 让 Agent 在运行时创建、测试、部署 Python 工具。

Agent 遇到当前工具集解决不了的任务。它自己写一个新的,测试,注册到工具库。不需要人类介入------但治理仍然适用。新工具走同样的风险分类流程。

这很关键------你不可能预判 Agent 未来需要的所有工具。替代方案要么是维护一个巨无霸工具集(维护噩梦),要么给 Agent eval 权限(安全噩梦)。Workshop 是折中方案:Agent 可以扩展能力,但在沙箱里,有资源限制和治理监督。

架构:洋葱模型

每个请求经过同心层:

scss 复制代码
┌─────────────────────────────────────────────────┐  
│  Gateway (HTTP / WebSocket / CLI)                │  
│    └─ HumanAdapter --- Intent Bridge (NL→struct)   │  
├─────────────────────────────────────────────────┤  
│  Governance                                      │  
│    ├─ VotingMechanism --- 多 Agent 决策             │  
│    ├─ PrecedentStore --- 可重用的历史决策           │  
│    ├─ DefenseLayer --- 风险评估                     │  
│    └─ HITLManager --- 人在回路                     │  
├─────────────────────────────────────────────────┤  
│  Runtime                                         │  
│    ├─ AgentPool --- 并发 Agent 管理                 │  
│    ├─ TaskScheduler --- 优先级队列                  │  
│    └─ AgentSandbox --- 资源限制                     │  
├─────────────────────────────────────────────────┤  
│  Kernel                                          │  
│    ├─ Soul Compiler --- YAML → 行为规则             │  
│    ├─ LLM Router --- 云端 + 本地模型                │  
│    ├─ Memory (L1/L2/L3) --- 三层存储                │  
│    └─ Tool Workshop --- Agent 自行造工具            │  
└─────────────────────────────────────────────────┘  

Intent Bridge 把自然语言转成结构化意图。Governance 审查意图。Runtime 带资源限制执行。Kernel 做实际工作:Soul 编译、LLM 路由、记忆检索、工具管理。

没有任何请求能绕过 Governance 到达 Kernel。

三层记忆

Agent 需要不同时间尺度上的记忆:

层级 存储 用途
L1 内存 当前会话上下文
L2 SQLite 经验数据库,支持全文搜索
L3 云端 API 长期持久记忆

L1 快、短命。L2 存储 Agent 学到的教训------"这个 API 限流 100 req/min"、"这个用户喜欢简洁回复"。L3 是可选的云存储,跨会话持久化。

PrecedentStore 横跨 L2 和 L3。Agent 做决策时存下来。类似情景出现时检索出来。随时间推移,系统建立自己的判例法。

LLM 路由 ------ 云端和本地都支持

LLM Router 同时支持云端 API 和本地模型。不同 Agent 可以路由到不同模型------简单的分类任务用本地 7B 模型,复杂推理走云端。

这对成本和隐私都很关键。一个治理系统如果每次决策都走第三方 API,那就是个数据泄露通道。本地模型把敏感决策留在你的硬件上。

普通消费级硬件就能跑。我在一台 16GB RAM 的 Mac mini 上开发和运行 OpenSymphony。本地推理不快,但能用。

395 个测试意味着什么

测试覆盖治理层、Soul 编译、记忆层级、LLM 路由和 Tool Workshop。治理逻辑需要确定性测试------你不能靠 LLM 的概率性输出来验证 DefenseLayer 是否正确拦截了危险操作。

bash 复制代码
git clone <https://github.com/lawcontinue/opensymphony.git>  
cd opensymphony  
pip install -e ".[dev]"  
pytest  # 395 passing, 6 known intent-bridge failures  

快速开始

bash 复制代码
pip install opensymphony  
python -m opensymphony.gateway.http  

定义 YAML Soul,加载,跟你的 Agent 对话。治理层是可选的------可以先不用,等需要时再叠加投票、防御或 HITL。

python 复制代码
from opensymphony.agents.soul import Soul  
from opensymphony.agents.soul_compiler import compile_soul  
  
soul = Soul.from_yaml("souls/my_agent.yaml")  
prompt = compile_soul(soul, output_mode="agent")  

作为律师来造这东西带来什么有趣的变化?

法律系统花了大概 900 年来解决一个问题------AI Agent 现在也面临这个问题:怎么给自主实体决策权,同时防止滥用?

法律的答案是结构性的。宪法、先例、投票流程、辩护律师、上诉审查。而不是在 system prompt 里写"请小心"。

OpenSymphony 借鉴了这些模式。Soul 是职业行为准则,PrecedentStore 是判例法,DefenseLayer 是风险评估,VotingMechanism 是协商民主,HITLManager 是司法审查。

目标不是通过 prompt engineering 让 Agent"有道德"。而是用结构性的约束,让坏行为难以发生、可审计、可修正。

现状和路线图

框架 MIT 许可,代码在 GitHub。13 个内置 Soul 覆盖代码审查到创意写作等场景。应用模块已有小说产线和内容生产管线。

现在能用的:Soul 系统、全量治理层、三层记忆、LLM 路由、Tool Workshop、HTTP/WebSocket/CLI 网关。

规划中的:更多 Soul、更好的本地模型集成、用语义搜索扩展先例检索。

如果你也在做 Agent 系统,对agent治理有想法------这个项目的GitHub Issues 和 PR 都开着,欢迎来聊聊。

相关推荐
riuphan1 小时前
RAG 是什么?带你从0搭建本地向量数据库
node.js
AI袋鼠帝1 小时前
开源WorkBuddy蓝皮书!从0到100最系统Agent实战指南~【建议收藏】
github·aigc
智脑API平台1 小时前
Codex Cloud 任务怎么用?GitHub 仓库、PR 审查和远程开发流程
github·codex·pr 审查
STDD1 小时前
n8n 实战工作流模板:GitHub→飞书通知、定时爬虫→数据库、Webhook→多渠道推送
爬虫·github·飞书
程序员老油条2 小时前
用 n8n 自建自动化:GitHub Push 后自动部署到服务器
服务器·自动化·github
Mintimate11 小时前
从 Git 贡献记录到人设画像报告:AI Stats Agent 的一次全栈实践
github·边缘计算·agent
华科大胡子12 小时前
GitHub开源项目破圈方法论:从技术自嗨到生态共赢
github
梦想三三14 小时前
Git与GitHub基础入门:从零开始掌握版本控制与代码托管(完整图文教程)
人工智能·git·elasticsearch·github
青禾网络16 小时前
前端做音画匹配这件事,我从"随机塞"到"AI 自动对齐"
前端·github