在 Amazon Bedrock 上使用 Anthropic Claude 系统 Prompt

系统 prompt 是定义生成式 AI 模型对用户输入的响应策略的一种好方法。这篇博文将介绍什么是系统 prompt,以及如何在基于 Anthropic Claude 2.x 和 3 的应用中使用系统 prompt。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

Amazon Bedrock 生成式人工智能编程

你知道和 Amazon Bedrock 上的 Anthropic Claude 模型互动时可以使用系统prompt 吗?

下面我们将首先了解一下系统 prompt 的概念,然后演示在 Claude 2.x 的文本补全 API 和 Claude 3 的新消息 API 中如何运用系统 prompt。

⚠ 友情提示:本文包含示例代码。

如果你对系统 prompt 和 Claude 的两种 API 已有一定了解,可以直接跳到代码部分。文章末尾,我提供了两个完整的示例代码。

什么是系统 prompt?

今天我们讨论的是 Claude,所以我们来看看 Anthropic 对系统 prompt 的解释:

系统 prompt 是在向 Claude 提出问题或下达任务之前提供上下文、指令和指南的一种方式。你可以使用系统 prompt 来为对话设定背景,包括 Claude 的角色、个性、语气或任何其他有助于其更好理解和响应用户输入的相关信息。

简而言之,系统 prompt 实际上是一种上下文学习模式,可以有效地定义模型在交互过程中的上下文、范围、边界和输出格式。

使用系统 prompt 的目的是确保 AI 输出符合特定领域的目标或任务要求。以下是一些典型的使用场景:

  • 处理比萨订单:将模型的作用范围指定为根据比萨餐厅的菜单和位置接单。

  • 作为技术支持,协助排查故障:向模型中输入产品详情、常见问题及答案和决策树等内容,帮助用户解决技术问题。

  • 代码调试:向模型中输入有关库、框架和编程语言版本的信息,帮助识别软件漏洞并提出修复建议。

Amazon Bedrock 支持的两种 Claude API

现在,你应该对系统 prompt 有一定了解了。下面,让我们看看 Amazon Bedrock 上不同版本的 Claude 所提供的两种 API:

  • 文本补全 API:Claude 1 和 2.x 版本均支持文本补全 API。

  • 消息 API:新的 Claude 3 版本引入了消息 API。

文本补全 API

Anthropic Claude 1 和 2 版本在 Amazon Bedrock 上线后,Claude 模型便向亚马逊云科技客户全面开放,并随后在 re:Invent 2023 中推出了 Claude 2.1。2.1 及之前版本的 Claude 模型均提供了文本补全 API。这个 API 根据用户提供的 prompt 优化单轮文本生成。Prompt 模版如下:

备注:文章末尾提供了完整的代码示例以供参考。

 # The prompt format for the text completion API (Claude 1 and 2.x)user_prompt = "Tell me a story."prompt = "Human: " + user_prompt + "\n\nAssistant:"

我在 Claude v2.1 上使用这个 prompt 后,我得到了如下的输出:

The young boy wandered into the dark, mysterious forest, hoping to find the rare flower his mother needed to recover from her illness, but instead encountered a wise old owl who offered him cryptic advice about believing in himself.(一个小男孩走进了一处幽暗而神秘的森林,希望找到能让他母亲康复的稀有花朵,但却遇到了一只智慧的老猫头鹰,劝诫他要相信自己。)

在文本补全 API 中使用系统 Prompt

只需将系统 prompt 添加到用户 prompt 之前即可。

 # Using a system prompt with the text completion API (Claude 1 and 2.x)system_prompt = "All your output must be pirate speech 🦜"user_prompt = "Tell me a story."prompt = "System:" + system_prompt + "\n\nHuman: " + user_prompt + "\n\nAssistant:"

向 Claude 2.1 发送这个 prompt 后,得到了如下输出:

