Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Discord Bot with AI -for English learners-
Search
Takaaki Suzuki
November 29, 2024
Programming
1
210
Discord Bot with AI -for English learners-
KK Talking が運営する Discord サーバーである「KK LOUNGE」に導入した「AI による英文自動添削 Bot」を紹介しました。
Takaaki Suzuki
November 29, 2024
Tweet
Share
More Decks by Takaaki Suzuki
See All by Takaaki Suzuki
今日からできる!簡単 .NET 高速化 Tips -2024 edition-
xin9le
8
9.1k
.NET Night Party@品川
xin9le
1
420
Other Decks in Programming
See All in Programming
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
540
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
100
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
160
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
240
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
2
270
NPOでのDevinの活用
codeforeveryone
0
260
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
160
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
150
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
320
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
110
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
320
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.7k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Thoughts on Productivity
jonyablonski
69
4.7k
Why You Should Never Use an ORM
jnunemaker
PRO
57
9.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Visualization
eitanlees
146
16k
A Modern Web Designer's Workflow
chriscoyier
694
190k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
What's in a price? How to price your products and services
michaelherold
246
12k
Transcript
dotnet new 2024/11/29 (金) 鈴木 孝明 Discord Bot with AI
- for English learners -
Name 鈴木 孝明 a.k.a @xin9le Work Application Engineer Award Microsoft
MVP (2012/7 -) Web Site https://about.xin9le.net About
.NET 9 Contributor https://github.com/dotnet/runtime/pull/96574
英語系インフルエンサー SNS 総フォロワー数 : 約 65 万人 トロントに移住した元同僚の活動名義 KK LOUNGE
英語学習者のための Discord コミュニティ 彼の情熱だけで運営してて、完全無料 KK Talking
英語で書く日記 毎日お題が出る お題に沿った短文日記を書く練習 添削して欲しい 英検 1 級 / ILETS 8.0+
な人でも流石に都度添削してあげられない フィードバックを自動化したい Daily Journal
百聞は一見に如かず Demo
None
つまり今日の本題 Key points
ドキュメントに書いてないことが多い GitHub Copilot や Perplexity AI などに聞きながら実装しよう 知見がネット上に散らばってるにときは AI の補助が特に役立つ
やりたいことは大抵できる Discord 内にある情報のほとんどにアクセスできるし、干渉もできる 概ね「作り方がわからない」だけなので、簡単に諦めず AI に聞こう Discord.NET は初見殺し
メッセージ本文の制限は 2000 文字 Bot だからと言って通常ユーザーと制限は変わらない 添削結果は添削対象の文章より長くなるので簡単に抵触する Embed に分割して回避 Embed の文字数制限
: 4096 文字/embed 本文とは切り離されて計算される Discord の文字数制限を突破する 4096 4096 2000
プロンプトで制御 最もシニカルで、最もプリミティブで、そして最もレガシーな方法 AI の「お気持ち」を信じるしかなく、非常に不安定な挙動をする ChatGPT の出力を操る (Lv.1) あなたは英語と日本語が堪能な翻訳家です。 下記の条件に従って、与えられた英文を添削してください。 #
出力フォーマット { "comment": "<ここに英文を読んだ感想を出力>", "revised": "<ここに添削結果を出力>", "feedbacks": [ "<ここに添削内容を箇条書きで出力>" ] } こちらが添削結果です。 ```json { "comment": "", "revised": "", "feedbacks": [ "" ] } ``` 何か追加の情報は必要ですか? Parse できんやろ…
JSON Mode の利用 JSON 形式で返答することを強制できる Schema の指定はプロンプトで頑張る ChatGPT の出力を操る (Lv.2)
あなたは英語と日本語が堪能な翻訳家です。 下記の条件に従って、与えられた英文を添削してください。 # 出力フォーマット { "comment": "<ここに英文を読んだ感想を出力>", "revised": "<ここに添削結果を出力>", "feedbacks": [ "<ここに添削内容を箇条書きで出力>" ] } { "comment": "", "revised": "", "feedback": "" } お願い Schema 守って… "response_format": { "type": "json_object" }
Structured Outputs の利用 指定の JSON Schema を守ることを保証 確実に Parse できるので安定性爆上げ
ChatGPT の出力を操る (Lv.3) あなたは英語と日本語が堪能な翻訳家です。 下記の条件に従って、与えられた英文を添削してください。 # 出力方法 - 英作文を読んだ感想を `comment` プロパティに出力 - 添削結果を `revised` プロパティに出力 - 添削内容を `feedbacks` プロパティに箇条書きで出力 { "comment": "", "revised": "", "feedbacks": [ "" ] } "response_format": { "type": "json_schema", "json_schema": "..." } 現代はこれ一択
C# の型情報から JSON Schema を生成 JsonSchemaExporter JsonSchemaExporter.GetJsonSchemaAsNode ( JsonSerializerOptions.Default, typeof(Person),
exporterOptions: new() { TreatNullObliviousAsNonNullable = true, } ) .ToJsonString(); .NET 9+ public class Person { public required string Name { get; init; } public DateOnly? Birthday { get; init; } } { "type": "object", "properties": { "Name": { "type": "string" }, "Birthday": { "type": ["string", "null"], "format": "date" } }, "required": ["Name"] }
Content Filter を考慮 有害なメッセージと判断された場合への対応は必須 HTTP Status Code 400 や例外を捕捉して適切に処理すべし ユーザー入力は未知
Enjoy AI programming using C#!! Thank you