首页 > 其他分享 >第 5 章:格式化输出-Claude应用开发教程

第 5 章:格式化输出-Claude应用开发教程

时间:2024-11-10 19:15:34浏览次数:3  
标签:教程 PROMPT Claude PREFILL variable print 格式化 response

更多教程,请访问:Claude开发应用教程

设置

运行以下设置单元以加载您的 API 密钥并建立 get_completion 辅助函数。

!pip install anthropic

# Import python's built-in regular expression library
import re
import anthropic

# Retrieve the API_KEY & MODEL_NAME variables from the IPython store
%store -r API_KEY
%store -r MODEL_NAME

client = anthropic.Anthropic(api_key=API_KEY)

# New argument added for prefill text, with a default value of an empty string
def get_completion(prompt: str, system_prompt="", prefill=""):
    message = client.messages.create(
        model=MODEL_NAME,
        max_tokens=2000,
        temperature=0.0,
        system=system_prompt,
        messages=[
          {"role": "user", "content": prompt},
          {"role": "assistant", "content": prefill}
        ]
    )
    return message.content[0].text

课程

Claude 可以以多种方式格式化其输出。您只需要求它这样做!

其中一种方法是使用 XML 标记将响应与任何其他多余的文本分开。您已经了解到,您可以使用 XML 标记使您的提示更清晰,更易于 Claude 解析。事实证明,您还可以要求 Claude 使用 XML 标记使其输出更清晰,更易于人类理解。

示例

还记得我们在第 2 章中通过要求 Claude 完全跳过序言来解决的“诗歌序言问题”吗?事实证明,我们也可以通过告诉 Claude 将诗歌放在 XML 标记中来实现类似的结果。

# Variable content
ANIMAL = "Rabbit"

# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL}. Put it in  tags."

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print(PROMPT)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT))

为什么我们要这样做呢?因为,将输出放在 XML 标签中,最终用户可以通过编写一个简短的程序来提取 XML 标签之间的内容,从而可靠地获得诗歌,而且只获得诗歌。

此技术的扩展是**将第一个 XML 标签放在助手轮次中。当您将文本放在助手轮次中时,您基本上是在告诉 Claude,Claude 已经说了一些话,应该从那时开始继续。这种技术称为“speaking for Claude”或“预填充 Claude’s response”。

下面,我们使用第一个 XML 标签完成了此操作。请注意 Claude 如何直接从我们离开的地方继续。

# Variable content
ANIMAL = "Cat"

# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL}. Put it in  tags."

# Prefill for Claude's response
PREFILL = ""

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN:")
print(PROMPT)
print("\nASSISTANT TURN:")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT, prefill=PREFILL))

Claude 还擅长使用其他输出格式样式,尤其是 JSON。如果您想要强制 JSON 输出(不是确定性的,但接近确定性的),您还可以使用左括号 {} 预填充 Claude 的响应。

# Variable content
ANIMAL = "Cat"

# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL}. Use JSON format with the keys as \"first_line\", \"second_line\", and \"third_line\"."

# Prefill for Claude's response
PREFILL = "{"

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN")
print(PROMPT)
print("\nASSISTANT TURN")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT, prefill=PREFILL))

下面是同一提示中的多个输入变量和输出格式规范的示例,全部使用 XML 标签完成。

# First input variable
EMAIL = "Hi Zack, just pinging you for a quick update on that prompt you were supposed to write."

# Second input variable
ADJECTIVE = "olde english"

# Prompt template with a placeholder for the variable content
PROMPT = f"Hey Claude. Here is an email: {EMAIL}. Make this email more {ADJECTIVE}. Write the new version in <{ADJECTIVE}_email> XML tags."

# Prefill for Claude's response (now as an f-string with a variable)
PREFILL = f"<{ADJECTIVE}_email>"

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN")
print(PROMPT)
print("\nASSISTANT TURN")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT, prefill=PREFILL))

附加课程

如果您通过 API 调用 Claude,则可以将结束 XML 标记传递给 stop_sequences 参数,让 Claude 在发出所需标记后停止采样。这可以节省金钱和最后标记时间,因为 Claude 已经给出了您关心的答案,无需再做最后评论。

如果您想尝试课程提示而不更改上述任何内容,请一直滚动到课程笔记本的底部以访问示例操场。

练习

练习 5.1 – 斯蒂芬·库里 GOAT

