
可观测性AI 评测LLMOpsAI 应用人工智能【免费下载链接】phoenixAI Observability Evaluation项目地址https://gitcode.com/gh_mirrors/phoenix13/phoenix点击查看免费下载phoenix_playground_context 是 PhoenixAI Observability Evaluation 平台内置 Agent 的 playground 技能说明文档本文以其为核心系统讲解 Phoenix Prompt Playground 的三种工作流无数据集的手工迭代、基于数据集 评估器Evaluator的实验、以及函数工具Function Tool的编写与管理。读完本文你将掌握ui.playground.*系列浏览器操作的正确调用顺序、execute_browser_action脚本的编写规范、数据集实验结果的 GraphQL 读取方法以及ui.playground.prompt.tools.write的批量写入语义与注意事项。一、背景Playground 是什么以及 Agent 如何操作它Phoenix Prompt Playground 是用于编写与优化提示词Prompt的工具它支持两种工作方式无数据集的快速手工迭代适合草稿、重写或手工改进一条提示词无需评估闭环基于数据集的实验将提示词跑在数据集上配合评估器与实验Experiment获得量化证据。选择哪种工作流取决于用户当前的目标以及 UI 中挂载mounted的上下文。从 PLAYGROUND_CONTEXT_INSTRUCTIONS.xml 可知当ui_contexts中存在playground条目时上述指引即生效且instances的顺序与浏览器显示顺序一致对应标签 A、B、C、D——与用户讨论时用字母调用ui操作时传数字instanceId。Playground 的所有操作都是ui.*形式的浏览器操作通过execute_browser_action脚本调用标准形式为await ui.operation(input)例如await ui.playground.run({})。使用前务必先用search_browser_actions确认操作名与输入参数的准确形状并且优先用一个小的脚本串联相关步骤而不是为每个操作单独发起一次调用——因为每次execute_browser_action都消耗一个完整的模型轮次而脚本内部的一次await是免费的。这一点在 execute_browser_action.py 的工具描述中有明确强调。二、工作流一无数据集创建与迭代当用户想要起草、重写或手工改进提示词且当前不涉及数据集评估闭环时使用本工作流。核心步骤澄清任务明确输入变量、期望的输出形状、受众、约束条件以及可用的好/坏行为示例。先读后改若 Playground 中已存在提示词先调用ui.playground.prompt.read拿到当前的消息messages、消息 ID、标签labels与版本号revision再提出修改建议。起草或修订让提示词清晰陈述任务、所需上下文、输出契约output contract与成功标准并紧扣用户目标。编辑走审核对已挂载的提示词用ui.playground.prompt.edit修改以便用户在接受前看到 diff。实例管理用户想要一个从默认提示词消息开始的对比实例用ui.playground.instance.add用户想保留现有提示词内容作为起点做对比用ui.playground.instance.clone讨论变体时用字母标签但操作一律传数字instanceId添加后使用返回的addedInstance快照进行后续编辑。变量填充用户提供提示词模板变量的手工值时用ui.playground.variables.set。重复次数当用户担心波动flakes、结构化输出一致性、工具调用可靠性或想确认提示词是否值得保存时在运行前调用ui.playground.repetitions.set。LLM 输出是非确定性的重复次数通过在多次运行中检查同一任务来建立信心而非轻信单次成功响应。运行仅当用户明确要求运行、尝试、测试或对比当前提示词时才调用ui.playground.run。将其输出视为定性反馈而非数据集级证据。一个脚本可以串联运行与读取const run await ui.playground.run({}); if (!run.ok) return run; return await ui.playground.run.readOutput({});读取输出运行结束后调用ui.playground.run.readOutput检查原始输出需要时可取traceId做链路分析。若运行使用了多次重复须逐一检查每次重复的结果再总结置信度或建议保存。保存仅当用户明确要求保存或确认持久化当前提示词时才调用ui.playground.prompt.save。首次保存未命名提示词时省略name除非用户给了操作会从提示词内容推导出合法的 Phoenix 提示词名称保存描述description必须始终填写应像一条简短清晰的 git commit message。标签tags按版本发布对待除非用户要求否则不要主动打标签。迭代循环与用户一起检查输出确定下一个具体改进点重复编辑或对比循环直到提示词对任务足够可用。状态语义补充来自 PLAYGROUND_CONTEXT_INSTRUCTIONS.xml 的状态说明repetitions表示每个示例被运行的次数recordExperiments为 true 表示下一次数据集运行会被记录为持久化实验false 表示临时运行nextExperimentScaffold是用户已为下一次数据集运行预置的名称、描述与元数据hasMetadata只是存在性标志而非值若该键不存在说明尚未预置使用服务端默认值不要重复预置已设置的内容每个instances条目是已挂载的提示词实例及其当前模型选择model.provider与model.modelName标识模型model.type为custom时来自自定义 Provider额外带customProviderId与customProviderName无model键表示尚未选择模型experimentId是该实例最近一次数据集运行产生的实验 ID如果有的话evaluators列出已加载数据集上的评估器空数组表示尚未添加评估器。三、工作流二基于数据集、评估器与实验的迭代当用户希望在数据集上获得提示词改进的证据或用评估器结果对比提示词变体时使用本工作流。将提示词跑在数据集上天然就是一次实验在设计运行前就要参考experiments技能它从端到端掌握迭代方法论创建时预置什么、如何读取与对比结果、何时需要评估器evaluators技能负责设计给结果打分的评估器。本工作流只覆盖 Playground 侧设置并启动一次记录型运行的机制。加载数据集若尚未加载调用ui.playground.dataset.load。若用户指定了数据集但未指定 split且数据集存在多个 split则向用户点名询问是限定某一个还是加载整个数据集——然后只加载一次。确保起始提示词成型运行前提示词应定义任务、相关变量、输出格式及一致性评估所需的约束。设置录制当用户希望下一次数据集运行被记录、持久化或保存为实验或想为下一次实验命名、描述、附加元数据如假设或正在变更的变量时在运行前调用ui.playground.experiment.setRecording。仅当用户明确要求临时、一次性、不记录、短暂运行时才把recordExperiments设为 false。仅当请求的录制模式或脚手架字段与当前公布的recordExperiments与nextExperimentScaffold值不同才调用预置的脚手架只作用于那一次运行并在运行开始时被消费。这与ui.playground.prompt.save保存提示词版本而非运行结果是两回事。设置重复次数用户需要跨多次尝试建立信心时尤其是抖动行为、结构化输出或工具调用正确性在运行前调用ui.playground.repetitions.set。运行将 Playground 跑在数据集上。录制开启时每个提示词实例在数据集上的运行都会被捕获为一次实验输出与评估器标注可供审阅。读取结果判断变更是否有帮助遵循experiments技能创建下一个候选时用ui.playground.prompt.edit、ui.playground.instance.add从默认提示词消息开始或ui.playground.instance.clone从现有提示词内容开始然后重新运行。保存仅当证据显示有改进或用户明确接受权衡后才用ui.playground.prompt.save将提示词保存为新版本。对未保存的提示词除非用户在意确切名称否则操作可直接创建 Phoenix 提示词而无需询问名称。读取实验结果用 phoenix-gql 而非 readOutput当实例携带experimentId时读取其成本与评估器分数应使用phoenix-gql通过 bash 调用而不是ui.playground.run.readOutput。相关 GraphQL 字段runCount、expectedRunCount可参考 experiments 引用文档phoenix-gql --vars {experimentId:id} query($experimentId: ID!){ node(id:$experimentId){ ...on Experiment { runCount expectedRunCount job{status} costSummary{total{cost tokens}} annotationSummaries{annotationName meanScore count errorCount} } } }关键判定规则experimentId只表示该实验可查询不表示运行已结束——只有当job.status为COMPLETED或runCount expectedRunCount时摘要才可作为最终结果信任对比重跑时从对话中取更早的实验 ID 重新查询并 diff 摘要未记录运行的实验是临时的服务端会在最后一次更新约 24 小时后清理sweep它们。新出现的experimentId通常在该窗口内可解析但长会话中很早之前的 ID 可能已失效。四、工作流三编写、优化或删除函数工具Function Tool当用户希望模型能在运行中调用提示词里的函数/工具或要优化已有工具的签名、删除工具时使用本工作流。函数工具是存储在 Playground 提示词实例上的 JSON Schema 函数定义与消息、模型配置并列是模型运行时可调用的对象。先读先调用ui.playground.prompt.tools.read。结果给出当前工具列表、每个工具的id与kind以及revision令牌。据此决定是更新已有工具、新建还是删除。设计 Schema若用户用文字描述函数为其提出具体 JSON Schema。默认使用小写 snake_case 参数名与{type:object,properties:{...},required:[...]}结构除非用户另有指定。批量写入用最新revision调用ui.playground.prompt.tools.write。所有变更放在单次调用中tools是创建/更新的数组省略id表示创建传已有id表示补丁——只变更你包含的字段deleteToolIds是待删除的 id 列表。删除可以针对raw厂商工具尽管写入路径不允许。整个批次是原子性的all-or-nothing任何变更无效缺 id、写路径出现raw工具、同一 id 同时创建/更新又被删除都不会应用任何变更错误会指明原因。删除强制工具选择forced tool choice所指向的工具是允许的——工具选择会自动重置为 auto 并回传需向用户说明。总结写入后用简明英文总结变更内容创建 vs 更新了哪些工具并告知新建工具的 id方便用户在工具编辑器中核对。验证若用户希望模型在运行中使用新工具调用ui.playground.run再调用ui.playground.run.readOutput观察模型是否真正调用了它。Few-shot 示例可直接运行的输入形状以下模板针对ui.playground.prompt.tools.write最佳实践是读与写放在同一个execute_browser_action脚本中以保证 revision 新鲜const snapshot await ui.playground.prompt.tools.read({ instanceId: 1 }); if (!snapshot.ok) return snapshot; return await ui.playground.prompt.tools.write({ instanceId: 1, expectedRevision: snapshot.output.revision, tools: [/* creates and updates, as in the examples below */], });创建一个全新工具一条无id的记录{ instanceId: 1, expectedRevision: prompt-tools-abc, tools: [ { name: get_weather, description: Look up the current weather for a city., parameters: { type: object, properties: { city: { type: string, description: City name, e.g. \San Francisco\. }, units: { type: string, enum: [c, f], description: Temperature units. } }, required: [city] } } ] }一次创建多个工具全部放进tools数组一次调用、一次 revision 校验优于逐个调用{ instanceId: 1, expectedRevision: prompt-tools-abc, tools: [ { name: get_weather, parameters: { type: object, properties: { city: { type: string } }, required: [city] } }, { name: get_forecast, parameters: { type: object, properties: { city: { type: string }, days: { type: integer } }, required: [city, days] } } ] }给已有工具增加必填参数传已有id与完整的新parametersschema补丁语义下name即使未变也必填{ instanceId: 1, expectedRevision: prompt-tools-abc, tools: [ { id: 3, name: get_weather, parameters: { type: object, properties: { city: { type: string }, units: { type: string, enum: [c, f] } }, required: [city, units] } } ] }同一批次创建与补丁混合有/无id的条目混用{ instanceId: 1, expectedRevision: prompt-tools-abc, tools: [ { name: get_time, parameters: { type: object, properties: { timezone: { type: string } }, required: [timezone] } }, { id: 3, name: get_weather, description: Look up the current weather for a city. Returns temperature, humidity, and conditions. } ] }用枚举实现结构化分类输出强制模型从 enum 标签中选一个并可选地给出解释{ instanceId: 1, expectedRevision: prompt-tools-abc, tools: [ { name: classify_sentiment, description: Classify the sentiment of the input as positive, negative, or neutral., parameters: { type: object, properties: { label: { type: string, enum: [positive, negative, neutral], description: The sentiment classification. }, explanation: { type: string, description: Short justification for the label. } }, required: [label] } } ] }删除工具并可选地在同一批次换入替代deleteToolIds按 id 删除可与tools组合实现原子性的删旧加新删除可针对raw厂商工具{ instanceId: 1, expectedRevision: prompt-tools-abc, deleteToolIds: [3], tools: [ { name: get_forecast, parameters: { type: object, properties: { city: { type: string } }, required: [city] } } ] }工具写入的注意事项禁止不读就写本轮未先调用ui.playground.prompt.tools.read就调用writeexpectedRevision会过期导致写入被拒绝。读与写放在同一个execute_browser_action脚本中可保持 revision 新鲜。raw工具不可写读快照中kind为raw的工具如 Provider 内置的web_search属于厂商透传vendor passthrough无法通过 PXI 编辑——应告知用户在 Playground 工具编辑器中编写。tools中出现raw条目会使整个批次被拒绝但deleteToolIds可以删除raw工具。强制工具选择会被重置删除提示词强制选择的工具tool_choice 指定函数是允许的工具选择会自动重置为 auto零个或多个结果会报告resetToolChoiceFrom。这会改变模型运行时选择工具的方式务必告知用户。不要编造工具 id条目中的id以及每个deleteToolIds的 id必须来自读快照创建时省略 id不能引用同一批次中刚创建的 id。不要连续多次write而不重新读每次成功的写入或删除都会改变 revision。把变更合并到单次调用中。五、execute_browser_action 脚本协议与最佳实践所有ui.*操作都运行在用户浏览器中的一个沙箱 worker 内其工具定义见 execute_browser_action.py。协议要点参数summary一句给用户的短句作为工具调用的预览先于script提供、scriptJS 脚本本体、write_description仅当脚本调用任何write类操作时必填是整个审批提示的全文。返回协议每次操作调用均异步返回UIResult成功为{ok: true, output?}失败为{ok: false, code?, error}。output是结构化数据直接取字段如result.output.instanceId绝不要对 output 做JSON.parse。按code分支而非错误文案STALE_REVISION→ 携带当前 revision 重试NOT_AVAILABLE→ 先安排导航或挂载步骤再重试INVALID_INPUT→ 对照目录签名修正输入UNKNOWN_OPERATION→ 查看 did-you-mean 建议。特性探测用in或Object.keys如prompt in ui.playground不要用typeof——属性访问总会返回可调用对象导致typeof ui.anything function对不存在的名字也为 true。审批是脚本级而非操作级脚本调用任何write操作都必须携带write_description用户手动审批时接受或拒绝整个脚本。一个脚本的多次写入只产生一次审批决策因此把相关操作批量进一个脚本一次execute_browser_action调用 一个模型轮次脚本内多一次await是免费的。错误恢复未知操作错误会附带近似的候选名操作在当前页面不可用时会给出路由提示可用ui.navigation.goTo({path, reason})导航过去再重试导航改变状态脚本需携带write_description。用户拒绝导航脚本时改为提供 markdown 链接不要重跑导航。一个完整示例——设置模型、运行 Playground、读取输出一次脚本完成其中设置模型与运行是状态变更脚本需带write_descriptionconst model await ui.playground.model.set({target: {type: builtin, provider: OPENAI, modelName: gpt-5}}); if (!model.ok) return model; const run await ui.playground.run({}); if (!run.ok) return run; log(run finished); return await ui.playground.run.readOutput({});六、进阶评估器选择与数据集评估器编排当数据集已加载时ui_contexts中有dataset条目在 Playground 内还可以编排评估器ui.evaluators.select选择要在实验中运行的现有数据集评估器传入完整的目标 id 集合整体替换当前选择ui.evaluators.readDefinition按 id 读取一个或少数评估器的完整主体源码、法官消息或内置配置用于对比、选择或编辑前ui.evaluators.openForEdit修改现有代码或 LLM 评估器配置之后用出现的草稿操作ui.evaluators.code.read/ui.evaluators.code.edit推进只有 code 与 LLM 评估器可被 Agent 编辑内置评估器isBuiltin为 true可选择和读取但暂不能通过 Agent 编辑若evaluators为空已加载数据集尚无评估器需先按创建评估器流程编写一个再选择或编辑。数据集评估器的编写遵循edit_permission分流bypass模式下 Agent 可自动驱动草稿通过ui.evaluators.code.test并用ui.evaluators.code.submit持久化manual模式下则在用户接受草稿后提供测试然后停在持久化之前由用户在表单中点击 Create。七、小结Phoenix Prompt Playground 的 Agent 操作体系可归纳为三条主线目标关键操作序列无数据集快速迭代prompt.read→prompt.edit/instance.add/instance.clone→variables.set→repetitions.set→run→run.readOutput→prompt.save数据集实验取证dataset.load→experiment.setRecording→repetitions.set→run→phoenix-gql读实验摘要校验job.status COMPLETED或runCount expectedRunCount函数工具编排prompt.tools.read→prompt.tools.write单批原子写带最新 revision→runrun.readOutput验证调用三条主线共享同一套纪律先读后写、保持 revision 新鲜、批量操作进单脚本、按code分支处理错误、未经用户明确要求不保存。掌握这些规则即可在 Phoenix Playground 中高效地完成从提示词草稿到数据驱动实验、再到工具增强的完整迭代闭环。赞分享可观测性AI 评测LLMOpsAI 应用人工智能【免费下载链接】phoenixAI Observability Evaluation项目地址https://gitcode.com/gh_mirrors/phoenix13/phoenix点击查看免费下载相关推荐Phoenix Prompt Playground 设计规范与实战从 LLM Span 回放到 Prompt 迭代实验Phoenix Prompt Playground 设计规范与实战从 LLM Span 回放到 Prompt 迭代实验 Phoenix Prompt Play可观测性AI 评测LLMOpsAI 应用人工智能arize-phoenix-client 实战指南用 Python 编程化管理 Phoenix 的 Prompt、数据集、追踪与实验arize phoenix client 实战指南用 Python 编程化管理 Phoenix 的 Prompt、数据集、追踪与实验 Phoenix Clie可观测性AI 评测LLMOpsAI 应用人工智能Phoenix数据集与实验管理AI应用迭代优化之道Phoenix数据集与实验管理AI应用迭代优化之道 Phoenix提供了强大的数据集版本控制和实验管理功能帮助开发者系统化地管理测试数据、追踪模型性能变化可观测性AI 评测LLMOpsAI 应用人工智能上一篇VisualCppRedist AIO一站式解决Windows DLL缺失问题的终极指南下一篇pdown百度网盘下载神器三步免登录极速下载完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考