十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

【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系统奠定了基础。
返回列表