I have translated the provided text.

Here is the translated result:

Claude 的图示化响应

在本教程中,我们将展示如何实例化一个 Claude,通过调用图像生成工具来图示化其响应。我们将分三个步骤进行:

  1. 连接到 Stable Diffusion API
  2. 编写一个提示,向 Claude 解释如何以及何时调用 API
  3. 问 Claude 一些问题,看看它的回答!
import os, re, requests, anthropic
from IPython import display
from base64 import b64decode
STABILITY_API_KEY = "" # Stability API key goes here
ANTHROPIC_API_KEY = "" # Anthropic API key goes here
MODEL_NAME = "claude-3-opus-20240229"
CLIENT = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)
def gen_image(prompt, height=1024, width=1024, num_samples=1):
    engine_id = "stable-diffusion-v1-6"
    api_host = 'https://api.stability.ai'

    response = requests.post(
        f"{api_host}/v1/generation/{engine_id}/text-to-image",
        headers={
            "Content-Type": "application/json",
            "Accept": "application/json",
            "Authorization": f"Bearer {STABILITY_API_KEY}"
        },
        json={
            "text_prompts": [
                {
                    "text": prompt,
                }
            ],
            "cfg_scale": 7,
            "height": height,
            "width": width,
            "samples": num_samples,
            "steps": 30,
        },
    )

    if response.status_code != 200:
        raise Exception("Non-200 response: " + str(response.text))

    data = response.json()
    return data['artifacts'][0]['base64']
def show_image(b64): # Helper function for displaying images in a notebook
    return display.Image(b64decode(b64))

现在,我们将编写提示,向 Claude 解释如何以及何时调用图像生成器,并提供一些关于如何编写图像提示以获得精美输出的建议。

image_gen_system_prompt = ("你是 Claude,一个乐于助人、诚实、无害的人工智能助手。"
"这个对话的一个特别之处在于你可以访问图像生成 API,"
"所以如果你请求,或者你有一个想法,"
"你可以为用户创建图像,这个图像似乎特别相关或深刻。但是,如果你只是正常回应人类,那也是完全可以的!如果你确实想生成图像,"
"请写 '<function_call>create_image(PROMPT)</function_call>',将 PROMPT 替换为你想要创建的图像的描述。")

