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
330
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
11k
.NET Night Party@品川
xin9le
1
470
Other Decks in Programming
See All in Programming
atmaCup #23でAIコーディングを活用した話
ml_bear
4
730
受け入れテスト駆動開発(ATDD)×AI駆動開発 AI時代のATDDの取り組み方を考える
kztakasaki
2
520
Python’s True Superpower
hynek
0
200
NOT A HOTEL - 建築や人と融合し、自由を創り出すソフトウェア
not_a_hokuts
2
550
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
350
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
140
15年目のiOSアプリを1から作り直す技術
teakun
1
600
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.4k
encoding/json/v2のUnmarshalはこう変わった:内部実装で見る設計改善
kurakura0916
0
290
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
120
Geminiの機能を調べ尽くしてみた
naruyoshimi
0
190
Rubyと楽しいをつくる / Creating joy with Ruby
chobishiba
0
200
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
210
Embracing the Ebb and Flow
colly
88
5k
Into the Great Unknown - MozCon
thekraken
40
2.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Amusing Abliteration
ianozsvald
0
120
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
310
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
94
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
480
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
140
GraphQLの誤解/rethinking-graphql
sonatard
75
11k
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