当前位置: 首页 > article >正文

第4章 分离数据和指令-Claude开发应用教程

更多教程,请访问: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)

def get_completion(prompt: str, system_prompt=""):
    message = client.messages.create(
        model=MODEL_NAME,
        max_tokens=2000,
        temperature=0.0,
        system=system_prompt,
        messages=[
          {"role": "user", "content": prompt}
        ]
    )
    return message.content[0].text

课程

通常,我们不想编写完整的提示,而是想要提示模板,这些模板可以在提交给 Claude 之前使用其他输入数据进行修改。如果您希望 Claude 每次都做同样的事情,这可能会派上用场,但 Claude 用于其任务的数据每次可能都不同。

幸运的是,我们可以很容易地做到这一点,方法是将提示的固定框架与可变的用户输入分开,然后在将完整提示发送给 Claude 之前将用户输入替换到提示中。

下面,我们将逐步介绍如何编写可替换的提示模板,以及如何替换用户输入。

示例

在第一个示例中,我们要求 Claude 充当动物噪音生成器。请注意,提交给 Claude 的完整提示只是用输入(在本例中为“Cow”)替换的 PROMPT_TEMPLATE。请注意,当我们打印出完整提示时,单词“Cow”通过 f 字符串替换了 ANIMAL 占位符。

注意:在实践中,您不必为占位符变量指定任何特定名称。我们在此示例中将其命名为 ANIMAL,但同样,我们可以将其命名为 CREATURE 或 A(尽管通常最好让变量名称具体且相关,以便即使没有替换,提示模板也易于理解,这只是为了用户可解析性)。只需确保您命名变量的名称与提示模板 f 字符串所使用的名称相同即可。

# Variable content
ANIMAL = "Cow"

# Prompt template with a placeholder for the variable content
PROMPT = f"I will tell you the name of an animal. Please respond with the noise that animal makes. {ANIMAL}"

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

为什么我们要像这样分离和替换输入?提示模板简化了重复性任务。假设您构建了一个提示结构,邀请第三方用户向提示提交内容(在本例中是他们想要生成声音的动物)。这些第三方用户不必编写甚至查看完整的提示。他们所要做的就是填写变量。

我们在这里使用变量和 f 字符串进行替换,但您也可以使用 format() 方法进行替换。

注意:提示模板可以有任意数量的变量!

在引入这样的替换变量时,确保 Claude 知道变量的开始和结束位置非常重要(与说明或任务描述相对)。让我们看一个说明和替换变量之间没有分离的例子。

在我们人类看来,变量在下面的提示模板中的开始和结束位置非常清楚。然而,在完全替换的提示中,这种划分变得不清楚。

# Variable content
EMAIL = "Show up at 6am tomorrow because I'm the CEO and I say so."

# Prompt template with a placeholder for the variable content
PROMPT = f"Yo Claude. {EMAIL} <----- Make this email more polite but don't change anything else about it."

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

在这里,Claude 认为“Yo Claude”是它应该重写的电子邮件的一部分!您可以看出来,因为它以“亲爱的 Claude”开始重写。对于人眼来说,这很清楚,特别是在提示模板中电子邮件的开始和结束位置,但在替换后的提示中变得不那么清晰了。

我们如何解决这个问题?用 XML 标签包装输入!我们在下面这样做了,正如您所见,输出中不再有“亲爱的 Claude”。

XML 标签是尖括号标签,如 。它们成对出现,由一个开始标签(例如 )和一个以 / 标记的结束标签(例如 )组成。 XML 标签用于包装内容,如下所示:content。

注意:虽然 Claude 可以识别并使用各种分隔符和定界符,但我们建议您使用特定的 XML 标签作为 Claude 的分隔符,因为 Claude 经过专门训练,可以将 XML 标签识别为提示组织机制。除了函数调用之外,Claude 并没有经过专门训练的 XML 标签,您可以使用它们来最大限度地提高性能。我们特意以这种方式让 Claude 非常灵活且可定制。

# Variable content
EMAIL = "Show up at 6am tomorrow because I'm the CEO and I say so."

# Prompt template with a placeholder for the variable content
PROMPT = f"Yo Claude. {EMAIL} <----- Make this email more polite but don't change anything else about it."

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

让我们再看一个 XML 标签如何帮助我们的例子。

在下面的提示中,Claude 错误地解释了提示的哪一部分是指令,哪一部分是输入。它错误地认为“每个都是关于一种动物的,比如兔子”是列表的一部分,这是因为格式问题,而用户(填写 SENTENCES 变量的人)可能并不想要这样。

# Variable content
SENTENCES = """- I like how cows sound
- This sentence is about spiders
- This sentence may appear to be about dogs but it's actually about pigs"""

# Prompt template with a placeholder for the variable content
PROMPT = f"""Below is a list of sentences. Tell me the second item on the list.

- Each is about an animal, like rabbits.
{SENTENCES}"""

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

为了解决这个问题,我们只需要用 XML 标签将用户输入的句子括起来。这样 Claude 就能看到输入数据的开始和结束位置,尽管 Each 前面的连字符容易让人误解,但它指的是一种动物,比如兔子。

# Variable content
SENTENCES = """- I like how cows sound
- This sentence is about spiders
- This sentence may appear to be about dogs but it's actually about pigs"""

