Skip to content

Commit ac302c9

Browse files
committed
AIがドキュメントのdiffとして回答を出力する
1 parent 8eea9b5 commit ac302c9

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

app/actions/chatActions.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ export async function askAI(params: ChatParams): Promise<ChatResult> {
6666
`質問に答える際には、ユーザーが閲覧しているセクションの内容を特に考慮してください。`
6767
);
6868
prompt.push(``);
69+
prompt.push(
70+
`質問への回答はユーザー向けのメッセージに加えて、ドキュメント自体を改訂するという形でも可能です。`
71+
);
72+
prompt.push(
73+
`質問内容とドキュメントの内容の関連性が深く、比較的長めの解説をしたい場合、またはドキュメントへの補足がしたい場合は、そちらの形式での回答を検討してください。`
74+
);
75+
prompt.push(``);
6976
prompt.push(`# ドキュメント`);
7077
prompt.push(``);
7178
for (const section of sectionContent) {
@@ -157,6 +164,27 @@ export async function askAI(params: ChatParams): Promise<ChatResult> {
157164
prompt.push(
158165
" - 水平線(---)はシステムが区切りとして認識するので、ユーザーへの回答中に水平線を使用することはできません。"
159166
);
167+
prompt.push(
168+
"- ユーザーへのメッセージの最後の行の次には水平線 --- を出力してください。"
169+
);
170+
prompt.push(
171+
"- それ以降の行に、ドキュメントの一部を改訂したい場合はその差分を"
172+
);
173+
prompt.push("<<<<<<< SEARCH");
174+
prompt.push("修正したい元の文章の塊(一字一句違わずに)");
175+
prompt.push("=======");
176+
prompt.push("修正後の新しい文章の塊");
177+
prompt.push(">>>>>>> REPLACE");
178+
prompt.push("の形式で出力してください。");
179+
prompt.push(
180+
" - 複数箇所改訂したい場合は上の形式の出力を複数回繰り返してください。"
181+
);
182+
prompt.push(
183+
" - ドキュメントにテキストを追加したい場合は追加したい箇所の前後のテキストを含めて出力してください。"
184+
);
185+
prompt.push(
186+
" - セクションid、セクション見出し、およびコードブロックの内側を編集することはできません。それ以外の文章のみを編集してください。"
187+
);
160188
console.log(prompt);
161189

162190
try {
@@ -170,6 +198,14 @@ export async function askAI(params: ChatParams): Promise<ChatResult> {
170198
targetSectionId = introSectionId(path);
171199
}
172200
const responseMessage = text.split(/-{3,}/)[1].trim();
201+
const diffMatch = text
202+
.split(/-{3,}/)[2]
203+
.matchAll(
204+
/<{3,}\s*SEARCH\n([\s\S]*?)\n={3,}\n([\s\S]*?)\n>{3,}\s*REPLACE/g
205+
);
206+
const diff: { search: string; replace: string }[] = diffMatch
207+
? Array.from(diffMatch, (m) => ({ search: m[1], replace: m[2] }))
208+
: [];
173209
const newChat = await addChat(path, targetSectionId, [
174210
{ role: "user", content: userQuestion },
175211
{ role: "ai", content: responseMessage },

0 commit comments

Comments
 (0)