PRD → 测试用例生成
需求变更频繁,用例字段对不上,回归成本居高不下。
把输出做成稳定结构,并用关键字段保障进行校验,让用例可自动回归。
Agently · 工程化输出控制与事件驱动编排
让输出可验证,让流程可编排
业界谈的 Context Engineering、结构化输出、事件驱动,本质上是在提出同一个问题:怎样把模型的不确定性,翻译成系统的确定性?
Agently 把“可上线要求”落成一条可直接调用的能力链路。
TriggerFlow 以信号触发为核心语法,信号来自事件、运行时数据与流程级数据。 处理块完成后自动发出完成信号,下游继续触发;运行时流让过程可被实时输出。
从真实需求出发,看看如何更快交付到生产。
需求变更频繁,用例字段对不上,回归成本居高不下。
把输出做成稳定结构,并用关键字段保障进行校验,让用例可自动回归。
问题顺序、分支路由、并发采集,越做越像一套系统。
用事件与运行时数据驱动流程,在运行中按回答触发下一步。
引用来源、答案结构与元信息要一致,才能接入你的业务系统。
用分层 Prompt 与响应对象,把检索、回答、引用与元信息统一读写。
你希望边生成边行动:推理、动作与输出能在一次请求里更早到达前端。
即时解析把局部结构变成实时信号,再用运行时流把过程稳定地推到用户侧。
先看能力与价值,再看最小可运行代码。
from agently import Agently
Agently.set_settings(
"OpenAICompatible",
{
"base_url": "http://127.0.0.1:11434/v1",
"api_key": "YOUR_API_KEY",
"model": "qwen2.5:7b",
},
)
agent = Agently.create_agent()
result = (
agent
.input("给我输出3个单词和2个句子")
.output({
"单词": [("str",)],
"句子": [("str",)],
})
.start(
ensure_keys=["单词[*]", "句子[*]"],
max_retries=1,
raise_ensure_failure=False,
)
)
print(result)
from agently import Agently
Agently.set_settings(
"OpenAICompatible",
{
"base_url": "http://127.0.0.1:11434/v1",
"api_key": "YOUR_API_KEY",
"model": "qwen2.5:7b",
},
)
agent = Agently.create_agent()
result = (
agent
.input("Give me 3 words and 2 sentences")
.output({
"words": [("str",)],
"sentences": [("str",)],
})
.start(
ensure_keys=["words[*]", "sentences[*]"],
max_retries=1,
raise_ensure_failure=False,
)
)
print(result)
{'单词': ['苹果', '电脑', '学习'], '句子': ['我喜欢吃苹果。', '他用电脑工作。']}
{'words': ['apple', 'computer', 'learning'], 'sentences': ['I like apples.', 'He works on a computer.']}
response = (
agent
.input("解释递归,并给出 2 个提示")
.output({
"definition": ("str", "Short definition"),
"tips": [("str", "Short tip")],
})
.get_response()
)
for msg in response.get_generator(type="instant"):
if msg.path == "definition" and msg.delta:
print(msg.delta, end="", flush=True)
if msg.wildcard_path == "tips[*]" and msg.delta:
print(msg.delta, end="", flush=True)
print()
response = (
agent
.input("Explain recursion and give 2 tips")
.output({
"definition": ("str", "Short definition"),
"tips": [("str", "Short tip")],
})
.get_response()
)
for msg in response.get_generator(type="instant"):
if msg.path == "definition" and msg.delta:
print(msg.delta, end="", flush=True)
if msg.wildcard_path == "tips[*]" and msg.delta:
print(msg.delta, end="", flush=True)
print()
▍
▍
from agently import TriggerFlow, TriggerFlowEventData
flow = TriggerFlow()
@flow.chunk
async def normalize(data: TriggerFlowEventData):
return str(data.value).strip().lower()
@flow.chunk
async def greet(data: TriggerFlowEventData):
return f"hi {data.value}"
flow.to(normalize).to(greet).end()
print(flow.start(" Agently "))
hi agently
# prompt.yaml
.agent:
system: 你是企业知识助手
.request:
input: "{question}"
output:
answer:
$type: str
$desc: 一句话回答
# load
from agently import Agently
agent = Agently.create_agent()
agent.load_yaml_prompt("prompt.yaml", mappings={"question": "Agently 有哪些能力?"})
print(agent.start())
# prompt.yaml
.agent:
system: You are an enterprise knowledge assistant.
.request:
input: "{question}"
output:
answer:
$type: str
$desc: One-sentence answer
# load
from agently import Agently
agent = Agently.create_agent()
agent.load_yaml_prompt("prompt.yaml", mappings={"question": "What can Agently do?"})
print(agent.start())
{'answer': '输出可控、流程可编排、工程化可落地。'}
{'answer': 'Stable outputs, orchestrated workflows, and production-ready delivery.'}
从你的下一个任务开始:安装、模型设置、输出控制、提示词管理与事件编排,一路走到可上线。
我想跑通第一个请求:装好、设模型、拿到结构化输出与即时解析。
进入快速开始我想接入/切换模型:用 OpenAI 风格接口统一接入,密钥与参数集中管理。
模型设置我想让输出稳定:输出格式 + 关键字段保障 + 即时解析。
模型输出控制我想一次请求多次取用:文本、结构化数据、元信息与事件流统一读取。
模型返回结果我想让提示词可维护:分层、变量映射、配置化与版本化。
提示词管理我想把流程跑起来:信号触发、分支并发、以及运行时流式输出。
事件编排综述我想接入业务能力:工具调用、函数接口与会话管理。
Agent 扩展我想照着做:完整业务场景方案与可运行示例。
场景实战案例