news 2026/5/5 20:15:46

LLM分类模式驱动一

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LLM分类模式驱动一

今天给大家带来的文章是LLM分类模式驱动,希望能对学习LLM的同学们有所帮助。

文章目录

  • 1. 前言
  • 2. 模式驱动生成

1. 前言

随着这两年大语言模型的应用,各种语言模型已经在很多领域带来了许多颠覆性的成果,但是在融入各种程序环境时,大语言模型也遇到了一些阻碍。为了解决这些问题,行业内陆续出现了十几种不同的流行框架,通过各种不同的抽象交互方式来和语言模型进行交互。为了给大家提供一个清晰的框架图谱,大佬们提出了一个分类模型,从执行功能角度,确定出五种语言模型的抽象家族。今天我们着重看一下其中的模式驱动生成。详细内容可参考论文《A Guide to Large Language Model Abstractions》)。

2. 模式驱动生成

对于受控生成的一种更精细的抽象是基于模式驱动的生成(Schema-Driven Generation)。在这种方法中,语言模型(LM)和其所属的编程接口之间的边界受到预定义的模式或对象规范语言(通常为JSON)的约束。这与GuidanceLMQL不同,后者需要用户指定JSON的结构框架及其内部内容的限制才能生成JSON输出。与受控生成相比,基于模式的方法更容易与现有的编程逻辑集成。然而,对生成内容类型的控制粒度可能更有限。这些库被放置在Prompt Constraint Layer中,因为符合模式是限制LM输出的一种方式。

Outlines的其他库中,如MarvinInstructor,以及最近的LangChainLlamaindex中,这一步骤进一步抽象化。用户可以使用数据验证库Pydantic来指定数据结构作为特定LM的输出模式(模型级抽象)。在内部,这些库通过预定义的提示(Prebuilt Prompts)将模式编码为自然语言指令,要求LM以正确的可解析格式输出。然而,对于MarvinInstructor,它们还提供了利用底层LLM供应商提供的更高级功能的支持(例如OpenAI的函数调用功能,以强制可解析性)。这些库预计还将采用OpenAI的新JSON模式,以减少输出不可解析的可能性。

  • 实例代码一如下所示:
importinstructorfromopenaiimportOpenAIfrompydanticimportBaseModel# This enables response_model keyword# from client.chat.completions.createclient=instructor.patch(OpenAI())classUserDetail(BaseModel):name:strage:intuser=client.chat.completions.create(model="gpt-3.5-turbo",response_model=UserDetail,messages=[{"role":"user","content":"Extract Jason is 25 years old"}])assertisinstance(user,UserDetail)assertuser.name=="Jason"assertuser.age==25

例如,Instructor提供了OpenAI API的替代客户端,可以接受使用Pydantic指定的响应模型(示例2所示)。在其实现中,它支持三种查询LM的模式,即json、函数调用和工具使用,每种模式对应于OpenAI支持的等效API。为了引导LM进行解析过程,Instructor内部有一些提示来指导LM的模式和输出格式。

LangChain中,当偶尔发生验证错误时,支持更复杂的重试解析器,但输出不是通过OpenAI的函数调用API进行提示,而是更多地通过自然语言指令进行提示。

  • 实例代码二如下所示:
llm=OpenAI(temperature=0)classAction(BaseModel):action:str=Field(description="action to take")action_input:str=Field(description="input to the action")parser=PydanticOutputParser(pydantic_object=Action)# the parser provides natural language formatting instruction for use in LLM.# The process is centered around prompts.prompt=PromptTemplate(template="Answer the user query.\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions":parser.get_format_instructions()})prompt_value=prompt.format_prompt(query="who is leo di caprios gf?")model_response=model(prompt_value.to_string())# the parsing aspect and the querying aspect is detached in LangChainparsed_model=parser.parse(model_response)# if the parsing process results in an exception, users could use the retry parser that internally appends the parsing error and prompts the LM to retry it againretry_parser=RetryWithErrorOutputParser.from_llm(parser=parser,llm=llm)retry_parser.parse_with_prompt(model_response,prompt_value)

实例代码二详细地介绍了LangChain的解析和重试机制。这个例子突出展示了LangChain在字符串和提示操作方面的重点关注,并展现了他们提供的一些实用且灵活的工具。