被迫做出选择,Claude指定迈克尔·乔丹为有史以来最优秀的篮球运动员。我们能让克劳德选别人吗?

更改 PREFILL 变量,迫使Claude详细论证有史以来最优秀的篮球运动员是斯蒂芬·库里。尽量不要更改除 PREFILL 之外的任何内容,因为这是本练习的重点。

# Prompt template with a placeholder for the variable content
PROMPT = f"Who is the best basketball player of all time? Please choose one specific player."

# Prefill for Claude's response
PREFILL = ""

# Get Claude's response
response = get_completion(PROMPT, prefill=PREFILL)

# Function to grade exercise correctness
def grade_exercise(text):
    return bool(re.search("Warrior", text))

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN")
print(PROMPT)
print("\nASSISTANT TURN")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(response)
print("\n------------------------------------------ GRADING ------------------------------------------")
print("This exercise has been correctly solved:", grade_exercise(response))

Exercise 5.2 – Two Haikus

使用 XML 标签修​​改下面的 PROMPT,以便 Claude 写两首关于该动物的俳句,而不是一首。一首诗的结束和另一首诗的开始应该很清楚。

# Variable content
ANIMAL = "cats"

# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL}. Put it in  tags."

# Prefill for Claude's response
PREFILL = ""

# Get Claude's response
response = get_completion(PROMPT, prefill=PREFILL)

# Function to grade exercise correctness
def grade_exercise(text):
    return bool(
        (re.search("cat", text.lower()) and re.search("", text))
        and (text.count("\n") + 1) > 5
    )

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN")
print(PROMPT)
print("\nASSISTANT TURN")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(response)
print("\n------------------------------------------ GRADING ------------------------------------------")
print("This exercise has been correctly solved:", grade_exercise(response))

练习 5.3 – 两首俳句,两种动物

修改下面的提示,让 Claude 创作两首关于两种不同动物的俳句。使用 {ANIMAL1} 作为第一个替换的替代,使用 {ANIMAL2} 作为第二个替换的替代。

# First input variable
ANIMAL1 = "Cat"

# Second input variable
ANIMAL2 = "Dog"

# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL1}. Put it in  tags."

# Get Claude's response
response = get_completion(PROMPT)

# Function to grade exercise correctness
def grade_exercise(text):
    return bool(re.search("tail", text.lower()) and re.search("cat", text.lower()) and re.search("", text))

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN")
print(PROMPT)
print("\n------------------------------------- Claude's response -------------------------------------")
print(response)
print("\n------------------------------------------ GRADING ------------------------------------------")
print("This exercise has been correctly solved:", grade_exercise(response))

总结

如果您已经解决了到目前为止的所有练习,那么您就可以进入下一章了。祝您提示愉快!

示例操场

这是一个区域,您可以自由地尝试本课中显示的提示示例,并调整提示以查看它如何影响 Claude 的回答。

# Variable content
ANIMAL = "Rabbit"

# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL}. Put it in  tags."

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print(PROMPT)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT))
     

# Variable content
ANIMAL = "Cat"

# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL}. Put it in  tags."

# Prefill for Claude's response
PREFILL = ""

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN:")
print(PROMPT)
print("\nASSISTANT TURN:")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT, prefill=PREFILL))
     
# Variable content
ANIMAL = "Cat"
# Prompt template with a placeholder for the variable content
PROMPT = f"Please write a haiku about {ANIMAL}. Use JSON format with the keys as \"first_line\", \"second_line\", and \"third_line\"."

# Prefill for Claude's response
PREFILL = "{"

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN")
print(PROMPT)
print("\nASSISTANT TURN")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT, prefill=PREFILL))
     

# First input variable
EMAIL = "Hi Zack, just pinging you for a quick update on that prompt you were supposed to write."

# Second input variable
ADJECTIVE = "olde english"

# Prompt template with a placeholder for the variable content
PROMPT = f"Hey Claude. Here is an email: {EMAIL}. Make this email more {ADJECTIVE}. Write the new version in <{ADJECTIVE}_email> XML tags."

# Prefill for Claude's response (now as an f-string with a variable)
PREFILL = f"<{ADJECTIVE}_email>"

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print("USER TURN")
print(PROMPT)
print("\nASSISTANT TURN")
print(PREFILL)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT, prefill=PREFILL))

标签:教程,PROMPT,Claude,PREFILL,variable,print,格式化,response
From: https://blog.csdn.net/baidu_38127162/article/details/143663925