# Prompt template with a placeholder for the variable content
PROMPT = f""" Below is a list of sentences. Tell me the second item on the list.

- Each is about an animal, like rabbits.

{SENTENCES}
"""

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

注意:在“Each is about an animal”提示的错误版本中,我们必须包含连字符,才能让 Claude 以我们想要的方式做出错误的回应。这是关于提示的重要一课:小细节很重要!清理提示中的拼写错误和语法错误总是值得的。Claude 对模式很敏感(在早期,在微调之前,它是一个原始的文本预测工具),当你犯错时它更容易犯错,当你听起来很聪明时它更聪明,当你听起来很傻时它更傻,等等。

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

练习

练习 4.1 – 俳句主题

修改 PROMPT,使其成为一个模板,该模板将接受名为 TOPIC 的变量并输出关于该主题的俳句。此练习仅用于测试您对使用 f 字符串的变量模板结构的理解。

# Variable content
TOPIC = "Pigs"

# Prompt template with a placeholder for the variable content
PROMPT = f""

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

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

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

练习 4.2 – 有错别字的狗问题

通过添加 XML 标签修​​复提示,以便 Claude 给出正确答案。

尽量不要更改提示中的任何其他内容。混乱且错误百出的书写是故意的,因此您可以看到 Claude 对此类错误的反应。

# Variable content
QUESTION = "ar cn brown?"

# Prompt template with a placeholder for the variable content
PROMPT = f"Hia its me i have a q about dogs jkaerjv {QUESTION} jklmvca tx it help me muhch much atx fst fst answer short short tx"

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

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

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

练习 4.3 – 狗问题第 2 部分

修复提示,无需添加 XML 标签。相反,只需从提示中删除一个或两个单词。

与上述练习一样,尽量不要更改提示中的任何其他内容。这将向您展示 Claude 可以解析和理解哪种语言。

# Variable content
QUESTION = "ar cn brown?"

# Prompt template with a placeholder for the variable content
PROMPT = f"Hia its me i have a q about dogs jkaerjv {QUESTION} jklmvca tx it help me muhch much atx fst fst answer short short tx"

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

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

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
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 = "Cow"

# Prompt template with a placeholder for the variable content
PROMPT = f"I will tell you the name of an animal. Please respond with the noise that animal makes. {ANIMAL}"

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

# Variable content
EMAIL = "Show up at 6am tomorrow because I'm the CEO and I say so."

# Prompt template with a placeholder for the variable content
PROMPT = f"Yo Claude. {EMAIL} <----- Make this email more polite but don't change anything else about it."

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

# Variable content
EMAIL = "Show up at 6am tomorrow because I'm the CEO and I say so."

# Prompt template with a placeholder for the variable content
PROMPT = f"Yo Claude. {EMAIL} <----- Make this email more polite but don't change anything else about it."

# Print Claude's response
print("--------------------------- Full prompt with variable substutions ---------------------------")
print(PROMPT)
print("\n------------------------------------- Claude's response -------------------------------------")
print(get_completion(PROMPT))
     
# Variable content
SENTENCES = """- I like how cows sound
- This sentence is about spiders
- This sentence may appear to be about dogs but it's actually about pigs"""

# Prompt template with a placeholder for the variable content
PROMPT = f"""Below is a list of sentences. Tell me the second item on the list.

- Each is about an animal, like rabbits.
{SENTENCES}"""

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

# Variable content
SENTENCES = """- I like how cows sound
- This sentence is about spiders
- This sentence may appear to be about dogs but it's actually about pigs"""

# Prompt template with a placeholder for the variable content
PROMPT = f""" Below is a list of sentences. Tell me the second item on the list.

- Each is about an animal, like rabbits.

{SENTENCES}
"""

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

http://www.kler.cn/a/388090.html

相关文章:

  • 【stable diffusion部署】超强AI绘画Stable Diffusion,本地部署使用教程,完全免费使用
  • C++ 数组与结构 编程练习
  • 2411C++,C++26反射示例
  • request爬虫库的小坑
  • 【金融风控】特征评估与筛选详解
  • 【MySQL从入门到放弃】InnoDB磁盘结构(一)
  • 2024最新软件测试面试热点问题
  • Oh My Posh安装
  • 07 P1164 小A点菜
  • Docker在CentOS上的安装与配置
  • 初识Electron 进程通信
  • PGMP-串串01概述
  • 数据分析:微生物功能差异分析之Maaslin2
  • 5分钟科普:AI网关是什么?应用场景是什么?有没有开源的选择?
  • 【JAVA】java 企业微信信息推送
  • 8+ 典型分析场景,25+ 标杆案例,Apache Doris 和 SelectDB 精选案例集(2024版)电子版上线
  • Python酷库之旅-第三方库Pandas(204)
  • layui 文件上传前检查文件大小,后面再点上传出现重复提交的问题
  • 【图】图学习
  • 20241106软考架构-------软考案例12答案
  • SQL,力扣题目262,行程和用户
  • 9_api_intro_imagerecognition_ocr2word
  • Vue 的 keep-alive
  • CSRF 跨站请求伪造的实现原理和预防措施
  • Windows 使用批处理脚本快速释放被占用的端口
  • 深度学习:预训练(Pre-training详解