序文 / イントロダクション#
Cloudflare はサイバー仏教の祖師と言われ、サーバーレスを推進する真の慈善団体です。この言葉は、Workers AI がリリースされた後に再び証明されました。個人が AI アプリケーションを構築し、AI モデルを実行することはこれまでにないほど簡単であり、次に、簡単な例を通じて CF Workers AI を使用した LLM を構築して、開発プロセスがどれほど簡単であるかを確認しましょう🤯
準備 / プレパレーション#
- Cloudflare アカウント
- Python 開発環境
- requests ライブラリのインストールが必要です
- オプションで jsonpath をインストールできます
チュートリアル#
Cloudflare Workers AI API トークンの取得#
他の API と同様に、請求と身元確認のために API トークンを取得する必要があります
Cloudflare コントロールパネルにアクセスし、Cloudflare アカウントにログインした後、サイドバーのAIタブをクリックして Workers AI メイン画面に移動し、次にREST API を使用する -> API トークンを取得するの順に選択します。新しいページに移動し、何も気にせずに一番下までスクロールし、続行して要約を表示をクリックしてトークンを作成し、生成されたトークンをコピーして安全な場所に保存します
注意:生成されたトークンは一度だけ表示され、トークンを保持するとWorkers AIリソースに直接アクセスできるため、安全な場所に保存してください
初級コード#
モデルとトークンの変更#
「Workers AI REST API を使用する」ページに戻り、コードエリアの下部で 3 番目のpythonを選択します。次のようなものになるはずです。
import requests
API_BASE_URL = "https://api.cloudflare.com/client/v4/accounts/{id}/ai/run/"
headers = {"Authorization": "Bearer {API_TOKEN}"}
# 私のアカウントIDは省略していますが、本来は{id}に置き換える必要があります
def run(model, inputs):
input = { "messages": inputs }
response = requests.post(f"{API_BASE_URL}{model}", headers=headers, json=input)
return response.json()
inputs = [
{ "role": "system", "content": "You are a friendly assistan that helps write stories" },
{ "role": "user", "content": "Write a short story about a llama that goes on a journey to find an orange cloud "}
];
output = run("@cf/meta/llama-2-7b-chat-int8", inputs)
print(output)
コードをコピーして、準備した Python 環境を開き、コードを貼り付けます。次に、モデルをより中国のユーザーに適した qwen1.5-7b-chat-awq に変更します。コード内の以下の部分を見つけます。
output = run("@cf/meta/llama-2-7b-chat-int8", inputs)
これを@cf/qwen/qwen1.5-7b-chat-awq
に変更します。次に、以下の部分を見つけます。
headers = {"Authorization": "Bearer {API_TOKEN}"}
先ほど生成した API トークンで{API_TOKEN}
を置き換えます。これでプログラムを実行してみましょう。すべてが正常に動作していれば、プログラムは正常に実行され、対応する結果が返されるはずです。
Prompt の変更#
次に、システムのプロンプトと質問を変更する必要があります。プログラム内で次の部分を見つけます。
inputs = [
{ "role": "system", "content": "You are a friendly assistan that helps write stories" },
{ "role": "user", "content": "Write a short story about a llama that goes on a journey to find an orange cloud "}
];
"role": "system", "content":
の後ろの内容は LLM のシステムプロンプトに対応しています。これを "あなたは物語を書くのを助けるフレンドリーなアシスタントです" に変更します(必要に応じて自由に変更してください)。そして、"role": "user", "content":
の後ろは AI に対して行う質問です。ここでは、 "こんにちは、自己紹介をお願いします" などに変更できます。
これで、基本的な例の作成は完了です。とても簡単ですね。次に、ユーザー入力と出力の最適化を実装します。
上級コード#
ユーザー入力の実装#
非常に簡単な部分で、inputs を少し変更するだけです。結果を直接表示します。
userinput = input("質問を入力してください:")
inputs = [
{ "role": "system", "content": "あなたは物語を書くのを助けるフレンドリーなアシスタントです" },
{ "role": "user", "content": userinput}
];
output = run("@cf/qwen/qwen1.5-7b-chat-awq", inputs)
ここでは、固定されたプロンプトをユーザーの入力である userinput に変更し、ユーザー入力の機能を実現しています。
出力の最適化#
注意して見ると、現在の出力は非常に見栄えが悪いことに気付くでしょう。裸の json が返されています。例えば:
{'result': {'response': 'こんにちは!お手伝いできて嬉しいです。何か質問やお手伝いがありますか?'}, 'success': True, 'errors': [], 'messages': []}
実際に必要なのはresponse
の内容だけです。response を剥がすために、jsonpath を使用する必要があります。output の下に以下の行を追加します。
final = jsonpath(output,"$..response")[0]
そして、print(output)
をprint(final)
に変更します。
これにより、出力は純粋な "こんにちは!お手伝いできて嬉しいです。何か質問やお手伝いがありますか?" になります。
さらに進む?#
実際、ここまでの段階で、一連の対話 AI としては非常に優れていますが、さらに進むこともできます。多段階の対話の機能を実現する方法については、コードを参照してください。ここでは詳しく説明しません。
最終コード#
import requests
from jsonpath import jsonpath
info = ["あなたは物語を書くのを助けるフレンドリーなアシスタントです。これまでのすべてのチャットは次のとおりです:"]
API_BASE_URL = "https://api.cloudflare.com/client/v4/accounts/{id}/ai/run/"
# ユーザーIDに置き換えてください
headers = {"Authorization": "Bearer {API_TOKEN}"}
# API_TOKENに置き換えてください
def run(model, inputs):
input = { "messages": inputs }
response = requests.post(f"{API_BASE_URL}{model}", headers=headers, json=input)
return response.json()
userinput = input("質問を入力してください:")
waittoaddU = "ユーザーの質問:" + userinput
info.append(waittoaddU)
inputs = [
{ "role": "system", "content": "あなたは物語を書くのを助けるフレンドリーなアシスタントです" },
{ "role": "user", "content": userinput}
];
output = run("@cf/qwen/qwen1.5-7b-chat-awq", inputs)
final = jsonpath(output,"$..response")[0]
waittoaddA = "システムの回答:" + final
info.append(waittoaddA)
print(final)
while True:
userinput = input("質問を入力してください:")
if userinput == "EXIT":
break
inputs = [
{ "role": "system", "content": "\n".join(info) },
{ "role": "user", "content": userinput}
];
output = run("@cf/qwen/qwen1.5-7b-chat-awq", inputs)
waittoaddU = "ユーザーの質問:" + userinput
info.append(waittoaddU)
final = jsonpath(output,"$..response")[0]
waittoaddA = "システムの回答:" + final
info.append(waittoaddA)
print(final)
お読みいただきありがとうございます