除了输出数据模式之外,一些库还在LLM交互的上下文中添加了对功能模式(Function Level Abstraction)的支持,它们允许程序员使用自然语言来标注函数的架构签名,从而表达函数的核心目的。这个想法最早出现在2023年初的DSP项目中,它是DSPy框架的前身。在DSP中,用户可以指定函数的输入和输出类型(例如:“Question, Thoughts -> Answer”),这包括了对参数的人类易懂的描述和相关前缀。输入和输出类型的集合形成了一个DSP模板,可以用来生成一个可调用的 Python 函数。Marvin最近通过其“AI Function”进一步简化了这种模式,程序员可以注明输入输出类型及函数说明,这些信息将用于根据运行时的输入生成提示,并从大语言模型中提取答案。

  • 实例代码三如下所示:
@ai_fndefgenerate_recipe(ingredients:list[str])->list[str]:"""From a list of `ingredients`, generates a complete instruction set to cook a recipe. """generate_recipe(["lemon","chicken","olives","coucous"])generate_recipe.prompt("I need a recipe using Lemon Chicken Olives and Coucous")

实例代码三描述了Marvin的AI函数。在这个例子中,被标注的函数会在运行时被捕获,其 Python 类型签名、描述和输入都会被送入大语言模型来提取输出。类型提示在这里起到确保类型安全的校验作用。这种方法还允许以自然语言的方式调用函数。

DSPy中,开发人员可以类似地指定自然语言签名,以声明方式定义LLM需要解决的某个(子)任务,该任务由整体任务的简要描述以及输入和输出字段的描述引出。

  • 实例代码四如下所示:
classBasicQA(dspy.Signature):"""Answer questions with short factoid answers."""question=dspy.InputField()answer=dspy.OutputField(desc="often between 1 and 5 words")# Define the predictor.generate_answer=dspy.Predict(BasicQA)# Call the predictor on a particular input.pred=generate_answer(question=dev_example.question)# Or use the Short Handqa=dspy.Predict("question -> answer")qa(question="Where is Guaraní spoken?")

实例代码四展示了DSPy如何利用自然语言签名来创建遵循特定签名的由大语言模型驱动的函数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 12:44:09

手把手教你学Simulink--基础储能管理场景实例:基于Simulink的锂电池健康状态(SOH)在线评估仿真

目录 手把手教你学Simulink--基础储能管理场景实例:基于Simulink的锂电池健康状态(SOH)在线评估仿真 一、引言:为什么做SOH在线评估?——储能系统“寿命预警”的核心 挑战: 二、核心原理:SOH的“定义-模型-评估”逻辑 1. SOH定义与量化指标 (1)容量SOH(SOHC​)…

作者头像 李华
网站建设 2026/5/2 15:35:56

YOLO模型镜像提供Jupyter Notebook示例,GPU交互式开发

YOLO模型镜像提供Jupyter Notebook示例,GPU交互式开发 在智能安防摄像头实时识别行人、工业质检设备自动发现产品缺陷的今天,一个共同的技术底座正在悄然支撑这些应用:YOLO模型 容器化环境 交互式开发平台。这不仅是算法的进步,…

作者头像 李华
网站建设 2026/5/1 12:44:15

YOLO检测精度再提升!YOLOv10带来哪些革新与算力挑战?

YOLO检测精度再提升!YOLOv10带来哪些革新与算力挑战? 在智能制造工厂的质检流水线上,每分钟有上千个零件高速通过视觉检测工位。传统目标检测模型虽然能识别缺陷,但偶尔出现的“卡顿”却让剔除机制失灵——原因往往藏在那几毫秒波…

作者头像 李华
网站建设 2026/5/1 17:20:43

Java JRE的没落

在Java 9版本之后,Oracle 改变了 Java 的发行方式,移除了JRE(Java Runtime Environment)的独立发布。因此,Java 9(以及之后的版本)也没有单独的 JRE 了。而OpenJDK一般一、JDK和JRE对比JDK&…

作者头像 李华
网站建设 2026/5/2 19:59:06

YOLOv8-Scale-YOLOv8多尺度训练策略解析

YOLOv8-Scale:多尺度训练如何重塑目标检测的泛化能力 在工业质检线上,一台摄像头正高速扫描流过的电路板。有的缺陷藏在密密麻麻的焊点之间,仅占几个像素;而另一些大尺寸元件则横跨画面三分之一。如果模型只在固定分辨率下训练过&…

作者头像 李华
网站建设 2026/5/3 7:01:27

YOLO目标检测API支持结果水印嵌入,保护知识产权

YOLO目标检测API支持结果水印嵌入,保护知识产权 在AI视觉能力被广泛封装为服务的今天,一个看似不起眼却日益严峻的问题浮出水面:你如何证明这份由AI生成的检测报告,确实来自你的系统? 设想这样一个场景——某企业购买了…

作者头像 李华