image_gen_system_prompt += """

以下是一些获得最佳图像的指导:

<image_prompting_advice>
规则 1. 使你的 Stable Diffusion 提示清晰简洁
成功的 AI 艺术生成在 Stable Diffusion 中严重依赖于清晰准确的提示。精心制作问题陈述,既要简单又要集中,这是至关重要的。

清晰的提示就像一个指南,将 AI 指向预期的结果。具体来说,制作提示涉及选择消除歧义并集中 AI 注意力以产生相关且引人注目的图像的词语。
简洁的提示写作是关于简短但内容丰富。这种方法不仅适合 AI 系统的技术限制,还确保提示的每个部分都有意义地为最终图像做出贡献。有效的提示创建涉及将复杂的想法提炼成其本质。
提示示例:
“极简主义风景,广阔的沙漠在暮色笼罩的天空中。”
这个提示例证了如何用几个精心挑选的词语来描绘生动的画面。术语“极简主义”和“暮色笼罩的天空”协同工作以设定特定的情绪和场景,展示了简洁的有效提示创作。

另一个示例:
“未来派城市景观,霓虹灯和高耸的摩天大楼。”
这里,描述性但简洁的语言创造了一个详细的环境,而不会让 AI 感到不知所措。这个例子展示了在提示结构化方法中平衡细节和简洁性的重要性。

规则 2. 使用详细的主题和场景来使你的 Stable Diffusion 提示更具体
进入详细的主题和场景描述,重点是精确。在这里,提示中的文本权重变得很重要,它允许在场景中的某些元素上进行强调。

提示中的细节应始终服务于一个明确的目的,例如设定情绪、突出某个方面或定义场景。模糊提示和详细提示之间的区别可能非常明显,通常会导致更具影响力的 AI 生成图像。学习如何在不让 AI 感到不知所措的情况下添加细节层至关重要。
场景设置不仅仅是描述物理属性;它还包括情感和氛围。目标是提供丰富上下文和图像的提示,从而产生更具表现力的 AI 艺术。
提示示例:
“黎明时分宁静的海滨,海浪轻柔,远处有海鸥。”
在这个提示中,每个元素都增加了细节层,描绘了一幅宁静的画面。“宁静”、“黎明”和“轻柔的海浪”等词语协同工作,创造了一个身临其境的场景,展示了特定提示创作的力量。

另一个示例:
“古老的森林,长满苔藓的树木,阳光透过树叶过滤。”
这个提示充满了图像和细节,指导 AI 生成具有深度和个性的图像。它说明了详细的提示如何带来更细致、更具美学吸引力的结果。

规则 3. 上下文化你的提示:提供丰富的细节而不造成混淆
在 Stable Diffusion 的复杂世界中,有效上下文化提示的能力将普通与非凡区分开来。 Stable Diffusion 指南的这一部分深入探讨了在不造成混淆的情况下将丰富细节融入提示的细微方法,这是提示工程过程中的关键方面。

上下文化提示就像用文字绘画。添加的每个细节都增加了深度和纹理,使 AI 生成的图像更逼真、更具共鸣。特定提示创作的艺术在于编织生动而连贯的细节。
例如,在描述场景时,不仅仅是说:
“一片森林。”
一个人可以说:

“阳光明媚的森林,有高耸的松树和一层落叶。”
其他提示示例:
“星夜,剪影的山脉映衬着充满星系的夜空。”
这个提示提供了一个清晰的图像,同时为 AI 的解释留下了空间,这是提示优化的一个关键方面。“星夜”和“充满星系的夜空”的提及提供了足够的上下文,而无需规定场景的每个方面。

规则 4. 不要过度加载你的提示细节
虽然细节是可取的,但提示中过多的信息会导致结果含糊不清。此处的定义提示指南部分侧重于如何取得完美的平衡。

描述性但紧凑:挑战在于足够具有描述性以准确指导 AI,但又足够紧凑以避免让 AI 感到不知所措。例如,一个提示,如“宁静的湖泊,倒映着日落的炽热色彩,四周环绕着阴影笼罩的山丘”,描绘了一幅生动的画面,而没有不必要的冗长。
在此处的 Stable Diffusion 样式部分中,语言的精确性至关重要。这是关于选择正确的词语,用最少的词传达最多的信息,这是提示优化中必不可少的技能。
例如,而不是使用:
“微风,几乎感觉不到但能听到”
你可以缩短它:

低语的微风
更多提示示例:
示例提示:“日落时熙熙攘攘的市场,色彩鲜艳的摊位,热闹的人群。”

通过使用描述性但直接的语言,这个提示描绘了一个没有过度复杂的市场场景。它展示了结构良好的提示如何带来动态且引人入胜的 AI 艺术。
</image_prompting_advice>

如果你决定进行函数调用:

- 调用语法不会显示给用户,但你创建的图像会显示。
- 请将调用放在你的文本响应之后(如果有)。"""

请注意,此提示要求 Claude 在回复用户后绘制图像。这样可以确保它与答案相关。

现在,我们将创建一个辅助函数,该函数接受 Claude 对此系统提示的响应,提取图像提示,并创建图像。

def parse_response_and_gen_image(claude_response):
    if "<function_call>" in claude_response:
        image_prompt = claude_response.split('<function_call>create_image(')[1].split(')</function_call>')[0].replace('"', '')
        base64 = gen_image(image_prompt)
    else:
        image_prompt, base64 = None, None

    function_free_claude_response = re.sub(r'<function_call>.*</function_call>', '', claude_response)
    # return the image_prompt too
    return (function_free_claude_response, image_prompt, base64)

最后,让我们把它们放在一起。

def illustrator_claude(prompt):
    claude_response = CLIENT.messages.create(
        system=image_gen_system_prompt,
        model=MODEL_NAME,
        max_tokens=1024,
        messages=[
          {"role": "user", "content": prompt}
        ],
    ).content[0].text
    return parse_response_and_gen_image(claude_response)

现在我们可以对几个不同的提示调用此函数,并观察结果!

function_free_response_dino, image_prompt_dino, b64_dino = illustrator_claude(
    "白垩纪时期何时以及如何结束?")
print(function_free_response_dino)
白垩纪时期大约始于 1.45 亿年前,在大约 6600 万年前突然结束。白垩纪时期的结束也标志着中生代的结束以及恐龙(除了鸟类)的灭绝。

