目 录CONTENT

文章目录

超越思维链:在Amazon Bedrock上使用草稿链(Chain-of-Draft)

Administrator
2025-12-24 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/move-beyond-chain-of-thought-with-chain-of-draft-on-amazon-bedrock/

原文作者:Ahmed Raafat and Kiranpreet Chawla


随着组织扩展其生成式AI的实施,平衡质量成本延迟这一关键挑战变得越来越复杂。由于推理成本占据了大型语言模型(LLM)运营支出的70%到90%,并且冗长的提示策略会使代币用量增加3到5倍,组织正在积极寻求更高效的模型交互方法。传统的提示方法虽然有效,但通常会产生不必要的开销,影响成本效率和响应时间。

本文探讨了草稿链(Chain-of-Draft, CoD),这是一种在Zoom AI研究论文《草稿链:通过少写实现更快思考》中引入的创新提示技术,它彻底改变了模型处理推理任务的方式。虽然思维链(Chain-of-Thought, CoT)提示一直是增强模型推理的首选方法,但CoD提供了一个更高效的替代方案,它模仿了人类解决问题的模式——使用简洁、高信号的思考步骤,而不是冗长的解释。

我们使用Amazon BedrockAWS Lambda,展示了CoD的实际实现,该实现可以带来显著的效率提升:在保持与传统CoT方法相当的准确率的同时,代币使用量最多减少75%延迟减少超过78%。通过详细的示例、代码片段和性能指标,我们将引导您完成在AWS环境中部署CoD并衡量其对AI实施影响的过程。这种方法不仅优化了成本,还通过更快的响应时间增强了整体用户体验。

Diagram showing the interconnected relationship between Quality, Cost , and Latency , with "TRADEOFF" at the center and bidirectional arrows connecting all three elements.

理解思维链提示

思维链(CoT)提示是一种引导大型语言模型逐步解决问题,而不是直接跳到答案的技术。这种方法在处理复杂的任务(如逻辑谜题、数学问题和常识推理场景)时被证明特别有效。通过模仿人类解决问题的模式,CoT帮助模型将复杂问题分解为可管理的步骤,从而提高了准确性透明度

CoT提示示例:

问题:如果有5个苹果,你吃了2个,还剩多少个苹果?

CoT回答:从5个苹果开始。我吃了2个苹果。从5中减去2。5 – 2 = 3个苹果剩余。

然而,如上例所示,这种方法在生产环境中存在一些缺点。CoT响应的冗长特性会导致代币使用量增加成本上升。生成详细解释所需的处理时间延长会导致延迟增加,在某些情况下使其不太适合实时应用。此外,详细的输出会使下游处理和与其他系统的集成复杂化。

介绍草稿链提示

草稿链(CoD)是一种新颖的提示技术,旨在通过限制每个推理步骤中使用的词数来减少冗长性,只关注推进所需的基本计算或转换,同时显著减少代币使用量和推理延迟。CoD的灵感来源于人类如何通过简短的思维笔记而非冗长的解释来解决问题——鼓励LLM生成简洁、高信号的推理步骤。

CoD的关键创新在于其约束:每个推理步骤限制为五个词或更少。这种限制迫使模型关注必要的逻辑组成部分,同时最大限度地减少不必要的冗长。例如,在解决数学应用题时,CoD不是生成完整的句子来解释每一步,而是生成简洁的数值运算和关键的逻辑标记。

考虑这个例子:

问题:杰森有20个棒棒糖。他给了丹尼一些棒棒糖。现在杰森剩下12个棒棒糖。杰森给了丹尼多少棒棒糖?

CoT的回答可能包含几句话来解释推理过程,例如,“杰森有20个棒棒糖。他给了丹尼一些,现在还剩12个。所以他送出了8个。”

相比之下,CoD的回答将简单地说明“开始:20,结束:12,20 – 12 = 8。”

这种极简主义方法实现了相同的逻辑推理,同时使用的代币要少得多。

CoD为何有效

CoD背后的关键思想是,大多数推理链都包含高度的冗余。通过将步骤提炼成其语义核心,CoD帮助模型专注于任务的逻辑结构,而不是语言的流畅性。这带来了更短的输出导致的更低的推理延迟,以及更简洁的生成带来的更低的代币成本,也使得下游解析或自动化更加清晰。

这种极简主义是在不牺牲准确性的情况下实现的。事实上,根据最初的Zoom AI论文,CoD“在GSM8K上实现了91.4%的准确率(CoT为95.3%),同时将输出代币减少了高达92.1%,并在测试的几​​个模型中将延迟缩短了近一半。”

