banner
VrianCao

VrianCao's Blog

Hi~ Welcome to the blockchain version of VrianCao's blog site, welcome to Web3! All articles and resources here are stored on the blockchain and verified by signatures; this is the future of blogging!

CF Workers AI のシンプルな例

序文 / イントロダクション#

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)

お読みいただきありがとうございます

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。