在 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
相关文章:

在 Amazon Bedrock 上使用 Anthropic Claude 系统 Prompt
系统 prompt 是定义生成式 AI 模型对用户输入的响应策略的一种好方法。这篇博文将介绍什么是系统 prompt,以及如何在基于 Anthropic Claude 2.x 和 3 的应用中使用系统 prompt。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例…...

【LeetCode】动态规划--题目练习
有关动态规划算法的整理:添加链接描述 1.爬楼梯 爬楼梯:LeetCode70 int climbStairs(int n) {//1.确定dp数组和意义 dp[n]表示第n阶的方法//2.确定递推关系式 dp[n] dp[n-1]dp[n-2];//3.初始化int dp[50] {0};dp[1] 1;dp[2] 2;for(int i 3;i<n;i){dp[i] …...

【LeetCode热题100】101. 对称二叉树(二叉树)
一.题目要求 给你一个二叉树的根节点 root , 检查它是否轴对称。 二.题目难度 简单 三.输入样例 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出&a…...

VLC抓取m3u8视频
前言 最近想看一些网络视频,但是很多时候网页上是m3u8推流的,如果在线看,速度又慢,所以就想下载下来,就想到了VLC的推流,转换能力,查阅资料,加上实践,总结心得。 设置中…...

聊聊Python都能做些什么
文章目录 一、Python简介二、Python都能做些什么1. Web开发2. 数据分析和人工智能3. 自动化运维和测试4. 网络爬虫5. 金融科技 三、Python开源库都有哪些1. Web开发2. 数据分析和科学计算3. 机器学习和深度学习4. 网络爬虫5. 自动化和测试6. 其他常用库 四、相关链接 一、Pytho…...

JavaWeb06-MVC和三层架构
目录 一、MVC模式 1.概述 2.好处 二、三层架构 1.概述 三、MVC与三层架构 四、练习 一、MVC模式 1.概述 MVC是一种分层开发的模式,其中 M:Model,业务模型,处理业务 V: View,视图,界面展…...

MySQL数据库实现增删改查基础操作
准备工作 安装mysql8.0 (安装时一定要记住用户名和密码)安装数据库可视化视图工具Navicat 请注意⚠️⚠️⚠️⚠️ a. 编程类所有软件不要安装在中文目录下 b. Navicat破解版下载安装教程:(由于文章审核提示版权问题,链接不方便给出ÿ…...

PCM和I2S区别
I2S和PCM接口都是数字音频接口,而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口,是不是两个接口有各自不同的应用呢?先来看下概念。 PCM(PCM-clock、PCM-sync、PCM-in、PCM-out)脉冲编码调制,模拟语音信…...

大模型笔记:吴恩达 ChatGPT Prompt Engineering for Developers(1) prompt的基本原则和策略
1 intro 基础大模型 VS 用指令tune 过的大模型 基础大模型 只会对prompt的文本进行续写 所以当你向模型发问的时候,它往往会像复读机一样续写几个问题这是因为在它见过的语料库文本(通常大多来自互联网)中,通常会连续列举出N个问…...

设计模式 — — 单例模式
一、是什么 单例模式只会在全局作用域下创建一次实例对象,让所有需要调用的地方都共享这一单例对象 二、实现 // 单例构造函数 function CreateSingleton (name) {this.name name;this.getName(); };// 获取实例的名字 CreateSingleton.prototype.getName func…...

C++:菱形继承与虚继承
看下面这个示例代码 class A{ public: int num10; A(){cout<<"A构造"<<endl;} virtual void fun(){cout<<"A虚函数"<<endl;} };class B:public A{ public: B(){cout<<"B构造"<<endl;} void fun(){cout<…...

贡献法:USACO 2021 December Contest Bronze:孤独的照片
Farmer John 最近购入了 N 头新的奶牛,每头奶牛的品种是更赛牛(Guernsey)或荷斯坦牛(Holstein)之一。 奶牛目前排成一排,Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而,他…...

Java实现简单的通讯录
每日一言 泪眼问花花不语,乱红飞过秋千去。 —欧阳修- 简单的通讯录实现,跟写Java实现图书管理系统差不多,用到的知识也差不多,就当个小练习,练习一下写Java程序的手感。 Java实现图书管理系统 关于通讯录的代码都写…...

服务器数据恢复—raid5热备盘上线同步数据失败的如何恢复数据
服务器数据恢复环境&故障&分析: 一台存储上有一组由多块硬盘组建的raid5阵列,该raid5阵列中的一块硬盘掉线,热备盘自动上线同步数据的过程中,raid阵列中又有一块硬盘掉线,热备盘的数据同步被中断,r…...

探索C语言中的循环结构
循环结构是程序设计中一种重要的控制结构,它允许程序重复执行特定的代码块,直到满足某个条件为止。在C语言中,循环结构有多种形式,如for循环、while循环和do-while循环。本文将介绍C语言中的循环结构,并讨论它们的用法…...

数学建模-估计出租车的总数
文章目录 1、随机抽取的号码在总体的排序 1、随机抽取的号码在总体的排序 10个号码从小到大重新排列 [ x 0 , x ] [x_0, x] [x0,x] 区间内全部整数值 ~ 总体 x 1 , x 2 , … , x 10 总体的一个样本 x_1, x_2, … , x_{10} ~ 总体的一个样本 x1,x2,…,x10 总体的一个样…...

设计模式在芯片验证中的应用——装饰器
一、装饰器模式 装饰器模式(Decorator)是一种结构化软件设计模式,它提供了一种通过向类对象添加行为来修改类对象的方法,而不会影响同一类的其它对象行为。该模式允许在不修改抽象类的情况下添加类功能。它从本质上允许基类代码对不可预见的修改具有前瞻…...

Python 查找并高亮PDF中的指定文本
在处理大量PDF文档时,有时我们需要快速找到特定的文本信息。本文将提供以下三个Python示例来帮助你在PDF文件中快速查找并高亮指定的文本。 查找并高亮PDF中所有的指定文本查找并高亮PDF某个区域内的指定文本使用正则表达式搜索指定文本并高亮 本文将用到国产第三方…...

LEETCODE LCS 03. 主题空间
题目描述如上,这个题主要运用了DFS的思想,同时走过的路径标记为6,即可在后续的遍历中过滤掉重复的元素,其他则类似边界条件的判断和题目条件的判断,求最大值,只需要一次遍历中累加对比每一次得即可。 模板&…...

【Spring Boot 源码学习】深入应用上下文初始化器实现
《Spring Boot 源码学习系列》 深入应用上下文初始化器实现 一、引言二、往期内容三、主要内容3.1 spring-boot 子模块中内置的实现类3.1.1 ConfigurationWarningsApplicationContextInitializer3.1.2 ContextIdApplicationContextInitializer3.1.3 DelegatingApplicationConte…...

【Docker】一文趣谈Docker
🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 文章目录 …...

代码随想录day19(2)二叉树:二叉树的最大深度(leetcode104)
题目要求:求出二叉树的最大深度 思路:首先要区分二叉树的高度与深度。二叉树的高度是任一结点到叶子结点的距离,而二叉树的深度指的是任一节点到根节点的距离(从1开始)。所以求高度使用后序遍历(从下往上&…...

Lua中文语言编程源码-第五节,更改lcorolib.c协程库函数, 使Lua加载中文库关键词(与所有的基础库相关)
源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的lcorolib.c协程库函数,Coroutine Library:表明这个C源文件实现了Lua的协程库(Coroutine Library),即提供了…...

Docker学习之数据管理(超详解析)
Docker存储资源类型: 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理: (1ÿ…...

FDTD液晶折射率各项异性表示方法
由于FDTD的数据都是沿坐标轴的,各向异性材料的参数也需要根据坐标轴来输入。 首先要了解坐标变换。 坐标变换 这里以二维坐标变化为例。 矢量下我们可以发现OP可在两个坐标系下分别表示 接下来将两个坐标相互关联,这里以Xb举例,Yb同理 注…...

RoketMQ主从搭建
vim /etc/hosts# IP与域名映射,端口看自己的#nameserver 192.168.126.132 rocketmq-nameserver1 192.168.126.133 rocketmq-nameserver2# 注意主从节点不在同一个主机上 #broker 192.168.126.132 rocketmq-master1 192.168.126.133 rocketmq-master2#broker 192.168…...

Linux网络瑞士军刀 nc(netcat)
1.命令简介 nc(netcat)是一个短小精悍、功能实用、简单可靠的网络工具,主要有如下作用: (1)端口侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口; (2&#x…...

1.Spring入门
1.1 Spring简介 Spring是一个轻量级Java 企业级应用程序开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。 Spring Fra…...

【JavaEE Spring 项目】消息队列的设计
消息队列的设计 一、消息队列的背景知识二、需求分析核心概念⼀个⽣产者, ⼀个消费者N 个⽣产者, N 个消费者Broker Server 中的相关概念核⼼ API交换机类型 (Exchange Type)持久化⽹络通信消息应答 三、 模块划分四、 项⽬创建五、创建核心类创建 Exchange创建 MSGQUeue创建 B…...

SpringFramework学习笔记(Spring IoC,aop,tx)
SpringFramework 本篇笔记是基于尚硅谷学习资料的整理,涉及到其笔记的简化,补充,以及我在学习中遇到的与无法理解的问题及解决,如果想看完整及后续的笔记,可以去https://www.wolai.com/v5Kuct5ZtPeVBk4NBUGBWF查看官方…...