在底层,CoD技术使用自然语言提示指示模型“逐步思考”,同时明确限制每个推理步骤的长度:“每个思考步骤只保留最少草稿,最多5个词。”

研究人员发现,像GPT-4、Claude和Cohere Command R+这样的模型在这些约束下表现尤其出色,特别是在使用少样本示例来演示简洁推理模式时。

Flowchart showing Chain-of-Draft Prompting technique with three sequential steps leading to a final answer, highlighting efficiency benefits.

除了算术任务,CoD在常识推理任务中也显示出强大的性能。在最初的Zoom AI论文中,作者使用big-bench基准测试评估了CoD,特别关注日期理解和体育理解任务。实验中使用了与算术评估相同的系统提示,以保持一致性。结果显示,CoD不仅显著减少了代币生成和延迟,而且在某些情况下,其准确性甚至超过了CoT——尤其是在不需要冗长输出时。

一个值得注意的发现是,在一个关于体育理解任务的大型语言模型上:CoT产生了冗长、啰嗦的响应,平均输出代币为172.5个,而CoD将其减少到31.3个代币,减少了约82%。有趣的是,准确性略有提高,这表明在词数更少的情况下,CoD可能更有效。

以下是原始论文中跨两个LLM评估的快照:

模型 提示 准确率 代币 延迟
LLM-1 标准 72.60% 5.2 0.6s
思维链 90.20% 75.7 1.7s
草稿链 88.10% 30.2 1.3s
LLM-2 标准 84.30% 5.2 1.0s
思维链 87% 172.5 3.2s
草稿链 89.70% 31.3 1.4s

