【Agent】2. 具有结构化输出的代理

发布时间:2026/10/18 7:07:05
【Agent】2. 具有结构化输出的代理 当您运行代理或多代理框架时您可能希望它以特定格式输出结果。在本案例中我们将看到一个如何将此功能应用于FunctionAgent的简单示例1. 案例目标本案例的主要目标是演示如何创建一个能够以预定义结构化格式输出结果的代理。具体来说我们将定义一个结构化输出格式使用Pydantic模型创建一个简单的计算器代理能够执行加法和乘法运算配置代理以结构化格式返回计算结果展示如何提取和使用结构化输出2. 技术栈与核心依赖LlamaIndex- 用于构建代理和处理结构化输出OpenAI API- 提供语言模型Pydantic- 用于定义和验证数据结构FunctionAgent- 用于构建可执行工具调用的代理核心依赖包! pip install llama-index3. 环境配置首先需要设置OpenAI API密钥from getpass import getpass import os os.environ[OPENAI_API_KEY] getpass()4. 案例实现4.1 定义结构化输出格式我们使用Pydantic的BaseModel来定义一个结构化输出格式包含操作类型和结果两个字段from pydantic import BaseModel, Field class MathResult(BaseModel): operation: str Field(descriptionThe operation that has been performed) result: int Field(descriptionResult of the operation)4.2 创建计算器代理接下来我们创建一个简单的计算器代理它能够执行加法和乘法运算from llama_index.llms.openai import OpenAI from llama_index.core.agent.workflow import FunctionAgent llm OpenAI(modelgpt-4.1) def add(x: int, y: int): Add two numbers return x y def multiply(x: int, y: int): Multiply two numbers return x * y agent FunctionAgent( llmllm, output_clsMathResult, tools[add, multiply], system_promptYou are a calculator agent that can add or multiply two numbers by calling tools, namecalculator, )关键点在于我们通过output_clsMathResult参数指定了代理的输出格式这将使代理以我们定义的MathResult结构返回结果。4.3 运行代理并获取结构化输出现在我们可以运行代理并获取结构化输出response await agent.run(What is the result of 10 multiplied by 4?)获取结构化输出的两种方式# 以普通字典形式打印结构化输出 print(response.structured_response) # 以Pydantic模型形式打印结构化输出 print(response.get_pydantic_model(MathResult))5. 案例效果5.1 代理执行当我们询问10乘以4的结果是什么时代理将理解问题是一个乘法运算调用multiply工具传入参数10和4获取工具返回的结果40按照MathResult格式组织输出包含操作类型multiply和结果405.2 结构化输出代理的输出将以两种形式提供字典形式{operation: multiply, result: 40}Pydantic模型形式MathResult(operationmultiply, result40)这种结构化输出使得后续处理更加方便可以直接访问特定字段如response.structured_response[result]获取计算结果。6. 案例实现思路6.1 结构化输出机制本案例的核心是LlamaIndex提供的结构化输出机制。通过指定output_cls参数代理被约束以预定义的格式返回结果。这种机制背后的工作原理是代理在执行工具调用后获取原始结果LLM被提示将结果组织成指定的结构化格式结果被解析为指定的Pydantic模型最终响应包含原始文本和结构化数据6.2 工具定义与调用案例中的工具add和multiply函数遵循简单的函数定义模式具有类型注解和文档字符串。这些注解和文档不仅帮助开发者理解工具功能也被LLM用来理解如何正确调用工具。6.3 代理配置代理的配置包括几个关键部分LLM模型指定用于处理的语言模型输出类定义结构化输出格式工具集代理可调用的函数列表系统提示指导代理如何行为的指令7. 扩展建议7.1 更复杂的结构化输出定义嵌套的Pydantic模型处理更复杂的数据结构添加可选字段和默认值提高输出格式的灵活性使用Pydantic的验证器确保数据质量和一致性7.2 多种输出格式实现根据查询类型动态选择不同输出格式的机制添加输出格式选择工具让用户指定首选输出格式支持多种序列化格式JSON、XML、YAML等7.3 错误处理与验证添加输出验证机制确保结构化数据符合预期实现错误恢复策略当输出不符合格式时提供备选方案添加详细的错误信息帮助调试输出格式问题7.4 性能优化缓存常用的结构化输出模板减少重复处理实现批量处理同时处理多个查询并返回结构化结果优化模型提示减少结构化输出所需的令牌数量8. 总结本案例展示了如何创建一个能够以结构化格式输出结果的代理。这种方法的核心优势在于一致性输出格式始终符合预定义的结构便于后续处理可靠性结构化输出减少了解析错误的可能性集成性结构化数据更容易与其他系统集成可扩展性可以轻松扩展输出格式以适应更复杂的需求结构化输出是构建生产级AI应用的关键技术之一。它使得AI系统的输出更加可预测、可处理特别是在需要将AI输出与其他系统组件集成的场景中。通过本案例的方法开发者可以创建各种专门代理如数据分析代理、报告生成代理、API调用代理等每个代理都能以最适合其任务的格式输出结果。这种能力为构建更复杂、更可靠的AI系统奠定了基础。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询