题干与适用场景
你负责一个包含检索、模型调用和工具执行的 GenAI 应用。团队需要回答:哪一个模型版本导致首 token 延迟上升?某个工具是否增加了失败率?成本是否集中在少数租户?离线评估分数下降时,能否回放对应请求而不暴露提示词中的个人资料?请使用 OpenTelemetry 语义约定设计 traces、metrics、events 和数据质量门槛。
本题考察观测数据建模与验证,不要求绑定特定厂商。OpenTelemetry 将语义约定定义为跨代码库、库和平台共享的属性命名与含义;GenAI 约定覆盖模型、会话、工具调用、token 用量和评估信息,但部分内容仍在演进,不能把每个属性都当成稳定协议。
面试官在考察什么
面试官希望看到从业务问题反推信号,而不是堆满模型参数的日志。强回答会把一次用户请求关联到检索、模型、工具和最终结果,并保留足够的版本与租户维度来定位回归。
还要说明数据边界:原始提示词、回复、工具参数和检索文档可能含有敏感信息;高基数的会话 ID、用户 ID 或完整内容不能无条件作为指标标签。采集策略必须同时考虑隐私、存储成本、采样和留存。
最后要有质量门槛。缺少父子 span、模型版本、结束原因或 token 计数时,数据应标为不完整并进入监控,而不是生成看似精确的看板。
回答前需要澄清的问题
先问要优化的结果:是首 token 延迟、总延迟、每请求成本、工具成功率、检索召回还是答案质量?不同目标决定 traces、metrics 与评估事件的优先级。
再问数据敏感度和合规区域。是否允许存储提示词和回复?是否需要跨区域隔离或按租户删除?如果不能保存原文,就要依赖哈希、脱敏摘要、引用 ID 和离线安全回放。
最后问流量和留存。请求量、模型调用次数、工具调用深度、采样比例和保留期限决定 collector、队列、存储分区以及成本预算。
30 秒回答框架
可以这样回答:
“我先把用户请求建成一条 trace,检索、模型生成、工具调用和评估各自是带版本的子 span 或 event。指标只使用低基数维度,例如模型、提供者、工作流和结果状态;提示词、回复和工具参数进入受控事件流,经过脱敏、采样和访问审计。每条记录都验证 trace 关联、时间顺序、模型版本和 token 计数,缺字段就标记数据质量失败。看板同时展示延迟、成本、错误和质量分,并用固定采样的原始请求做回放。”
分步骤深入解答
先画出端到端信号图
入口 span 记录请求 ID、租户摘要和工作流版本;检索 span 记录数据源 ID、查询摘要与返回数量;模型 span 记录提供者、请求模型、响应模型、流式标志、首 token 时间与 token 用量;工具 span 记录工具类型、调用 ID、结果状态;评估 event 记录评估名称、分数和解释。
用低基数维度设计指标
按模型、提供者、工作流、区域、结果状态和错误类别聚合延迟、token、成本和成功率。会话 ID、用户 ID、文档 ID和完整错误文本留在 trace 或事件中,不直接放进指标标签,避免时间序列爆炸。
分离内容事件与运行指标
OpenTelemetry 的 GenAI 观测说明将 traces、metrics 和 events 作为三类信号;提示词与回复适合事件流,因为它们体积大、敏感且需要不同留存。运行指标只保留计数、时延和成本,内容事件通过受控存储、加密和短留存处理。
记录版本和因果链
每个 span 记录模型、提示模板、检索器、工具定义和评估器版本。一次回归分析要能从结果分数回到具体模型请求和输入数据版本;只记录一个“模型名称”无法区分别名漂移、路由变化和提示模板变化。
处理采样与成本预算
用固定比例保留完整 trace,再对错误、高延迟、低质量分和新版本提升采样率。token 和工具调用次数可实时聚合,超过租户预算时触发限流或降级。采样规则必须写入数据质量元数据,否则不同版本的指标不可直接比较。
做隐私与访问控制
在 SDK 或 collector 处执行字段级脱敏,阻止把密码、个人资料和密钥写进属性。将内容事件与运行指标分开授权,使用租户范围、加密引用和删除索引支持合规请求。禁止用“只在内部”作为不记录敏感内容的理由。
校验完整性和顺序
对每条 trace 检查父子关系、时间单调性、结束状态、模型版本和工具调用 ID。对 metrics 检查单位、桶边界、单调计数器与重复上报;对 events 检查 schema 版本、脱敏状态和大小上限。失败记录进入坏数据队列并带原因码。
用评估事件连接质量
评估 event 至少包含评估名称、分数、标签和解释引用。不要把自动评分当成事实;将评估器版本、样本集版本和人工抽检结果一起记录。质量回归应同时检查延迟、成本、错误和分数,避免只优化某一个信号。
高质量示范回答
“我会把一次请求建成可关联的 trace:入口、检索、模型、工具和评估分别记录版本化的 span 或 event。指标只使用模型、提供者、工作流和结果状态等低基数维度,聚合首 token、总延迟、token、成本和错误率。提示词、回复及工具参数进入经过脱敏和访问审计的内容事件流,不当作指标标签。采集层校验父子关系、时间顺序、Schema、模型版本和 token 计数,异常进入坏数据队列。完整 trace 固定采样,错误、慢请求和质量回归提高采样;看板同时连接运行指标与评估分数,并用样本集和评估器版本做可复现回放。”
常见错误
把所有内容放进 metrics 标签
错误表现:用用户 ID、会话 ID或完整提示词做标签。失败原因:高基数会造成存储和查询失控,也放大隐私风险。修正方法:指标只保留低基数维度,内容放入受控事件。
只记录模型名称
错误表现:看板按模型名称比较所有结果。失败原因:别名路由、提示模板、检索器或工具版本变化会被混在一起。修正方法:记录请求模型、响应模型、工作流和依赖版本。
只看 token 成本
错误表现:成本下降就宣布系统改善。失败原因:可能牺牲首 token、工具成功率或答案质量。修正方法:同时监控成本、延迟、错误、检索结果和评估分。
直接保存提示词与回复
错误表现:为方便回放长期保存原文。失败原因:内容可能包含个人资料、密钥或跨租户信息。修正方法:字段脱敏、短留存、加密引用、按租户访问和删除索引。
忽略坏数据
错误表现:父 span 丢失或 token 为空时仍纳入分母。失败原因:指标看似完整却无法解释。修正方法:设置完整性门槛、坏数据队列和质量仪表板,分离缺失数据与真实零值。
追问及应对
如果团队要求记录完整推理过程怎么办?
先确认业务需要的是可审计证据、工具轨迹还是模型内部思维。优先记录输入引用、工具调用、版本、评估依据和结果摘要;不把不必要的敏感内容或内部推理文本写入长期存储。
如果 GenAI 语义约定发生迁移怎么办?
在 collector 和仓库中保存 Schema 版本,建立旧字段到新字段的映射,并通过双写或兼容查询完成迁移。看板按版本分组,避免把不同语义混算。
如果高峰期无法保留完整 trace 怎么办?
保留所有错误和极端延迟的完整 trace,对正常流量做固定比例采样;同时保留聚合指标和事件摘要。采样率、触发规则和丢弃原因要进入质量元数据。
如果评估分数下降但延迟改善怎么办?
按模型、提示模板、检索数据集、工具版本和租户切片,先确认样本集与评估器没有变化。将质量回归与性能收益交给发布门槛判断,不能只看单一指标。
如何证明 trace 没有跨租户泄露?
在采集、传输、存储和查询层执行租户边界测试;用合成数据验证属性、事件和引用都带租户范围,并对异常查询发出审计告警。删除请求要能从索引找到所有派生事件。