作り方
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さん!ねえ!たかのさん!ねえ!ねえ!ねえってば!
おわり
Takanoさんを励ましてスコア4を目指してください。

