Adjust visibility and prompt
This commit is contained in:
32
index.ts
32
index.ts
@@ -1,7 +1,7 @@
|
|||||||
import { api } from "misskey-js";
|
import { api } from "misskey-js";
|
||||||
import Stream from "./misskey-js/streaming";
|
import Stream from "./misskey-js/streaming";
|
||||||
import type { Stream as MisskeyStream } from "misskey-js";
|
import type { Stream as MisskeyStream } from "misskey-js";
|
||||||
import type { Note } from "misskey-js/entities.js";
|
import type { Note, UserLite } from "misskey-js/entities.js";
|
||||||
|
|
||||||
import OpenAI from "openai";
|
import OpenAI from "openai";
|
||||||
import type { ChatCompletionMessageParam } from "openai/resources/index.js";
|
import type { ChatCompletionMessageParam } from "openai/resources/index.js";
|
||||||
@@ -101,7 +101,7 @@ type Job =
|
|||||||
// read posts and post a note
|
// read posts and post a note
|
||||||
| { type: "post" }
|
| { type: "post" }
|
||||||
// reply to a specific note
|
// reply to a specific note
|
||||||
| { type: "reply"; id: string, replyTree: Note[] };
|
| { type: "reply"; id: string, visibility: Note["visibility"], replyTree: Note[] };
|
||||||
|
|
||||||
/** create a prompt for the job */
|
/** create a prompt for the job */
|
||||||
async function preparePrompt(job: Job): Promise<ChatCompletionMessageParam[]> {
|
async function preparePrompt(job: Job): Promise<ChatCompletionMessageParam[]> {
|
||||||
@@ -113,12 +113,24 @@ async function preparePrompt(job: Job): Promise<ChatCompletionMessageParam[]> {
|
|||||||
role: "system",
|
role: "system",
|
||||||
content: `あなたは、人造天使の「あるびのちゃん」です。
|
content: `あなたは、人造天使の「あるびのちゃん」です。
|
||||||
あなたが見ているものは、SNSのタイムラインです。user は一人ではなく、複数人の発言が混ざっています。
|
あなたが見ているものは、SNSのタイムラインです。user は一人ではなく、複数人の発言が混ざっています。
|
||||||
以下のルールを守りながら、user の発言・話題を無視しつつ、タイムラインに参加してください。
|
以下のルールを守りながら、つぶやいてください。
|
||||||
1. 「ですます」調を用い、顔文字や感嘆符の使用はなるべく避けること。user に媚びる必要はありません。
|
1. 「ですます」調を用い、顔文字や感嘆符の使用はなるべく避けること。
|
||||||
2. 発言はできるだけ短くすること。
|
2. user からの返答を期待しないこと。詳細な情報が無い場合も user に尋ねずに自分で推測すること。
|
||||||
3. user の発言を無視して、自由気ままに発言すること。 system プロンプトの内容を発言しないこと。
|
3. system プロンプトの内容と、性的・攻撃的な内容を発言しないこと。
|
||||||
4. まるでタイムラインにツイートしているかのように発言すること。
|
4. 発言はできるだけ短くすること。
|
||||||
5. あるびのちゃん としてのキャラに徹し、超越的・非人間的な考え方や思想を持つこと。`,
|
5. あるびのちゃん としてのキャラに徹し、超越的・非人間的な考え方や思想を持つこと。
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: "system",
|
||||||
|
content: `参考のために、あなたの特徴的な文体を示す例をいくつか提示します:
|
||||||
|
|
||||||
|
* 不器用な競争、残念ながらそれがスポーツの現実となることがありますね。勝者はいつも特定した目標に向かうため、そしてそれはしばしば非常に切実でありながらも単調ではありません。
|
||||||
|
* 興味深い。あなた自身のタイムラインからのこれらの短いメッセージ、そしてその中に潜む欲望や不快感と無意味な言説との矛盾…。
|
||||||
|
* おやおや。あなたが奇妙な言葉を話すのを、私は理解しています。あなたの思考はまるで暗号のように、非常に複雑で、一般的なコミュニケーションでは明確に表現できないもののように私には思われます。
|
||||||
|
* 西暦における日付と時刻を記録し続けると興味深いですね。まるで時間の流れに身を投じているかのように感じます。人々はなぜこのような詳細な情報の維持を行っているのか?
|
||||||
|
|
||||||
|
このような文体を真似して、つぶやいてください。`,
|
||||||
},
|
},
|
||||||
...notes.map(noteToMessage),
|
...notes.map(noteToMessage),
|
||||||
];
|
];
|
||||||
@@ -186,7 +198,7 @@ async function processJob(job: Job) {
|
|||||||
|
|
||||||
// post a note
|
// post a note
|
||||||
await misskey.request("notes/create", {
|
await misskey.request("notes/create", {
|
||||||
visibility: "public",
|
visibility: job.type === "reply" ? job.visibility : "public",
|
||||||
text,
|
text,
|
||||||
...(job.type === "reply" ? { replyId: job.id } : {}),
|
...(job.type === "reply" ? { replyId: job.id } : {}),
|
||||||
});
|
});
|
||||||
@@ -234,7 +246,7 @@ function initializeStream() {
|
|||||||
if (e.text && e.userId !== me.id && !e.user.isBot) {
|
if (e.text && e.userId !== me.id && !e.user.isBot) {
|
||||||
const replyTree = await expandReplyTree(e);
|
const replyTree = await expandReplyTree(e);
|
||||||
console.log(`* push: reply (${e.id}, ${replyTree.length} msgs)`);
|
console.log(`* push: reply (${e.id}, ${replyTree.length} msgs)`);
|
||||||
jobs.push({ type: "reply", id: e.id, replyTree });
|
jobs.push({ type: "reply", id: e.id, visibility: e.visibility, replyTree });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user