Rule Engine:用 AND/OR 条件把 trace 属性映射到上下文/Prompt/评估配置
30 秒导读: OpenLIT 的规则引擎是一个「运行时查表器」。你给它一组 trace 属性(比如"这条调用用的是 openai + gpt-4"),它按你事先配好的 AND/OR 条件组去匹配规则,命中后告诉你"该给这条调用挂哪份 context、哪个 Prompt、哪套评估配置"。它是把评估和 Prompt/context 粘起来的动态层——评估要的"上下文即真相",很多就是它挑出来的。
本章是 OpenLIT 讲解系列的一环,同组还有 index、01 一行 init、02 span/metric、03 落库、04 评估、05 护栏。
1. 这是什么(零基础也能懂)
- 一句话定义: 规则引擎 = 一张「IF 条件 THEN 挂谁」的动态映 射表。条件写在 trace 属性上,结果指向一个实体(context / prompt / evaluation)。
- 解决什么问题: 你的评估器需要"参考答案 / 领域知识"当上下文,但不同调用需要不同的上下文。硬编码"gpt-4 用这份、claude 用那份"会写死在代码里。规则引擎把这套 IF-THEN 挪到数据里,运行时按 trace 属性动态查。
- 给谁用: 做 LLM 可观测 + 评估的工程师。埋点已经把
gen_ai.system、gen_ai.request.model、deployment.environment这些属性打进了 trace(见 02),规则引擎直接拿它们当匹配输入。 - 一句话直觉: 像 Web 框架的路由表——URL 进来匹配路由,命中就分派到对应 handler。这里是 trace 属性进来匹配规则,命中就分派到对应的 context/prompt/评估配置。
用起来什么样。 Python SDK 一次调用就够(sdk/python/src/openlit/__init__.py:601 evaluate_rule):
import openlit
# 示意,非源码:把当前调用的 trace 属性丢给规则引擎,问"该挂哪份 context"
res = openlit.evaluate_rule(
entity_type="context", # 想要哪类实体:context / prompt / evaluation
fields={ # 拿来匹配的 trace 属性
"gen_ai.system": "openai",
"gen_ai.request.model": "gpt-4",
},
include_entity_data=True, # 顺便把命中的 context 正文也取回来
)
# res = { "matchingRuleIds": [...], "entities": [...], "entity_data": {...} }
返回三样东西:命中了哪些规则(matchingRuleIds)、命中规则挂着哪些实体(entities)、以及(可选)实体的完整数据(entity_data,比如 context 正文、编译好的 prompt)。