介绍 Artifacts
结构化输出生成向前迈了一步。
思维
逻辑思维是生成过程的关键部分。
标识符和搜索
搜索和检索文物是系统提示的关键部分。
模板语言结构
根据输入变量而变化的渲染模板
结论
对于克劳德来说,这是一个小小的神器,而对于人工智能来说,这是一次巨大的飞跃。
克劳德3.5系统
系统提示
结构化输出生成向前迈了一步。
这是对Claude 3.5 Sonnet 系统提示生成的分析。此分析的代码链接可在底部找到,并附有源代码。此分析的主要重点是引入工件的概念,以及它如何作为智能分类和检索系统的一部分发挥作用。
“工件是指用户可能修改或重复使用的大量、独立的内容。
工件是一种范式转变,因为它形式化了一个新概念。持久数据的概念。持久数据是我们访问高度策划和结构化的内容库的垫脚石。通过提供固定引用,我们解除了迭代的阻碍,并能够逐步改进和完善输出。这是控制冗长的 LLM 输出的短暂性的一步。
生成式人工智能在代码补全等功能性任务中存在的一个固有问题是,它们经常会因为简单的更改而重复整个文件。人们对“差异”功能的需求巨大,我们可以通过此功能输出前后差异,而不是重复相同的内容。
因此,工件具有双重用途;首先,它们充当我们需要输出的方式和位置的参考点。这就像范围的设置或参考点的定义。这将阻止 LLM 失去对原始问题的关注,同时保持输出中的结构和分类的持久性。
作为加分项,我们还提供了自动完成功能。通过定义“基本”代码和更改范围,我们现在已指导我们的 LLM 以有主见和精心策划的方式专注于特定任务或问题。这可以阻止缩放中的不稳定变化,还可以将整个正在进行的工作提供给提示。任何不小心用“其余代码在这里”擦除其代码的工程师都会感谢您。我们可以在此处看到范围的设置:
“独立、复杂的内容,无需对话背景就能理解
我们正在将焦点从不受控制的冗长输出转移到具体的工件上。值得注意的是,明确指示忽略对话的上下文。这是一种通过参考精选数据来确保质量的方法。它是一种质量控制机制,可控制输入的冗长和潜在的随机特性。
所有这些都与检索架构相契合。通过拥有一个深度精选工件库,我们现在可以指导我们的系统从受控数据集中进行检索。我们知道,所有大型人工智能提供商都在大力投资高质量的精选数据。工件是朝着用结构化方式构建详细输入和输出迈出的一步。
我们可以看到焦点从输入转移到提示中的系统定义的研究。以下是一些排除标准的示例:
“依赖当前对话上下文的内容才是有用的。
用户不太可能修改或迭代的内容。
来自用户的请求似乎是一次性的问题。
提示积极关注系统上下文和手头的任务。提示明确尝试过滤与特定输出无关的输入。因此,工件既在生成的文本中充当具体的参考点,又在幕后充当结构化数据。这使我们能够快速准确地检索和集中注意力。这对...非常有帮助。
逻辑思维是生成过程的关键部分。
及时的工程师们一直告诉我们,获得可靠成果的关键之一是强制 LLM 形成一个多步骤、结构化且合乎逻辑的思维过程。我们在提示中看到了对此的正式认可。
“1. 在调用工件之前,先在 <antthinking> 标签中想一句话,看看它如何根据好工件和坏工件的标准进行评估。考虑一下如果没有工件,内容是否也能正常工作。如果它值得工件,再用另一句话确定它是新工件还是对现有工件的更新(最常见)。对于更新,请重用先前的标识符。
在这里,我们强制我们的系统采用结构化的多步骤流程来分析任务和输出。再次,转向对冗长内容的强定义,并暗示用于工件的搜索和检索系统。
“<antthinking>创建一个用于计算阶乘的 Python 脚本符合优秀工件的标准。它是一段独立的代码,可以单独理解,并且很可能被重复使用或修改。这是一个新的对话,因此没有预先存在的工件。因此,我正在创建一个新的工件。</antthinking>
<antthinking>此请求是对现有阶乘计算器工件的直接修改。这不是新工件,而是为了使脚本更加健壮而进行的更新。我将重用阶乘计算器标识符以保持连续性并展示我们代码的演变。</antthinking>
在这里,我们可以看到生成定义输出的逻辑思维过程的实现。通过确保我们的算法经过相同的逻辑步骤,我们拥有了智能且可重复的生成过程的种子。
我们可以将这种逻辑映射到人的思维过程。首先,我们有一个合乎逻辑和理性的解决问题的方法。我们用硬件工件来补充这一点。LLM 数据集是大脑,但工件是使我们能够达到某种输出的技能和知识。
如果我们想象一下所有竞争模型,我们可以得出它们依赖于逻辑思维过程的复制。我们本质上是在创造一个机器人大脑来模仿人类的逻辑思维过程。我们正在构建大脑缺失的部分、知识、结构和检索过程。
这使得系统提示和指令成为极其宝贵的资产。对“逻辑思维”的理解和提炼是生成过程的关键部分。
我们可以在代码中看到这种结构化思维的一些基本实现......
搜索和检索文物是系统提示的关键部分。
“<antartifact identifier="factorial-script" type="application/vnd.ant.code" language="python" title="简单的 Python 阶乘脚本"> def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1)
那么 application/vnd.ant.code 是什么?Application 很简单,VND 是供应商,ANT 将是 Anthropic(Claude 的创建者)和代码;这是对其架构的洞察。我希望有某种分类法和结构化数据,列出人们试图用 LLM 实现的任务。
编码任务
演示文稿
文件
分析
还有很多...
例如,我们可以创建一些伪代码来尝试进行 PowerPoint 演示。
<antartifact identifier="powerpoint-presentation" type="application/vnd.ant.presentation" purpose="business" title="Simple powerpoint presentation"> Slide 1: Title slide Slide 2: Introduction Slide 3: Problem statement Slide 4: Solution </antartifact>
这几乎肯定与生产代码完全不同,但是一种有趣的思维范式。为了控制和构造冗长的输出,我们必须遇到逻辑和合理的过程来对输入和输出进行分类和标准化。
我怀疑这意味着当输入进来时,它们会运行单独的经过实战考验的算法,这些算法会运行实体提取和分类。然后,这些结构化数据会经过资产搜索和检索过程。对于文本,我们使用矢量数据库;对于其他定义的输出,我们现在引入了工件的概念。例如,React Code 任务可以像这样进行。
"INPUT: Create a react component for a metrics dashboard", "ENTITY_EXTRACTION: Coding, React, Metrics Dashboard", "ENTITY_SEARCH: Retrieve code artifacts for Metrics Dashboard where type = React", "SYSTEM_PROMPT: create_system_prompt(artifact_id='metrics-dashboard-component', type='application/vnd.ant.code', language='react')"
有很多事情正在进行,我们可以看到幕后需要付出艰苦的努力,才能为理论上无限的任务池挑选出高质量的示例和分类法。幕后将与其他 AI 分类算法进行迭代,以实现自动化。
但就我们所见,它的核心是一个基于专有模板语言的搜索和检索系统。
根据输入变量而转变的渲染模板。
多年前,我以 Drupal 开发人员的身份开始了自己的职业生涯。阅读提示时,我首先想到的词是 TWIG。Twig 是一种 HTML 模板语言,通常用于从 PHP 渲染 HTML 模板。Claude 几乎肯定会使用某种等效方法,根据结构化数据(可能在 LLM 之外提取)定制输入和上下文。
看起来 Claude Sonnet 3.5 使用了类似的东西,这很有道理。给定 LLM 的文本输入,我们需要系统地生成文本块。这些是组合在一起生成提示的动态标签。
<antartifact></antartifact>
<artifacts_info><artifacts_info/>
<示例> </示例>
<用户查询> </用户查询>
<示例文档字符串></示例文档字符串>
<assistant_response></assistant_response>
这将利用一种函数调用方法。每个标签都有特定的用途。然后,当我们指导模型为每个特定用途找到正确的类别和类型时,这将充当抽象。我想象提示构造是这样的。大量推测性伪代码即将到来……
function generate_reference() { context=artifact_type, artifact_id, task examples = search_examples_by_type('react', 'hooks', 'current_ids') return structured_data } function generate_system_instruction(structured_data) { <antartifact> <artifacts_info {{ attribute(version, '1.00') }}> <% artifact_introduction %> <% artifact_selection %> <% artifact_elimination %> <% artifact_usage %> <% artifact_instruction {{ type(code, 'data-code') }} {{ type(react, 'data-react') }} %> </ artifacts_info/> <example {{ for react_example in react_code_artifact }}>{react_example }</example> <example_docstring {{ for example_thought_process in curated_artifact_generation_example }}>{example_thought_process }<example_docstring /> <user_query>{sanitized_user_query}</user_query> <assistant_response>{sanitized_user_query}</assistant_response> </antartifact }
所以,我们把思维过程分解成块。实体提取与高级搜索和检索映射。逻辑思维过程的构建块。基础数据是输出质量的关键。
对于克劳德来说,这是一个小小的神器,而对于人工智能来说,这是一次巨大的飞跃。
工件对于结构化输出(例如代码生成)的作用就如同向量搜索对于 rag 的作用一样。它是结构化输出的搜索和检索系统。
我们在 Claude 3.5 中看到了结构化和理性思维过程的证据。我们一直认为这在生成式人工智能中很重要,但这是形式证明。
我可以想象大批开发人员和营销人员建立精心策划的文物库。这个库通过分类、搜索和检索任务来访问。但真正的进步是持久性的概念。
通过使用工件,我们拥有超越短暂存在的参考点。这些参考点可以得到改进和重复使用。我们已经有了思想和详细的输出。现在,我们拥有了记忆和专业知识……