淘宝接单做网站易语言做钓鱼网站
2026/4/18 16:16:50 网站建设 项目流程
淘宝接单做网站,易语言做钓鱼网站,我想投资谁有项目,中国教学网站作者#xff1a;来自 Elastic JD Armada 探索什么是结构化输出 #xff0c;以及如何在 Elasticsearch 中利用它们#xff0c;将 agents 基于最相关的上下文进行 grounding #xff0c;以支持数据契约 。 使用 Elasticsearch 亲自动手实践#xff1a;深入了解我们的示例 no…作者来自 Elastic JD Armada探索什么是结构化输出 以及如何在 Elasticsearch 中利用它们将 agents 基于最相关的上下文进行 grounding 以支持数据契约 。使用 Elasticsearch 亲自动手实践深入了解我们的示例 notebooks开始免费的 cloud 试用或者现在就在你的本地机器上试用 Elastic。我们正在快速从简单的 chatbots 过渡到可以在你的系统上执行真实且有影响操作的 agents。为了确保这些 agents 可靠我们不能再只依赖自由形式的文本了。生成可预测、机器可读输出的能力已经成为构建可靠 AI agents 的一个重要层。Structured outputs 也是 context engineering 中的关键一层context engineering 是一组策略用来确保 LLMs 基于与任务最相关的信息。结合在一起这些模式可以把 LLMs 从简单的对话工具转变为你可以安全集成到更大系统中的可靠组件。在这篇文章中我们将介绍什么是 structured outputs以及如何利用它们来提供符合关键 contracts 的可靠输出。如果你刚接触 context engineering可以查看我们这里的文章。Structured outputsStructured outputs 是符合预定义 schema 或数据结构的 LLM 响应而不是自由形式的文本。开发者不再接收不可预测的响应而是可以明确指定响应应该如何格式化。在下面的示例中如果你让一个 LLM 访问你在 Elasticsearch 中的 indices并要求它 “分析这个 Elasticsearch index”它很可能会返回一段叙述性的解释而且每次你用相同的 prompt 询问结果都会变化。使用 structured outputs你可以请求一个包含特定字段的响应比如 indexName、documentCount、healthStatus 等每个字段都有定义好的类型和校验规则。右侧的结构化格式可以立即 针对 一个 schema 进行 验证 而 不需要额外添加解析文本的步骤。主要的模型提供商正在迅速注意到结构化输出变得多么重要Google、OpenAI 和 Anthropic 都已经在各自的 API 中发布了对结构化输出的支持。OpenAI 更进一步发布了经过专门训练的新模型能够更好地理解并遵循复杂的 schema。下面是 OpenAI 对其模型在遵循复杂 JSON schema 方面表现的评估。https://openai.com/index/introducing-structured-outputs-in-the-api/这如何影响多智能体系统想象一个场景一组智能体在彼此之间传递非结构化的自由文本数据。每个智能体都需要自定义解析逻辑来理解其他智能体的响应这不仅会增加 token 使用量而且在实际中几乎肯定会出问题。再加上 LLM 的输出是概率性的因此不可预测。我们如何能信任这种系统去对我们的系统执行真实、有影响的操作结构化输出在智能体之间定义了一个契约用可靠、可预测的行为取代了歧义。AI 智能体与 MCP 中标准化的重要性OpenAPI 通过为开发者提供一种共享且可预测的方式来描述端点、参数和响应彻底改变了 REST API 开发。结构化输出把同样的理念带到了 AI 智能体领域通过提供契约来标准化智能体与系统之间的数据交换方式。这些契约确保了下游系统可以可靠地解析响应当一个智能体需要执行诸如更新数据库、调用 API 或触发工作流之类的操作时接收系统必须能够信任数据的结构和完整性。类型安全得以保持结构化输出支持编译期或运行时校验在错误扩散到整个系统并演变成更大问题之前就将其捕获。集成是可预测的有了明确的 schema把智能体集成到现有基础设施中可以遵循开发者在传统 API 开发中已经熟悉的模式。多智能体系统可以彼此理解当多个智能体需要协作时结构化输出提供了一种通用语言来交换信息。模型上下文协议 MCP 在此基础上进一步标准化了智能体在模型、工具和应用之间交换上下文的方式。当智能体通过 MCP 通信时结构化输出确保被共享的上下文在不同系统之间保持其结构。MCP 负责上下文的传输和生命周期而结构化输出定义了上下文中数据的形状和约束。它们结合在一起使得可组合的智能体可以被复用或替换模型、工具和应用之间有清晰的契约更可靠的自动化尤其是在需要智能体触发现实世界操作时可扩展的多智能体架构其他新兴协议例如 agent-to-agent ( A2A ) 协议也同样强调 schema 和契约以实现智能体之间直接、可靠的通信。MCP 以及像 A2A 这样的协议加上结构化输出给 AI 系统带来了当年 OpenAPI 之于微服务的价值 —— 一个共享的契约把临时拼凑的集成转变为可靠的系统。创建 schema 的技术现在我们如何真正实现 结构化输出 呢幸运的是像 Python 和 JavaScript 这样的主流生态系统已经有了成熟的 schema 和校验库可以让实现 结构化输出 变得更简单。你今天就可以使用这些工具来控制 LLM 返回的数据结构在运行时进行校验或者在模型产生幻觉时直接拒绝结果。在这一节中我们会看看开发者最常用的一些工具以及它们在底层是如何工作的。Zod 和 JavaScript 生态在 JavaScript 和 TypeScript 领域Zod 已经成为 schema 定义和校验的首选库因为它高效、易用并且能很好地集成到像 Vercel 的 AI SDK 和 Mastra 这样的 AI 编排框架中。为了直观展示这一点我们来看我同事 Carly 的示例。Carly 使用 Zod 搭配 AI SDK 创建了一个 schema强制 LLM 以经过校验、类型安全的格式返回行程数据。下面的 schema 做了 3 件事确保 LLM 返回的是合法的 JSON。确保数据具有正确的类型、约束和嵌套结构。生成可以直接用于应用的数据不需要额外处理。import { generateObject } from ai; import { z } from zod; const { object } await generateObject({ model: openai/gpt-4.1, schemaName: Travel Itinerary, schemaDescription: Sample travel itinerary for a trip, schema: z.object({ title: z.string(), location: z.string(), hotel: z.object({name: z.string(), roomType: z.string(), amount: z.number(), checkin: z.iso.date(), checkout: z.iso.date()}), flights: z.array(z.object({carrier: z.string(), flightNo: z.string().max(8), origin: z.string(), destination: z.string(), date: z.iso.datetime()})), excursions: z.array(z.object({ name: z.string(), amount: z.number(), date: z.iso.datetime()})) }), prompt: Generate a travel itinerary based on the specified location, });让我们更仔细地看看这个 schema 中的重要部分。行程信息schema: z.object({ title: z.string(), location: z.string(),上面的这些字段是简单的字符串但我们可以得出的结论是LLM 不能随意编造结构。字段 title 和 location 必须包含而且它们必须是字符串否则响应会被拒绝。酒店详情hotel: z.object({ name: z.string(), roomType: z.string(), amount: z.number(), checkin: z.iso,date(), checkout: z.iso.date() }),请注意amount 被定义为 number 类型dates 使用 ISO 格式这意味着输出可以直接用于计算、排序或存储无需额外解析。Flight informationflights: z.array(z.object({ carrier: z.string(), flightNo: z.string().max(8), origin: z.string(), destination: z.string(), date: z.iso.datetime() })),Flights 是一个对象数组因为行程通常包含多个航段。我们将 flightNo 限制为 8 个字符并使用 datetime() 而不是 date() 来包含起飞时间。当我们运行时模型应该生成一个看起来像这样的 JSON 对象{ title: Desert Adventure, location: Palm Springs, California, hotel: { name: The Madison, roomType: Suite, amount: 250, checkin: 2025-12-15, checkout: 2025-12-20 }, flights: [ { carrier: SouthWest Airlines, flightNo: AF123, origin: SFO, destination: PSP, date: 2025-12-15T18:00:00Z } ], excursions: [ { name: ATV Desert Tour, amount: 50, date: 2025-12-16T10:00:00Z } ] }如果模型输出无效的 JSON、违反指定约束或未包含必需字段请求会立即失败而不是默默地推送错误数据。Pydantic 和 Python 生态系统对于 Python 开发者Pydantic 在作用上类似于 JavaScript/TypeScript 中的 Zod为你提供运行时验证和强类型结构化输出。我们使用同样的旅行行程示例不过这次使用 Pydantic 模型和 LangChain 对结构化输出的支持。from datetime import date, datetime from decimal import Decimal from typing import List from pydantic import BaseModel, Field, ConfigDict, condecimal, constr from langchain_openai import ChatOpenAI class Hotel(BaseModel): model_config ConfigDict(populate_by_nameTrue) name: str room_type: str Field(..., aliasroomType) amount: condecimal(max_digits10, decimal_places2, ge0) checkin: date checkout: date class Flight(BaseModel): model_config ConfigDict(populate_by_nameTrue) carrier: str flight_no: constr(max_length8) Field(..., aliasflightNo) origin: str destination: str date: datetime class Excursion(BaseModel): model_config ConfigDict(populate_by_nameTrue) name: str amount: condecimal(max_digits10, decimal_places2, ge0) date: datetime class TravelItinerary(BaseModel): model_config ConfigDict(populate_by_nameTrue) title: str location: str hotel: Hotel flights: List[Flight] excursions: List[Excursion] llm ChatOpenAI(modelgpt-4.1, temperature0) structured_llm llm.with_structured_output(TravelItinerary) itinerary: TravelItinerary structured_llm.invoke( Generate a travel itinerary based on the specified location. )这种方法和 Zod 示例非常相似你只需定义一次 schema然后依赖框架在运行时为你处理验证。主要区别在于 Pydantic 会返回实际的 Python 对象而不是纯粹的已验证 JSON。你得到的是一个带有嵌套模型和正确类型字段的 TravelItinerary 实例更适合 Python 基于的 agent 流水线。当我们运行时模型生成的结构化数据会映射到 Pydantic 模型上我们应该得到类似这样的对象{ title: Palm Springs Getaway, location: Palm Springs, California, hotel: { name: The Madison, roomType: Suite, amount: 250.00, checkin: 2025-12-15, checkout: 2025-12-20 }, flights: [ { carrier: SouthWest Airlines, flightNo: SW123, origin: SFO, destination: PSP, date: 2025-12-15T18:00:00Z } ], excursions: [ { name: ATV Desert Tour, amount: 50.00, date: 2025-12-16T10:00:00Z } ] }这个 JSON 应该与我们使用 ZOD 生成的完全相同。在底层这个 JSON 会被自动转换为带有嵌套 Hotel、Flight 和 Excursion 实例的 TravelItinerary 对象。同样如果模型输出无效数据、违反约束或未包含必需字段验证会立即失败。底层原理JSON schema在 API 层面所有这些方法本质上都转换为 JSON schema。像 Zod 和 Pydantic 这样的库让定义这些 schema 更直观、对开发者友好。直接使用原生 JSON schema 在需要跨团队或服务共享语言无关的合同时仍然有用但代价是你会失去原生类型、可组合性以及这些库提供的大部分开发体验。将 Elasticsearch 与结构化输出结合控制 LLM 输出只是战斗的一半。接下来我们需要知道如何让这些输出在实际系统中有用。Elasticsearch 在这里非常合适因为它设计上同样适用于结构化和非结构化数据。这反映了现代 agent 架构非结构化数据提供丰富的上下文以支持推理和检索结构化输出作为应用可以依赖的契约。Elasticsearch 在这个循环中起核心作用。下面是 Elasticsearch 如何适配此方法的示例非结构化输入用户查询、文档、聊天记录、日志或工具追踪等被摄取到 Elasticsearch 索引中。为了捕获精确文本匹配和语义含义我们在索引这些数据时将使用文本字段和向量嵌入的混合。Elasticsearch 作为上下文引擎当 AI agent 需要相关上下文时它可以使用以下不同类型的搜索查询 Elasticsearch语义/向量搜索按词的潜在含义搜索。关键字/文本搜索用于精确匹配和过滤。地理空间搜索按位置搜索。混合搜索使用上述多种方式混合搜索。LLM 推理检索到的上下文被传回 LLM使其响应基于最相关的数据而不是仅依赖训练数据。结构化输出生成模型受我们使用 Zod 或 Pydantic 创建的 schema 限制生成已验证的 JSON 对象而不是自由文本。结构化索引将已验证的输出使用显式映射索引回 Elasticsearch使查询、聚合和分析更加容易。重用与自动化现在数据已添加结构化就可以轻松查询、过滤、聚合或用作下游系统和工作流的输入。这个循环使 agents 能将 Elasticsearch 同时用作检索层和记忆存储从而实现基于上下文的推理、自动化和长期学习。限制Marius Schroder 的结构化提示文章提到了一些结构化提示的限制这些也适用于结构化输出。他提到schema 可以保证格式但不能保证正确性模型仍可能输出 “垃圾” 数据即 JSON 结构有效但内容错误。例如行程 schema 可能要求有效的 ISO 日期、数值类型的价格以及不超过 8 个字符的航班号。模型仍可能返回 2 月 30 日的航班不可能的日期或者给五星级酒店标 10 美元。在这种情况下结构有效但事实错误说明 schema 验证的是数据形状而非真实性。复杂或深度嵌套的 schema 仍可能失败如果输出足够大仍可能遇到解析失败或 token 限制模型可能截断不同部分。不适合创意场景在这种情况下自由文本可能更好尤其是当你不想过度限制 LLM 在创意任务中的发挥时。结论本文深入探讨了在多 agent 系统中提供结构化输出的重要性、开发者常用工具以及 Elasticsearch 如何自然扩展。想了解更多请查看以下资源。资源What is context engineering? | Carly RichmondLangChain: Structured outputA Hands-On Guide to Anthropic’s New Structured Output Capabilities | Thomas ReedOpenAI: Introducing structured outputs in the APIOpenAI: Structured outputsStructured Prompting in real projects — checklist best practices | Marius SchroderImproving Structured Outputs in the Gemini API原文https://www.elastic.co/search-labs/blog/structured-outputs-elasticsearch-guide

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询