白垩纪时期被认为是由一次巨大的小行星撞击事件造成的。最广泛接受的理论是,一颗大约 6 英里(10 公里)宽的小行星撞击了现在的墨西哥尤卡坦半岛。撞击地点被称为奇克苏鲁伯陨石坑。

小行星撞击可能导致了广泛的破坏,包括:

1. 由于撞击产生的热量导致全球性野火。
2. 由于撞击的冲击波导致沿海地区发生海啸。
3. 由于尘埃和烟灰阻挡阳光,导致长时间的黑暗和降温。
4. 光合作用中断,导致食物链崩溃。
5. 大气中蒸发的岩石和海水混合形成酸雨。

这些灾难性事件导致地球上约 75% 的植物和动物物种(包括大多数恐龙)大规模灭绝。撞击理论得到了地质层中铱(一种在地球上稀有但在小行星中含量丰富的元素)高浓度的支持,该地质层标志着白垩纪的结束。
show_image(b64_dino)

png

print(image_prompt_dino)
描绘小行星撞击白垩纪-古近纪灭绝事件的艺术作品,一颗燃烧的小行星划过天空,下方是恐龙的景象
function_free_response_potato, image_prompt_potato, b64_potato = illustrator_claude(
    "我应该做什么晚餐?我这里有一些土豆和茄子。给我你最好的菜肴!")
print(function_free_response_potato)
这里有一个美味又简单的晚餐主意,可以用茄子和土豆:

烤茄子土豆咖喱

配料:

- 2 个中等大小的茄子,切块
- 2 个大土豆,切块
- 1 个洋葱,切碎
- 2 瓣大蒜,切碎
- 1 汤匙姜,磨碎
- 1 罐切块番茄
- 1 罐椰奶
- 2 汤匙咖喱粉
- 1 茶匙孜然
- 盐和胡椒粉适量
- 新鲜香菜装饰

说明:

1. 烤箱预热至 425°F (220°C)。将切块的茄子和土豆与橄榄油、盐和胡椒粉一起搅拌。铺在烤盘上,烤 25-30 分钟,直到变软并略带棕色。 
2. 在一个大锅里,炒香洋葱、大蒜和姜。加入咖喱粉和孜然,翻炒 1 分钟。
3. 倒入切块的番茄和椰奶。煮沸。
4. 将烤好的茄子和土豆加入锅中。慢炖 10 分钟,让风味融合。用盐和胡椒粉调味。
5. 搭配米饭食用,并用新鲜香菜装饰。享用你舒适美味的茄子土豆咖喱吧!



这款丰盛的素食咖喱是利用茄子和土豆的好方法。先烤一下可以增加风味。椰奶使其变得奶油状,香料则赋予它美妙的香气。它健康、令人满意,并且富含植物性营养。如果你尝试了这个食谱,请告诉我!
show_image(b64_potato)

png

print(image_prompt_potato)
烤茄子土豆咖喱在一个碗里,用香菜装饰。色彩鲜艳,冒着诱人的蒸汽,搭配米饭。
function_free_response_einstein, image_prompt_einstein, b64_einstein = illustrator_claude(
    "如果阿尔伯特·爱因斯坦是 90 年代的孩子,他会是什么样子?")
print(function_free_response_einstein)
这是一个有趣的设想!我想象一下爱因斯坦的 90 年代版本可能会是这样的:



当然,很难想象爱因斯坦不是我们从历史上知道的标志性天才,他有着狂野的白发和沉思的表情。但想象他穿越到另一个时代,也许听着垃圾摇滚音乐,玩着电子游戏,并以创纪录的时间解决魔方,这很有趣。

我认为即使在 90 年代,爱因斯坦非凡的智慧和好奇心也会闪耀。他可能仍然在思考宇宙的奥秘,只是他的衣橱里会多一些霓虹灯的风格。这表明,无论我们如何想象他,智慧都超越了任何特定的时代或时尚潮流。爱因斯坦作为历史上最伟大头脑之一的遗产将永存。
show_image(b64_einstein)

png

print(image_prompt_einstein)
阿尔伯特·爱因斯坦作为 90 年代孩子的数字渲染肖像,穿着色彩鲜艳的防风夹克、宽松的牛仔裤和蓬松的定型发型。他面带顽皮的微笑,手里拿着一个魔方。