2026/1/2 6:52:27
网站建设
项目流程
做游戏视频网站用什么程序好,做网站 聊城,建筑装饰公司做网站的作用,阿里云服务器可以用来干什么今天给大家带来的文章是LLM分类模式驱动#xff0c;希望能对学习LLM的同学们有所帮助。 文章目录1. 前言2. 模式驱动生成1. 前言 随着这两年大语言模型的应用#xff0c;各种语言模型已经在很多领域带来了许多颠覆性的成果#xff0c;但是在融入各种程序环境时#xff0c;大…今天给大家带来的文章是LLM分类模式驱动希望能对学习LLM的同学们有所帮助。文章目录1. 前言2. 模式驱动生成1. 前言随着这两年大语言模型的应用各种语言模型已经在很多领域带来了许多颠覆性的成果但是在融入各种程序环境时大语言模型也遇到了一些阻碍。为了解决这些问题行业内陆续出现了十几种不同的流行框架通过各种不同的抽象交互方式来和语言模型进行交互。为了给大家提供一个清晰的框架图谱大佬们提出了一个分类模型从执行功能角度确定出五种语言模型的抽象家族。今天我们着重看一下其中的模式驱动生成。详细内容可参考论文《A Guide to Large Language Model Abstractions》)。2. 模式驱动生成对于受控生成的一种更精细的抽象是基于模式驱动的生成Schema-Driven Generation。在这种方法中语言模型LM和其所属的编程接口之间的边界受到预定义的模式或对象规范语言通常为JSON的约束。这与Guidance和LMQL不同后者需要用户指定JSON的结构框架及其内部内容的限制才能生成JSON输出。与受控生成相比基于模式的方法更容易与现有的编程逻辑集成。然而对生成内容类型的控制粒度可能更有限。这些库被放置在Prompt Constraint Layer中因为符合模式是限制LM输出的一种方式。在Outlines的其他库中如Marvin和Instructor以及最近的LangChain和Llamaindex中这一步骤进一步抽象化。用户可以使用数据验证库Pydantic来指定数据结构作为特定LM的输出模式模型级抽象。在内部这些库通过预定义的提示Prebuilt Prompts将模式编码为自然语言指令要求LM以正确的可解析格式输出。然而对于Marvin和Instructor它们还提供了利用底层LLM供应商提供的更高级功能的支持例如OpenAI的函数调用功能以强制可解析性。这些库预计还将采用OpenAI的新JSON模式以减少输出不可解析的可能性。实例代码一如下所示importinstructorfromopenaiimportOpenAIfrompydanticimportBaseModel# This enables response_model keyword# from client.chat.completions.createclientinstructor.patch(OpenAI())classUserDetail(BaseModel):name:strage:intuserclient.chat.completions.create(modelgpt-3.5-turbo,response_modelUserDetail,messages[{role:user,content:Extract Jason is 25 years old}])assertisinstance(user,UserDetail)assertuser.nameJasonassertuser.age25例如Instructor提供了OpenAI API的替代客户端可以接受使用Pydantic指定的响应模型示例2所示。在其实现中它支持三种查询LM的模式即json、函数调用和工具使用每种模式对应于OpenAI支持的等效API。为了引导LM进行解析过程Instructor内部有一些提示来指导LM的模式和输出格式。在LangChain中当偶尔发生验证错误时支持更复杂的重试解析器但输出不是通过OpenAI的函数调用API进行提示而是更多地通过自然语言指令进行提示。实例代码二如下所示llmOpenAI(temperature0)classAction(BaseModel):action:strField(descriptionaction to take)action_input:strField(descriptioninput to the action)parserPydanticOutputParser(pydantic_objectAction)# the parser provides natural language formatting instruction for use in LLM.# The process is centered around prompts.promptPromptTemplate(templateAnswer the user query.\n{format_instructions}\n{query}\n,input_variables[query],partial_variables{format_instructions:parser.get_format_instructions()})prompt_valueprompt.format_prompt(querywho is leo di caprios gf?)model_responsemodel(prompt_value.to_string())# the parsing aspect and the querying aspect is detached in LangChainparsed_modelparser.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_parserRetryWithErrorOutputParser.from_llm(parserparser,llmllm)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.questiondspy.InputField()answerdspy.OutputField(descoften between 1 and 5 words)# Define the predictor.generate_answerdspy.Predict(BasicQA)# Call the predictor on a particular input.predgenerate_answer(questiondev_example.question)# Or use the Short Handqadspy.Predict(question - answer)qa(questionWhere is Guaraní spoken?)实例代码四展示了DSPy如何利用自然语言签名来创建遵循特定签名的由大语言模型驱动的函数。