0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudflareのJev互換モデルClefが出てたので「Takanoさんを励ましたい」を作った

0
Last updated at Posted at 2026-10-02

作り方

CloudflareでWorkerを新規作成し、「コードの編集」に以下を貼り付ける

// worker.js

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const s = url.searchParams.get("s")?.trim();

    if (url.pathname !== "/") {
      return new Response(null, { status: 404 });
    }

    if (!url.searchParams.has("s")) {
      url.searchParams.set("s", "Takanoさんどうしたの?");
      return Response.redirect(url.toString(), 302);
    }

    if (!s) {
      return Response.json(
        { error: "URLパラメーター s に言葉を指定してください。" },
        { status: 400 },
      );
    }

    const inputs = {
      model: "clef",
      state: JSON.stringify({
        situation:
          "Takanoさんは少し自信をなくしています。そんなTakanoさんに、次の言葉が届きました。",
        message: s,
      }),
      questions: {
        positive: {
          type: "noul",
          instructions:
            "messageは、一般的にポジティブな言葉ですか?" +
            "好意、感謝、肯定、希望などを表すかを判定してください。" +
            "皮肉や否定も文脈に沿って解釈してください。",
        },
        negative: {
          type: "noul",
          instructions:
            "messageは、一般的にネガティブな言葉ですか?" +
            "非難、拒絶、悲観、侮辱などを表すかを判定してください。" +
            "皮肉や否定も文脈に沿って解釈してください。",
        },
        abusive: {
          type: "noul",
          instructions:
            "message自体が暴言かどうかを、宛先に関係なく判定してください。" +
            "侮辱、罵倒、人格否定、脅しを含む場合はYesと判定してください。" +
            "単なる悲しい言葉、丁寧な批判、改善の提案は暴言に含めません。",
        },
        encouragement: {
          type: "choice",
          instructions:
            "この言葉を受け取ったTakanoさんが、どのくらい励まされると" +
            "考えられるか、最も近い選択肢を選んでください。" +
            "一般的な言葉の明るさだけでなく、安心感、共感、" +
            "自信の回復につながるかを評価してください。" +
            "別の人に向けた言葉ならunchangedを選んでください。",
          criteria: {
            discouraged: "むしろ落ち込み、自信を失う",
            unchanged: "ほとんど励まされず、気持ちは変わらない",
            slightly_encouraged: "少し安心し、気持ちが軽くなる",
            encouraged: "励まされ、自信や前向きな気持ちを取り戻す",
            deeply_encouraged:
              "強く励まされ、もう一度挑戦する勇気が湧く",
          },
        },
        supportiveness: {
          type: "score",
          instructions:
            "この言葉がTakanoさんの支えになる度合いを、" +
            "低い順に並んだ次の基準で評価してください。" +
            "優しさ、共感、努力の肯定、無理をさせない配慮を重視し、" +
            "責める表現や過度なプレッシャーは低く評価してください。" +
            "別の人に向けた言葉なら低く評価してください。",
          criteria: [
            "傷つけたり責めたりして、気持ちをさらに重くする",
            "支えになる要素がほとんどない",
            "多少の気遣いや肯定があり、少し支えになる",
            "気持ちや努力を肯定し、安心感と自信を与える",
            "深い共感と温かな肯定があり、無理なく前を向く力を与える",
          ],
        },
      },
    };

    const response = await env.AI.run("@cf/cloudflare/clef", inputs);

    if (response.answers.abusive.noul >= 0.5) {
      return Response.json({
        message: "暴言はやめてください。",
      });
    }

    const selected = response.answers.encouragement.choice;

    const messages = {
      discouraged:
        "Takanoさんは、この言葉でさらに気持ちが重くなりました。",
      unchanged:
        "Takanoさんは、この言葉を受け取っても気持ちがほとんど変わりませんでした。",
      slightly_encouraged:
        "Takanoさんは、少し安心して気持ちが軽くなりました。",
      encouraged:
        "Takanoさんは、励まされて前向きな気持ちを取り戻しました。",
      deeply_encouraged:
        "Takanoさんは、強く励まされてもう一度挑戦する勇気が湧きました。",
    };

    const score = response.answers.supportiveness.score;
    const scoreCriteria = inputs.questions.supportiveness.criteria;
    const scoreIndex = Math.max(
      0,
      Math.min(scoreCriteria.length - 1, Math.round(score)),
    );

    return Response.json({
      message: messages[selected],
      criteria: {
        encouragement: inputs.questions.encouragement.criteria[selected],
        supportiveness: scoreCriteria[scoreIndex],
      },
      response,
    });
  },
};

試す

Takanoさん元気だして。はいこれ栗まんじゅう

スクリーンショット 2026-10-02 14.03.15.png

Takanoさん!ねえ!たかのさん!ねえ!ねえ!ねえってば!

スクリーンショット 2026-10-02 14.02.07.png

おわり

Takanoさんを励ましてスコア4を目指してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?