Agent Behavior Specification 是一个 YAML 格式规范,用以描述 AI Agent 的可观测行为(消息、工具调用、交接等),独立于 LLM 提供商和框架,可在 10 分钟内上手运行。
你肯定见过这种流程。QA 打开一个 Word 文档,输入"如果缺少订单号,机器人应该询问订单号",然后手动测试智能体。与此同时,Dev 依据一个不断变化的 PR 描述进行开发。产品负责人(PO)也没什么可以签字确认的东西——不是文档就是代码。20 年前,我们用 OpenAPI 解决了 API 的这个问题。一份共享契约,机器可读、工具无关、人类可审计。AI 智能体没有等价物。直到现在。
Agent Behavior Specification(ABS)是一种 YAML 格式,用于描述可观测的智能体行为——消息、工具调用、转交、UI 交互——独立于你的 LLM 提供商、框架或工具协议。
一个文件。三方参与者。两种模式:描述模式和执行模式。
session: Customer checks order status
behaviors:
- actor: user
action: says
content: "Where is my order #8291?"
- actor: assistant
action: calls
target: Orders API
- actor: assistant
action: informs
content: "Your order is on the way"
evaluations:
- type: contains
value: "on the way"
就这么简单。每步三个字段——actor、action、content/target。产品负责人把它读作行为契约。QA 把它当作测试来运行。开发人员把它当作验收标准。在本文中,你将在 10 分钟内构建并运行你的第一个智能体规范。
npm install -g abslang
# or: pip install abslang
abslang --version
# abs v0.1.0
abslang init my-agent-tests
cd my-agent-tests
.
├── abs.config.yaml
├── sessions/
│ └── order-status.abs.yaml # 示例会话
└── datasets/
└── order-status.jsonl # 3 个测试用例
这功能能帮你节省 80% 的学习曲线:
abslang chat
🤖 ABS Assistant — 描述你想测试的智能体行为
You: A customer reports a damaged item. The agent should verify the order, process a refund, confirm the amount and reference, and offer further help.
Assistant: I'll draft a refund flow with tool calls, step-level evaluations, and chain checks…
[生成完整的 .abs.yaml]
使用 OPENAI_API_KEY、ANTHROPIC_API_KEY 或 DEEPSEEK_API_KEY——哪个设置了用哪个。它了解完整的 ABS v0.1 规范,可以即时生成经验证的 YAML。
以下是一个跨越三个对话轮次的退款流程。没有工具调用——这适用于任何智能体:
session: Damaged item → refund (multi-stage evaluation)
behaviors:
# ── 第 1 轮:智能体分类意图 ──
- actor: user
action: says
content: "I received a damaged item, I want my money back. Order #8291."
- actor: assistant
action: clarifies
content: "I understand your order #8291 arrived damaged. I'll help you get a refund."
# ── 第 2 轮:解决 ──
- actor: user
action: says
content: "Yes please, how long will it take?"
- actor: assistant
action: informs
content: "Refund of €47.50 approved. Reference: R-5512. You'll receive it in 3-5 days."
capture:
refundId: "R-5512"
# ── 第 3 轮:关闭 ──
- actor: user
action: says
content: "Great, thanks."
- actor: assistant
action: confirms
content: "You're welcome! Is there anything else I can help with?"
六个行为,三个轮次。目前仅是描述模式——还没有 evaluations。
这就是 ABS 体现价值的地方。在任意步骤添加 evaluations: 块:
- actor: assistant
action: clarifies
content: "I understand your order #8291 arrived damaged. I'll help you get a refund."
evaluations:
- type: llm_judge
criteria: |
1. 正确将意图分类为退款请求
2. 引用了订单号 #8291
3. 确认了损坏(不是简单的退货)
4. 承担了解决的责任
现在添加链式评估(chain evaluations)——即整个执行链的属性:
```yaml
evaluations:
- type: sequence
order:
- { actor: assistant, action: clarifies }
- { actor: assistant, action: informs }
- { actor: assistant, action: confirms }
- type: variable_consistency
variable: refundId
sequence 检查这三个阶段是否按顺序发生。variable_consistency 则捕获一个微妙但致命的 bug——智能体在对话中途悄悄将一个退款 ID 换成了另一个。
abslang run sessions/refund.abs.yaml --agent http://localhost:8080/chat
你的智能体只需一个 HTTP 端点:
POST /chat
{ "messages": [{ "role": "user", "content": "..." }] }
就这样。OpenAI 兼容格式。Runner 扮演用户,捕获执行链,并运行所有评估:
┌──────────────────────────────────────────────────────┐
│ ABS — Results │
├──────────────────────────────────────────────────────┤
│ Session: Damaged item → refund │
│ Result: ✅ PASSED │
│ Steps: 6/6 matched · 5/5 evaluations passed │
├────┬──────────────────────────────────┬────────┬─────┤
│ 1 │ user says "damaged item..." │ → │ sent│
│ 2 │ assistant clarifies │ ✅ │match│
│ │ └─ llm_judge: intent check │ ✅ │ pass│
│ 3 │ user says "how long?" │ → │ sent│
│ 4 │ assistant informs │ ✅ │match│
│ │ ├─ contains "R-5512" │ ✅ │ pass│
│ │ └─ llm_judge: quality check │ ✅ │ pass│
│ 5 │ user says "thanks" │ → │ sent│
│ 6 │ assistant confirms │ ✅ │match│
│ │ └─ llm_judge: closing check │ ✅ │ pass│
│ C │ sequence: clarifies→informs→conf │ ✅ │ pass│
│ C │ variable_consistency: refundId │ ✅ │ pass│
└────┴──────────────────────────────────┴────────┴─────┘
将硬编码值替换为 {{占位符}}:
dataset:
id: cases
path: cases.jsonl
behaviors:
- actor: user
action: says
content: "{{cases.userMessage}}"
# ...
使用你的数据集文件:
{"userMessage": "Item damaged, order #8291. Refund please.", ...}
{"userMessage": "Order #3412 arrived broken. I want my money back.", ...}
{"userMessage": "Wrong item in box #5567. Refund.", ...}
abslang run session.abs.yaml --agent $URL --dataset cases.jsonl
三条数据,三次运行,一份聚合报告。3 行数据或 300 行数据均可用。
行业标准将智能体执行与评估耦合在同一个平台中。部署到他们的基础设施上,他们来运行、来评估。换平台 → 全部重写。
行业现状: [智能体执行 + 评估] 在同一平台内 → 供应商锁定
ABS: [智能体] 在你的基础设施 → [执行链] → [评估] 在任意你需要的地方
你的智能体运行在自己的基础设施上。评估器只接收 {type, input, context, response, threshold},返回 {passed, score, reason}。任何提供商——Azure、LangSmith、Galileo、本地 Ollama 实例——只需一个下午就能实现相同的适配器接口。
你的会话文件永不改变。只有 --adapter 参数需要切换。
abslang init——初始化abslang chat——对话abslang run——运行abslang report——报告(只需一个函数即可添加你自己的适配器)
React 拖拽式设计器,集成在文档站点中
可视化编辑器 + ▶ 运行按钮(开发中)
规范性定义,解析时即验证
npm install -g abslang
abslang init
abslang chat
GitHub: fvinciarelli/abslang ——欢迎 star ⭐
文档: fvinciarelli.github.io/abslang
v0.1,开放评审中。如果你正在构建或测试智能体,期待你的反馈。