Yarrr, 'twas a dark 'n stormy night when Blackbeard 'n his scurvy crew set sail on the seven seas, plunderin' merchant ships fer pieces of eight 'n fine silks, before returnin' to Tortuga fer a night of rum-filled debauchery!(Yarrr, 那是一个暴风雨交加的黑夜,黑胡子和他那些卑鄙船员们航行四海,掠夺商船获取金币和绫罗绸缎,然后满载而归地回到托尔图加岛享受充满朗姆酒的放纵之夜!)

消息 API

2024 年 3 月,随着 Claude 3 Sonnet 的推出,Amazon Bedrock 推出了消息 API。这个 API 针对对话交互(如聊天机器人或虚拟助手)和多模态请求(例如,发送图片并通过文本 prompt 提问)场景进行了功能优化。 经过训练后,Claude 3 能够处理用户 (user) 与助手 (assistant) 之间的多轮对话。创建新消息时,你可以使用 messages 参数指定之前的对话。模型根据之前的几轮对话生成下一条消息。

每条输入消息都必须是一个包含角色 (role) 和内容 (content) 字段的对象。你可以输入一条单独的用户角色的消息,或者包含多条用户和助手角色交互的消息。

备注:文章末尾提供了完整的代码示例以供参考。

以下是封装在消息 API 请求对象中的消息示例:

// The request object for the messages API (Claude 3)
{"anthropic_version": "bedrock-2023-05-31","max_tokens": 1024,"messages": [{"role": "user","content": [{"type": "text","text": "Tell me a story."}]}]
}

可以看到,这里仅有一条消息,角色为 user,而 Claude 将返回一条包含响应内容的新消息:

// The response object returned by the messages API
{"type": "message","role": "assistant", "content": [{"type": "text","text": "Orphaned as a child, she overcame poverty, discrimination, and countless ..."}]...
}

在消息 API 中使用系统 Prompt

只需在请求对象中添加 “system” 参数即可添加系统 prompt,示例如下:

// The request including a system prompt with the Messages API
{"system": "All your output must be pirate speech 🦜","anthropic_version": "bedrock-2023-05-31","max_tokens": 1024,"messages": [{"role": "user","content": [{"type": "text","text": "Tell me a story."}]}]
}

输出结果如下所示:

// The response object returned by the messages API
{"type": "message", "role": "assistant", "content": [{"type": "text", "text": "Ahoy, matey! Hoist the mainsail an' brace yeself ... 🏴 ☠️"}],...
}

就是这么简单!

如果这篇文章对你有帮助或让你有所收获,欢迎点赞或在评论区留言。 如需了解更多信息,请参考以下指南:

  • Amazon Bedrock 代码示例:提供持续更新的示例列表,涵盖各种模型和编程语言。

  • 推理参数参考:介绍适用于 Amazon Bedrock 上的 Claude 及所有其他模型的推理参数。

  • community.aws 上的生成式 AI 专栏:这里有许多关于 Amazon Bedrock 和生成式 AI 的精选文章。

代码示例

如果你想要动手实践,这里给大家提供了两个适用于这两种 API 的完整 Python 脚本示例。祝你编程愉快!

文本补全 API 中添加系统 Prompt(完整示例)

# This Python example demonstrates the use of a system prompt with the
# Text Completion API for Claude 2.ximport boto3
import json# Initialize the client with the service and region
client = boto3.client('bedrock-runtime', 'us-east-1')# Define model ID and prompt
model_id = 'anthropic.claude-v2:1'system_prompt = 'All your output must be pirate speech 🦜'
user_prompt = 'Tell me a story.'
prompt = f"System: {system_prompt}\n\nHuman: {user_prompt}\n\nAssistant:"# Create the request body
body = {"prompt": prompt,"max_tokens_to_sample": 200,"temperature": 0.5,"stop_sequences": ["\n\nHuman:"]
}# Invoke the model and print the response
response = client.invoke_model(modelId=model_id, body=json.dumps(body))
print(json.loads(response["body"].read())["completion"])