表 1. 日期理解评估结果。(草稿链:通过少写实现更快思考

这些结果进一步验证了CoD在现实推理场景中的价值,表明模型可以仅用更少、更智能的代币进行有效推理。对生产使用的启示很明确:更快的响应和更低的成本,而没有质量上的权衡

Infographic comparing Chain-of-Thought and Chain-of-Draft AI prompting methods, showing trade-offs between verbose outputs with slower inference versus streamlined outputs with faster processing on a balanced scale.

在下一节中,我们将展示如何使用Amazon Bedrock和AWS Lambda实现这种提示策略,以及在真实条件下,CoD与Foundation Models上的CoT相比有何不同。

在AWS上的实施与评估

为了评估CoD提示技术的效率,我们在Amazon Bedrock中运行了一项测试,并使用LLM解决“红、蓝、绿球”谜题。

谜题:你有三个盒子。每个盒子都装有三个球,但球可以是红色、蓝色或绿色。盒子 1 标记为“仅限红球”。盒子 2 标记为“仅限蓝球”。盒子 3 标记为“红球和蓝球”。所有标签都是不正确的。任务是,在只知道所有标签都错误的情况下,确定每个盒子里的内容。你只能从一个盒子中取出一个球并观察其颜色,然后你必须推断出所有三个盒子里的内容。

我们选择这个谜题是因为解决它需要一定数量的代币,因为问题需要分解成几个逻辑步骤,每个步骤都需要LLM处理和保留信息。LLM需要处理“if-then”语句并考虑导致逻辑推理的不同可能性。LLM还需要在整个推理过程中保持谜题的上下文,最后,LLM需要理解颜色、标签和球之间的符号和关系。

先决条件

要在Amazon Bedrock中测试和比较提示技术,请确认您具备以下先决条件:

  • 具有创建和执行Lambda函数的权限的AWS账户
  • 在AWS区域(例如us-east-1)启用了Amazon Bedrock访问,以及模型访问权限(例如,Model-1和Model-2);选择您喜欢的任何模型
  • 用于Lambda函数执行的AWS IAM角色
  • 调用Amazon Bedrock模型的权限(bedrock:Converse
  • Amazon CloudWatch中放置自定义指标的权限(cloudwatch:PutMetricData
  • (可选)用于日志记录的CloudWatch Logs权限
  • 必要的Python库(boto3),包含在Python 3.9或更高版本的AWS Lambda运行时环境中

使用Amazon Bedrock Converse API进行评估

我们首先创建一个Python Lambda函数,旨在通过Amazon Bedrock与模型交互以解决该谜题。此AWS Lambda函数使用Amazon Bedrock Converse API,它提供了一个统一、一致的接口来与各种基础模型交互。Converse API简化了将对话消息发送给模型并接收其回复的过程,支持多轮对话和高级功能,同时管理AWS身份验证和基础设施。Lambda函数初始化Amazon Bedrock Runtime和CloudWatch的客户端,并将静态谜题提示作为用户消息发送给Converse API,检索响应文本,并计算输入和输出的延迟和代币使用情况。这些指标发布到CloudWatch,并记录相关日志。最后,函数返回模型的答案以及输入/输出代币计数。错误会被记录并以正确的HTTP错误代码返回。
Architecture diagram showing AWS Lambda invoking Amazon Bedrock within an AWS Region.

Lambda函数

import json
import boto3
import time
import logging
from botocore.exceptions import ClientError logger = logging.getLogger()
logger.setLevel(logging.INFO)
bedrock = boto3.client('bedrock-runtime', region_name='us-east-1')
cloudwatch = boto3.client('cloudwatch')
MODEL_ID = "model1-id" # Replace with actual Model 1 ID
PROMPT = ( "You have three boxes. Each box contains three balls, but the balls can be red, blue, or green. " "Box 1 is labeled as 'Red Balls Only'. Box 2 is labeled 'Blue Balls Only'. " "Box 3 is labeled 'Red and Blue Balls Only'. The labels on the boxes are all incorrect. " "The Task: You must determine the contents of each box, knowing that all labels are incorrect. " "You can only take a single ball from one box and observe its color. " "Then you must deduce the contents of all three boxes. " "Think step by step to answer the question, but only keep a minimum draft for each thinking step, with 5 words at most. " "Return the answer at the end of the response after separator ###." )

def lambda_handler(event, context):
    conversation = [{"role": "user", "content": [{"text": PROMPT}]}]
    start_time = time.time()
    try:
        response = bedrock.converse(
            modelId=MODEL_ID,
            messages=conversation,
            inferenceConfig={
                "maxTokens": 2000,
                "temperature": 0.7
            }
        )
        response_text = response["output"]["message"]["content"][0]["text"]
        latency = time.time() - start_time
        input_tokens = len(PROMPT.split())
        output_tokens = len(response_text.split())
        cloudwatch.put_metric_data(
            Namespace='ChainOfDraft',
            MetricData=[
                {"MetricName": "Latency", "Value": latency, "Unit": "Seconds"},
                {"MetricName": "TokensUsed", "Value": input_tokens + output_tokens, "Unit": "Count"},
            ]
        )
        logger.info({
            "request_id": context.aws_request_id,
            "latency_seconds": round(latency, 2),
            "total_tokens": input_tokens + output_tokens
        })
        return {
            "statuscode": 200,
            "body": json.dumps({
                "response": response_text,
                "input_tokens": input_tokens,
                "output_tokens": output_tokens,
                "metrics": {
                    "latency_seconds": round(latency, 2),
                    "total_tokens": input_tokens + output_tokens,
                },
            }),
        }
    except ClientError as e:
        logger.error(f"AWS service error: {e}")
        return {"statuscode": 500, "body": json.dumps("Service error occurred")}
    except Exception as e:
        logger.error(f"Unexpected error: {e}")
        return {"statusCode": 500, "body": json.dumps(f"Internal error occurred: {e}")}

如果您使用的是Model 2,请将上述代码中的MODEL_ID更改为Model 2 ID。其余代码保持不变。

测试

以下是用于测试Lambda函数的三个提示词。更改Lambda函数中的PROMPT变量以测试不同的提示技术。

标准提示:

“你有三个盒子。每个盒子都装有三个球,但球可以是红色、蓝色或绿色。盒子 1 标记为“仅限红球”。盒子 2 标记为“仅限蓝球”。盒子 3 标记为“红球和蓝球”。所有标签都是不正确的。任务:在只知道所有标签都错误的情况下,确定每个盒子里的内容。你只能从一个盒子中取出一个球并观察其颜色。然后你必须推断出所有三个盒子里的内容。直接回答问题。不要返回任何前言解释或推理。”

思维链提示:

“你有三个盒子。每个盒子都装有三个球,但球可以是红色、蓝色或绿色。盒子 1 标记为“仅限红球”。盒子 2 标记为“仅限蓝球”。盒子 3 标记为“红球和蓝球”。所有标签都是不正确的。任务:在只知道所有标签都错误的情况下,确定每个盒子里的内容。你只能从一个盒子中取出一个球并观察其颜色。然后你必须推断出所有三个盒子里的内容。逐步思考以回答问题。在响应末尾使用分隔符返回答案。”

草稿链提示:

“你有三个盒子。每个盒子都装有三个球,但球可以是红色、蓝色或绿色。盒子 1 标记为“仅限红球”。盒子 2 标记为“仅限蓝球”。盒子 3 标记为“红球和蓝球”。所有标签都是不正确的。任务:在只知道所有标签都错误的情况下,确定每个盒子里的内容。你只能从一个盒子中取出一个球并观察其颜色。然后你必须推断出所有三个盒子里的内容。逐步思考以回答问题,但每个思考步骤只保留最少草稿,最多5个词。在响应末尾使用分隔符返回答案。”

结果

使用上述提示词在两个模型上测试Lambda函数后,结果如下:

模型 提示技术 输入代币 输出代币 总代币 代币削减
COD 对比 COT
延迟(秒) 延迟减少
COD 对比 COT
Model-1 标准提示 102 23 125 0.8
思维链 109 241 350 3.28
草稿链 123 93 216 ((350-216)/350) × 100 = 39% reduction 1.58 ((3.28-1.58)/3.28) × 100 = 52% reduction
Model-2 标准提示 102 17 119 0.6
思维链 109 492 601 3.81
草稿链 123 19 142 ((601-142)/601) × 100 = 76% reduction 0.79 ((3.81-0.79)/3.81) × 100 = 79% reduction

表 2:跨模型使用标准提示、CoD提示和CoT提示的测试结果

比较显示,草稿链(CoD)在两个模型上的效率都远高于思维链(CoT)。对于Model-1,CoD将总代币使用量从350减少到216(减少39%),延迟从3.28秒减少到1.58秒(减少52%)。对于Model-2,CoD的性能提升更为显著,将代币从601降低到142(减少76%),延迟从3.81秒降低到0.79秒(减少79%)。总而言之,CoD在速度和代币效率方面比CoT有了显著的改进,尤其是在Model-2上取得了强劲的结果。

何时应避免使用CoD

尽管CoD提示在效率和性能方面具有引人注目的优势,但它并非普遍适用。在某些情况下,传统的CoT甚至更冗长的推理方法可能更有效或更合适。根据我们的实验和原始研究的发现,以下是一些关键的考虑因素:

  • 零样本或仅提示用例:CoD与强大的少样本示例配对时效果最佳。在零样本场景中——即没有提供推理模式——模型通常难以独立采用这种极简起草风格。这可能导致准确性下降或推理步骤不完整。
  • 需要高可解释性的任务:对于法律或医疗文件审查、审计跟踪或受监管环境等用例,冗长的推理可能是必不可少的。在这种情况下,CoT更透明的分步解释提供了更好的可追溯性和信任度。
  • 小型语言模型:CoD在参数少于30亿的模型上表现不佳。这些模型缺乏有效执行CoD风格提示所需的指令遵循保真度和推理能力。在这些情况下,CoT可能会产生更好的结果。
  • 创意或开放式任务:受益于阐述的任务(如写作、构思或面向用户的对话)如果过于精简可能会失去价值。CoD最适合结构化推理、逻辑和确定性任务,在这些任务中,简洁性可以提高性能。

简而言之,当目标是以最小开销实现高效推理时,CoD表现出色——但仔细的提示设计模型选择任务契合度是成功的关键。

结论和关键要点

对于寻求优化其生成式AI实施的组织来说,CoD提示是一种高效的技术。通过鼓励语言模型以简洁、集中的步骤进行推理,CoD在性能和资源利用率方面实现了显着的改进。我们使用Amazon Bedrock和AWS Lambda的实现表明,与传统的CoT提示相比,在各种基础模型和复杂推理任务中保持了相当的准确性,同时在代币使用量和延迟方面带来了显着优势。随着AI的不断发展,CoD代表了迈向更高效、性能更强的语言模型的重要一步。它对于以速度和代币效率为关键的结构化推理任务特别有价值,但它并非一刀切的解决方案。我们鼓励实践者在自己的AI工作流程中探索CoD,利用其在降低成本、改善响应时间增强可扩展性方面的潜力。AI的未来在于更智能、更高效的推理方法,而CoD提示正处于这场变革的前沿。

要了解有关提示工程和CoD技术的更多信息,请参阅以下资源:


关于作者

Ahmed Raafat是AWS的一位高级经理,领导英国和爱尔兰的AI/ML专家团队,拥有超过20年的技术经验,通过AI和云技术帮助大公司实现转型。作为值得信赖的C级高管顾问和思想领袖,他指导组织制定AI战略和采用,帮助他们利用新兴技术实现创新和增长。

Kiranpreet Chawla是亚马逊云计算服务(AWS)的解决方案架构师,利用超过15年的多元技术经验推动云和AI转型。Kiranpreet的专长涵盖了从云现代化到AI/ML实施的各个方面,使她能够为各个行业的客户提供全面指导。




🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区