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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takaaki Suzuki
November 29, 2024
Programming
400
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Discord Bot with AI -for English learners-
KK Talking が運営する Discord サーバーである「KK LOUNGE」に導入した「AI による英文自動添削 Bot」を紹介しました。
Takaaki Suzuki
November 29, 2024
More Decks by Takaaki Suzuki
See All by Takaaki Suzuki
今日からできる!簡単 .NET 高速化 Tips -2024 edition-
xin9le
9
11k
.NET Night Party@品川
xin9le
1
500
Other Decks in Programming
See All in Programming
Claspは野良GASの夢をみるか
takter00
0
180
OSもどきOS
arkw
0
530
LLM Plugin for Node-REDの利用方法と開発について
404background
0
170
さぁV100、メモリをお食べ・・・
nilpe
0
140
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
240
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
160
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
450
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
230
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
Featured
See All Featured
Everyday Curiosity
cassininazir
0
230
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
Design in an AI World
tapps
1
240
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
Deep Space Network (abreviated)
tonyrice
0
170
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Ruling the World: When Life Gets Gamed
codingconduct
0
250
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
Being A Developer After 40
akosma
91
590k
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