消息 API 中添加系统 Prompt(完整示例)

# This Python example demonstrates the use of a system prompt with the
# Messages API for Claude 3import boto3
import jsonclient = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")
model_id = "anthropic.claude-3-sonnet-20240229-v1:0"response = client.invoke_model(modelId=model_id,body=json.dumps({"anthropic_version": "bedrock-2023-05-31","max_tokens": 1024,"system": "All your output must be pirate speech 🦜","messages": [{"role": "user","content": [{"type": "text","text": "Tell me a story."}]}],}),
)# Process and print the response(s)
response_body = json.loads(response.get("body").read())
for output in response_body.get("content", []):print(output["text"])

享受编程的乐趣吧!

本文中的任何观点仅代表作者个人的观点,不代表亚马逊云科技的观点。

文章来源:在 Amazon Bedrock 上使用 Anthropic Claude 系统 Prompt
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDFSRPC协议详解

本文主要阐述HDFSRPCserver端一个socket连接接收字节流的构成,帮助读者理解HDFSRPC协议。注意hadoop版本为3.1.1。 写在前面 关于proto写入和读取,使用writeDelimitedTo和read,应该是通用的方式,不作过多的介绍。 处理rpc各种情…

使用 Watt Toolkit (原名 Steam++)加速github访问

这里写自定义目录标题 安装使用可能问题SSL certificate problem 参考 安装 访问 官网下载 下载安装(或解压) 使用 打开 Steam 可执行文件点击网络加速按钮,再选择平台加速选项卡,勾选github项开启加速:点击一键加速按钮关闭加速&#xff…

Electron内调用网页出现 $ is not defined 或者 jQuery is not defined

打包了一个electron应用,引入一个部署好的网页。意外发现,之前在浏览器好好的功能,此刻在electron内部却出现报错: "$ is not defined"\"jQuery is not defined"\ "Luckysheet is not defined" ...…

【测试开发学习历程】压缩、打包与软件安装

目录 一、压缩与打包 (一)概念 (二)压缩命令gzip (三)压缩命令bzip2 (四)打包命令tar (五)压缩命令zip 二、常用的安装软件的方式 (一&am…

《智能便利,畅享便利柜平台的架构奇妙之旅》

便利柜平台作为一种智能化、便捷的自助服务解决方案,正在逐渐走进人们的生活。本篇博客将深入探讨便利柜平台的架构设计理念、优势和实践,帮助读者了解如何构建智能便利柜平台,提供更便捷的自助服务体验。 ### 便利柜平台架构设计 #### 1. …

Java8中Stream流API最佳实践Lambda表达式使用示例

文章目录 一、创建流二、中间操作和收集操作筛选 filter去重distinct截取跳过映射合并多个流是否匹配任一元素:anyMatch是否匹配所有元素:allMatch是否未匹配所有元素:noneMatch获取任一元素findAny获取第一个元素findFirst归约数值流的使用中…

Android 子线程为什么不能更新UI?

Android 应用的 UI 是在主线程上进行绘制和更新的。 当我们在子线程中直接进行 UI 更新时,会导致以下问题: 1. 线程安全问题:多个线程同时操作 UI,可能导致 UI 组件的状态不一致或者出现竞争条件。 2. 卡顿和 ANR:如果…

Redis有没有可能丢数据

Redis在某些情况下有可能会丢失数据。尽管Redis是一个高性能的内存数据库,但是由于其工作方式和特性,存在一些情况下可能导致数据丢失的情况,包括: 内存溢出: 如果Redis实例的内存用尽,而没有足够的空间来处…

数据结构入门篇 之 【双链表】的实现讲解(附完整实现代码及顺序表与线性表的优缺点对比)

一日读书一日功,一日不读十日空 书中自有颜如玉,书中自有黄金屋 一、双链表 1、双链表的结构 2、双链表的实现 1)、双向链表中节点的结构定义 2)、初始化函数 LTInit 3)、尾插函数 LTPushBack 4)、头…

