Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
300
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
9
10k
.NET Night Party@品川
xin9le
1
450
Other Decks in Programming
See All in Programming
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
250
TestingOsaka6_Ozono
o3
0
170
Graviton と Nitro と私
maroon1st
0
130
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
440
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
0
260
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
3
1.1k
tparseでgo testの出力を見やすくする
utgwkk
2
270
ゆくKotlin くるRust
exoego
1
160
Deno Tunnel を使ってみた話
kamekyame
0
230
GoLab2025 Recap
kuro_kurorrr
0
780
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
140
Grafana:建立系統全知視角的捷徑
blueswen
0
180
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
110
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
580
The Curse of the Amulet
leimatthew05
0
4.7k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
190
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
60
37k
Accessibility Awareness
sabderemane
0
24
The Limits of Empathy - UXLibs8
cassininazir
1
190
Context Engineering - Making Every Token Count
addyosmani
9
550
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
30
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
72
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
170
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
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