当前位置: 首页 > news >正文

magentic LLM辅助重试机制:解决复杂输出模式遵循难题的终极方案

magentic LLM辅助重试机制:解决复杂输出模式遵循难题的终极方案

【免费下载链接】magenticSeamlessly integrate LLMs as Python functions项目地址: https://gitcode.com/gh_mirrors/ma/magentic

在当今AI驱动的应用开发中,大型语言模型(LLM)已成为构建智能系统的核心组件。然而,LLM输出的不可预测性常常给开发者带来挑战,特别是在需要严格遵循特定格式或结构的场景下。magentic作为一款能够无缝将LLM集成为Python函数的强大工具,提供了创新的LLM辅助重试机制,为解决复杂输出模式遵循难题提供了终极方案。

为什么需要LLM辅助重试机制?

LLM偶尔会返回无法解析为请求的输出类型或函数调用的结果。此外,您定义的Pydantic模型可能具有额外的验证,这些验证无法仅通过类型注解来表示。在这些情况下,LLM辅助重试机制可以自动将输出以及相关的错误消息重新提交给LLM,为其提供更多信息以满足输出模式要求的机会。

图1:magentic LLM辅助重试机制工作流程示意图

快速启用LLM辅助重试

要启用重试功能,只需在@prompt@chatprompt中将max_retries参数设置为非零值。这个简单的配置就能让您的AI应用具备自我修正能力,显著提高输出质量和可靠性。

以下是一个实际示例,展示了LLM辅助重试如何解决输出验证问题:

  1. LLM首先返回一个不是爱尔兰的国家
  2. Pydantic模型验证失败,错误信息为"Country must be Ireland"
  3. 原始输出以及包含错误的消息被重新提交给LLM
  4. LLM正确满足输出要求,返回"Ireland"
from typing import Annotated from magentic import prompt from pydantic import AfterValidator, BaseModel def assert_is_ireland(v: str) -> str: if v != "Ireland": raise ValueError("Country must be Ireland") return v class Country(BaseModel): name: Annotated[str, AfterValidator(assert_is_ireland)] capital: str @prompt( "Return a country", max_retries=3, ) def get_country() -> Country: ... get_country()

深入了解RetryChatModel实现

LLM辅助重试的核心实现位于RetryChatModel类中,该类封装了其他ChatModel,捕获异常并将其重新提交给LLM。这个设计模式允许您灵活地实现自己的重试处理逻辑。

图2:magentic LLM辅助重试机制架构图

RetryChatModel的关键代码实现如下:

class RetryChatModel(ChatModel): """Wraps another ChatModel to add LLM-assisted retries.""" def __init__( self, chat_model: ChatModel, *, max_retries: int, ): self._chat_model = chat_model self._max_retries = max_retries def complete( self, messages: Iterable[Message[Any]], functions: Iterable[Callable[..., Any]] | None = None, output_types: Iterable[type[OutputT]] | None = None, *, stop: list[str] | None = None, ) -> AssistantMessage[OutputT]: """Request an LLM message with retry logic.""" with logfire.span( "LLM-assisted retries enabled. Max {max_retries}", max_retries=self._max_retries, ): messages = list(messages) num_retry = 0 while True: try: message = self._chat_model.complete( messages=messages, functions=functions, output_types=output_types, stop=stop, ) except ToolSchemaParseError as e: if num_retry >= self._max_retries: raise messages += self._make_retry_messages(e) else: return message num_retry += 1 logfire.warn( "Retrying Chat Completion. Attempt {num_retry}", num_retry=num_retry, )

直接使用RetryChatModel

除了通过max_retries参数启用重试外,您还可以直接使用RetryChatModel,将其作为model参数传递给装饰器。这种方式提供了更大的灵活性,允许您自定义重试行为。

from magentic import OpenaiChatModel from magentic.chat_model.retry_chat_model import RetryChatModel @prompt( "Return a country", model=RetryChatModel(OpenaiChatModel("gpt-4o-mini"), max_retries=3), ) def get_country() -> Country: ...

LLM辅助重试的适用场景

LLM辅助重试旨在解决LLM生成无效输出的情况。对于LLM提供商的速率限制、互联网连接问题或其他无法通过重新提示LLM解决的问题,应使用其他方法处理,例如jd/tenacity或hynek/stamina等Python函数重试库。

总结

magentic的LLM辅助重试机制通过智能地捕获和处理LLM输出错误,为开发者提供了一种简单而强大的方式来提高AI应用的可靠性和准确性。无论是处理复杂的Pydantic模型验证,还是确保函数调用的正确格式,RetryChatModel都能显著减少手动干预,让您的AI应用更加健壮和用户友好。

通过简单的配置,您可以让magentic自动处理LLM输出问题,让您的开发工作更加高效,应用更加稳定。立即尝试magentic的LLM辅助重试机制,体验智能重试带来的开发便利!

要开始使用magentic,请克隆仓库:git clone https://gitcode.com/gh_mirrors/ma/magentic,并参考官方文档了解更多详细信息。

【免费下载链接】magenticSeamlessly integrate LLMs as Python functions项目地址: https://gitcode.com/gh_mirrors/ma/magentic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/653666/

相关文章:

  • 为什么92%的AI PoC项目在上线前因隐私问题被叫停?——生成式AI数据脱敏的4个致命盲区
  • 别再手动数周期了!用Verilog在Quartus II里实现一个可调‘时钟旋钮’(附完整代码)
  • 深入解析Android 14中的APK安装问题与解决方案
  • 如何用ComfyUI打造终极AI图像生成工作流:完整节点式可视化指南
  • YOLOv8 多进程启动报错 RuntimeError 深度解析:从 freeze_support 到 __main__ 的正确使用姿势
  • Fidget.nvim 通知系统完全手册:从基础使用到高级定制
  • 若依框架与微信小程序:构建企业级双用户体系与支付集成
  • TorchRec性能调优指南:7个关键技巧提升推荐系统效率
  • (AI总结版)Rich 配置经验总结:PyCharm 终端颜色显示操作指南
  • CSS如何实现响应式卡片流式布局_利用column-width实现瀑布流
  • 【专利视点】海外平台销售的产品,未经许可是否构成专利侵犯
  • OS运行原理
  • AIO USB Drive实战应用:5大场景解决90%电脑故障问题
  • overseer 生产环境部署最佳实践:安全、监控和故障处理
  • gruvbox-material性能优化指南:如何减少50%加载时间
  • 前端工程监控体系
  • 终极指南:如何用Groovy脚本实现动态数据源路由规则
  • Panel与HoloViz生态系统:数据科学工具的完美融合
  • 终极慕课助手:你的在线学习效率提升神器
  • Database Lab Engine监控与诊断:Netdata模块深入解析
  • Vue3集成百度地图:从零构建个性化轨迹可视化应用
  • 别再为World Creator到UE的地形导入发愁了!手把手教你搞定PNG高度图与Z轴缩放
  • Simulink信号源模块实战指南——从基础到高阶应用
  • JavaScript中显式创建包装对象的后果与性能损耗
  • 基于Python的文学创作社交论坛毕业设计
  • 眼科医生和研发工程师都该懂:SS-OCT如何成为眼底疾病诊断的“黄金标准”
  • 通俗易懂讲解分布式爬虫基础概念(附Scrapy-Redis实操教程)
  • 浏览器全屏模式隐藏技巧:用CSS伪类打造沉浸式Web游戏界面
  • 革命性Django管理界面美化工具Django Suit:10个理由让你告别原生后台
  • 如何快速配置Dynamic Datasource数据源校验:Spring Boot多数据源终极指南