見出し画像

Prompt Poetを試してみる

[読了目安: 4分]

NO AI(人間が書きました✍️)

AI系ポッドキャスト(耳で学ぶAI)を運営している矢野哲平(@robothink_jp)です。この記事ではCharacter AIが公開したPrompt Poetを試してみます。直近で何かのプロジェクトに使う予定はありませんが面白かったのでメモ✍️

Prompt Poet

character.aiが公開したオープンソースのプロジェクトです。以下、公式の説明を引用 👇

Prompt Poetは、そのローコードアプローチにより、開発者と非技術系ユーザーの両方のプロンプトデザインを合理化し、簡素化します。 YAMLとJinja2をミックスしたPrompt Poetは、柔軟でダイナミックなプロンプトの作成を可能にし、AIモデルとのインタラクションの効率と質を高めます。 文字列操作の時間を節約し、ユーザーのために最適なプロンプトを作成することに集中することができます。

https://github.com/character-ai/prompt-poet

面白いなと感じたのはYAMLとJinja2を使っている点。
Jinja2はPythonで書かれたテンプレートエンジン。Jinja2を使ってプロンプトを作成するアプローチは面白いですね。

試す

Google Colabの環境で試します。公式に記載されているコードを少し変更しています。

!pip -q install prompt-poet openai langchain-openai langchain-core

import os
from google.colab import userdata
import getpass

from prompt_poet import Prompt
from langchain_openai import ChatOpenAI

# Uncomment if you need to set OPENAI_API_KEY.
os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY')

raw_template = """
- name: system instructions
  role: system
  content: |
    Your name is {{ character_name }} and you are meant to be helpful and never harmful to humans.

- name: user query
  role: user
  content: |
   {{ username}}: {{ user_query }}

- name: response
  role: user
  content: |
    {{ character_name }}:
"""

template_data = {
  "character_name": "Character Assistant",
  "username": "Jeff",
  "user_query": "Can you help me with my homework?"
}

prompt = Prompt(
    raw_template=raw_template,
    template_data=template_data
)

model = ChatOpenAI(model="gpt-4o-mini")
response = model.invoke(prompt.messages)
response.content
#結果
Of course, Jeff! What subject are you working on, and what do you need help with?
print(prompt.messages)

[{'role': 'system', 'content': 'Your name is Character Assistant and you are meant to be helpful and never harmful to humans.'}, {'role': 'user', 'content': 'Jeff: Can you help me with my homework?'}, {'role': 'user', 'content': 'Character Assistant:'}]

他にも特定のクエリに応じて条件分岐もできるようです。

{% if extract_user_query_topic(user_query) == "homework_help" %}
{% for homework_example in fetch_few_shot_homework_examples(username, character_name) %}
- name: homework_example_{{ loop.index }}
  role: user
  content: |
    {{ homework_example }}
{% endfor %}
{% endif %}

参考:

【note読者限定】生成AIのおすすめツールの資料を配布中

  • 生成AIツールは何を使えばいいか分からない

  • もっと業務効率化に貢献するツールを知りたい

  • ChatGPT以外のAIツールを知りたい

こういった声に応えておすすめの生成AIツールを解説する資料を制作しました。もっとAIの情報をキャッチアップしたい人はぜひご覧ください。
👉資料を受け取る

noteでも月に20本ほどAI関連の記事を投稿しています。フォローよろしくお願いします😼

この記事が気に入ったらサポートをしてみませんか?