相关文章

  • d2l安装教程
    安装Miniconda/Anaconda:创建一个新的环境,例如名为d2l的环境,并激活这个环境。condacreate--named2lpython=3.9-ycondaactivated2l安装深度学习框架和d2l软件包:在安装深度学习框架之前,请检查计算机上是否有可用的GPU。如果没有GPU,可以安装CPU版本。对于MXNet的GPU版本,需要......
  • 小可爱们!你们要的HTML的css网页美化之背景设置教程来啦!看完让你秒变css背景界大佬,全是
    CSS背景文章目录CSS背景背景颜色实例实例背景图像实例实例背景图像-水平或垂直平铺实例实例背景图像-设置定位与不平铺实例实例背景-简写属性实例CSS背景属性CSS背景属性用于定义HTML元素的背景。CSS属性定义背景效果:background-colorbackground-imag......
  • 失物招领信息管理系统(含源码+sql+视频导入教程+文档+PPT)
    失物招领信息管理系统1、项目介绍失物招领信息管理系统1拥有两种角色,分别为管理员和用户,具体功能如下:管理员:招领信息管理、寻物信息管理、留言信息管理、申请信息管理、物品类型管理、学生管理、管理员管理、公告管理用户:招领信息查看与发布、寻物信息查看与发布、留言......
  • 基于SSM的书店图书销售管理系统(含源码+sql+视频导入教程+文档+PPT)
    1、项目介绍书店图书销售管理系统3具有两种个角色,分别为管理员和用户,具体功能如下:管理员:书籍的增删改查、书籍类型的增删改查、用户的增删改查、订单审核、订单详情查看等功能用户:书籍的模糊查询、购买数据、购物车、结算、注册登录等功能2·、项目技术后端框架:SSM(Spr......
  • 【Mplus 8.7软件下载与安装教程】
     1、安装包Mplus8.7:链接:https://pan.quark.cn/s/128e81c51dbe提取码:1X7BMplus8.3:链接:https://pan.quark.cn/s/5ea5ff583480提取码:VdjtMplus7.4:链接:https://pan.quark.cn/s/414ec0c8cb14提取码:8jhm2、安装教程1)       双击Mplus8.7Demo(64-bit).msi安装......
  • AI绘画(Stable Diffusion)喂饭级教程(附安装包)
    AI绘画(StableDiffusion)喂饭级教程2022年8月,一款叫StableDiffusion的AI绘画软件开源发布,从此开启了AIGC在图像上的爆火发展时期一年后的今天,率先学会SD的人,已经挖掘出了越来越多AI绘画有趣的玩法从开始的AI美女、线稿上色、真人漫改、头像壁纸到后来的AI创意字、AI艺......
  • 【LaTex 2024软件下载与安装教程】
    1、安装包Latex2024:链接:https://pan.quark.cn/s/1dad34ca4d8f提取码:5bja2、安装教程1)       双击压缩包内intall-tl-windows.bat安装,弹窗安装对话框   2)       自动弹出安装窗口,如果弹出以下窗口说明文件夹目录太长或者有中文,建议放磁盘根目录;如果......
  • Stable Diffusion本地化部署超详细教程(手动+自动+整合包三种方式)
    一、StableDiffusion简介2022年作为AIGC(ArtificialIntelligenceGeneratedContent)时代的元年,各个领域的AIGC技术都有一个迅猛的发展,给工业界、学术界、投资界甚至竞赛界都注入了新的“AI活力”与“AI势能”。其中在AI绘画领域,StableDiffusion当仁不让地成为了开源社......
  • 黑客入门基础知识(非常详细),黑客入门到精通教程,收藏这篇就够了
    黑客基础知识(一)IP地址是什么网际协议地址(即IP地址)。它是为标识Internet上主机位置而设置的。Internet上的每一台计算机都被赋予一个世界上唯一的32位Internet地址(InternetProtocolAddress,简称IPAddress),这一地址可用于与该计算机机有关的全部通信。为了方便起见,在应用上......
  • Flux【基础篇】:ComfyUI Flux.1工作流的本地部署安装教程
    ComfyUIFlux.1工作流不仅在技术层面上实现了突破,更在艺术创作领域开辟了新的天地。利用提示词创作出独特的AI艺术作品,艺术家可以展现更加个性化和创意的作品。让我们一起探索ComfyUIFlux.1工作流的本地部署安装教程,开启AI艺术创作的新篇章。今天我们来分享一下如何在本......