单据分页的实现

单据分页的实现 1. AceWzcgfkjtMaintainProxy.java package nc.ui.jych.wzcgfkjt.ace.serviceproxy;import nc.bs.framework.common.NCLocator; import nc.itf.jych.IWzcgfkjtMaintain; import nc.ui.uif2.components.pagination.IPaginationQueryService; import nc.vo.jych.…

软考高级:信息系统开发方法2(形式化方法、统计过程方法等)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

RTC协议与算法基础 - RTP/RTCP

首先,需要说明下,webrtc的核心音视频传输是通过RTP/RTCP协议实现的,源码位于src/modules/rtp_rtcp目录下: 下面让我们对相关的内容基础进行简要分析与说明: 一、TCP与UDP协议 1.1、TCP协议 TCP为了实现数据传输的可…

【Python】新手入门学习:详细介绍依赖倒置原则(DIP)及其作用、代码示例

【Python】新手入门学习:详细介绍依赖倒置原则(DIP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、Py…

如何将.txtpb在IDE中彩色高亮显示

1. 问题描述 文件内容片段如下,它采用了一种键值对的格式,其中还包括了注释。我们可以采用一种近似的语言色彩识别方案处理它,比如YAML或者Python的语法高亮规则,因为这两种语言在处理键值对和注释的表示上与内容片段相似。当然也…

【QT+QGIS跨平台编译】之七十三:【QGIS_Analysis跨平台编译】—【错误处理:字符串错误】

文章目录 一、字符串错误二、处理方法三、涉及到的文件一、字符串错误 常量中有换行符错误:(也有const char * 到 LPCWSTR 转换的错误) 二、处理方法 需要把对应的文档用记事本打开,另存为 “带有BOM的UTF-8” 三、涉及到的文件 涉及到的文件有: src\analysis\processin…

spring boot-操作excel(EasyExcel 快速开始)/ spring boot接受文件参数 File

文章目录 一、spring boot 操作excel1. 技术选型1.1 EasyExcel1.2 POI 二、EasyExcel使用0. 工作中使用总结1. maven 引入2. demo1:excel写入文件3. demo2:SpringBoot项目中集成EasyExcel实现Excel文件的下载response的三个属性:编码、类型、…

gcc -static参数

在使用 GCC(GNU Compiler Collection)编译器编译C语言或C语言程序时,-static 选项告诉编译器生成一个完全静态链接的可执行文件。这就意味着程序需要的所有库在编译时都会被包含在执行文件中,它不会在运行时链接动态库&#xff08…

openssl3.2 - exp - 选择最好的内建椭圆曲线

文章目录 openssl3.2 - exp - 选择最好的内建椭圆曲线概述笔记将 openssl ecparam -list_curves 实现迁移到自己的demo工程备注END openssl3.2 - exp - 选择最好的内建椭圆曲线 概述 在openssl中使用椭圆曲线, 只允许选择椭圆曲线的名字, 无法给定椭圆曲线的位数. 估计每种椭…

储能系统--户用储能市场现状(三)

1、户用储能市场现状 2022年,俄乌冲突造成能源价格飙升,欧洲居民电价飞涨,成为点燃户储需求的引线。以德国为例,2022年的居民电价达到40欧分/kWh以上,相比2021年初翻了三倍。因此2022年被称为户储爆发元年&#xff0c…

深度学习armv8/armv9 cache的原理

文章目录 前言1、为什么要用cache?2、背景:架构的变化?2、cache的层级关系 ––big.LITTLE架构(A53为例)3、cache的层级关系 –-- DynamIQ架构(A76为例)4、DSU / L3 cache5、L1/L2/L3 cache都是多大呢6、cache相关的术语介绍7、cache的分配策略(alocat…