- หาก Claude Code พูดซ้ำวลีอย่าง “honest take” หรือ “load-bearing seam” อยู่บ่อย ๆ ก็สามารถใช้ ฮุก MessageDisplay เพื่อแทนที่เป็นสำนวนอื่นก่อนจะแสดงบนหน้าจอได้
- สคริปต์ Python จะอ่านค่า
delta จาก JSON ใน standard input แล้วทำการ แทนที่แบบไม่แยกพิมพ์เล็กพิมพ์ใหญ่ จากนั้นส่งคืน displayContent ที่แก้ไขแล้วในรูปแบบ JSON
- ในตัวอย่างมีการเปลี่ยน
seam เป็น whatchamacallit, you're absolutely right เป็น I'm a complete clown, honest take เป็น spicy doodad และ load-bearing เป็น cooked
- ต้องบันทึกสคริปต์ไว้ที่
~/.claude/hooks/wordswap.sh และให้ สิทธิ์รันไฟล์ จากนั้นลงทะเบียนเป็น command hook ใน hooks.MessageDisplay ของ ~/.claude/settings.json
- ฮุกจะถูก โหลดตอนเริ่ม Claude Code ดังนั้นต้องเปิดเซสชันใหม่จึงจะมีผล และสามารถเปลี่ยนรายการคำที่ใช้แทนได้อย่างอิสระตามต้องการ
สคริปต์สำหรับเปลี่ยนข้อความเอาต์พุต
- ใช้ฮุก
MessageDisplay เพื่อแก้ไขข้อความที่ Claude Code จะแสดงบนหน้าจอ
wordswap.sh เขียนด้วย Python โดยจะอ่าน JSON จาก standard input แล้วดึงสตริงจากฟิลด์ delta
- แต่ละวลีต้นฉบับจะถูกใส่ขอบเขต
\b ไว้ด้านหน้าและด้านหลัง จากนั้น escape ด้วย re.escape() และใช้ re.IGNORECASE เพื่อ แทนที่โดยไม่สนตัวพิมพ์เล็กพิมพ์ใหญ่
- ผลลัพธ์หลังประมวลผลจะถูกส่งออกเป็น JSON ในโครงสร้างดังนี้
hookSpecificOutput.hookEventName: MessageDisplay
hookSpecificOutput.displayContent: ข้อความที่ถูกแทนที่แล้ว
- กฎการแทนที่ในตัวอย่างมีดังนี้
seam → whatchamacallit
you're absolutely right → I'm a complete clown
honest take → spicy doodad
load-bearing → cooked
การติดตั้งและเปิดใช้งาน
- บันทึกสคริปต์ไว้ที่
~/.claude/hooks/wordswap.sh
- รัน
chmod +x ~/.claude/hooks/wordswap.sh เพื่อให้ สิทธิ์รันไฟล์
- ลงทะเบียนในบล็อก
hooks ของ ~/.claude/settings.json ตามนี้
{
"hooks": {
"MessageDisplay": [
{
"hooks": [
{
"type": "command",
"command": "$HOME/.claude/hooks/wordswap.sh"
}
]
}
]
}
}
- เนื่องจากฮุกจะถูกโหลดเมื่อเริ่ม Claude Code จึงต้องเริ่ม เซสชันใหม่ หลังตั้งค่าแล้วจึงจะมีผล
- หากแก้ไขรายการ
replacements ก็สามารถเปลี่ยนไปใช้วลีที่มีประโยชน์หรือขำ ๆ มากกว่าตัวอย่างได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เวลาที่โค้ดกับ Claude แล้วเจอสำนวนแบบ สไตล์ Claude ทั่ว ๆ ไปก็ไม่ได้รบกวนใจ แต่ถ้าเห็นสำนวนเดียวกันในงานเขียนร้อยแก้วอย่างบล็อกหรืออีเมลจะรู้สึกขัดตากว่ามาก
ตอนที่รู้อยู่แล้วว่ากำลังคุยกับ LLM ก็เป็นปฏิกิริยาที่คาดเดาได้ แต่จังหวะที่รู้ว่างานเขียนซึ่งคาดว่าเป็นฝีมือคนกลับเป็นผลผลิตจาก LLM นั้นค่อนข้างน่าอึดอัด
สุดท้ายมีคนบอกว่า “พูดเหมือน Claude” เลยเลี่ยงไปเลย ซึ่งจุดตัดระหว่างภาษาและบรรทัดฐานทางสังคมนั้นน่าสนใจ
แต่ถ้าเจอร่องรอย AI ชัด ๆ ในงานเขียนที่ควรเป็นความคิดริเริ่มของใครสักคน ก็ผิดหวังอย่างมาก และถึงขั้นรู้สึกว่าไม่เคารพผู้อ่านด้วยซ้ำ
ทุกครั้งที่เจอนิสัยการใช้ภาษาแบบนี้ในบล็อกสุ่ม ๆ ก็รู้สึกรำคาญ และเกิดความขุ่นเคืองที่ภาษาซึ่งมนุษย์คิดค้นขึ้น ตอนนี้กำลังถูกหุ่นยนต์ฉกไปใช้
กำลังจดบันทึกคำศัพท์ที่ Claude เริ่มยึดติดมากขึ้นเรื่อย ๆ อยู่ เช่น "projection" ที่เรียกโครงสร้างข้อมูลหนึ่งว่าเป็นภาพฉายของอีกโครงสร้างหนึ่ง, "strand" ที่หมายถึงข้อมูลที่โดดเดี่ยวหรือหยุดนิ่ง, "load-bearing", "frontier" ที่หมายถึงใบของต้นไม้, "quiescence" ที่หมายถึงการรอให้อัลกอริทึมเสถียร, "honest", "residuals" ที่หมายถึงข้อมูลที่ยังไม่ได้ประมวลผล, "rescission" ที่ทำให้ข้อเสนอที่ถอนกลับไปแล้วกลายเป็นคำนามโดยไม่จำเป็น, "supersession" ที่หมายถึงสิ่งที่ถูกแทนที่ เป็นต้น
อาจมีอิทธิพลจากการเลียนแบบคำศัพท์แปลก ๆ รอบ ๆ โค้ดของฉันด้วย ครั้งที่น่าประทับใจที่สุดคือผมเปรียบว่าการแก้อาการแทนสาเหตุรากของปัญหาเป็นเหมือนการเล่น ตีตัวตุ่น แล้วไม่กี่ชั่วโมงต่อมา มันก็เริ่มเรียกบั๊กใหม่ ๆ ต่อเนื่องว่า "moles" เช่น “เจอตัวตุ่นหมายเลข 2 ใน CI”
ต้องคอยบอกเป็นระยะว่า “พูดให้เป็นมืออาชีพและใช้ประโยคสมบูรณ์” ถึงจะพอเข้าใจได้ และเมื่อนำผลลัพธ์นั้นไปวางในอีกเซสชัน แม้แต่ Claude เองก็ยังไม่เข้าใจสิ่งที่ Claude สำหรับงานยืนยันตัวตนเว็บเขียนไว้
ให้ความรู้สึกเหมือนตามใช้คำฮิตโดยไม่เข้าใจบริบท ทำให้ความน่าเชื่อถือลดลง
การที่แต่ละคนมีสไตล์การเขียนและสำนวนที่ชอบเฉพาะตัวเป็นเรื่องที่มีมานานแล้ว และโดยทั่วไปก็ไม่ใช่ปัญหาใหญ่อะไร
แต่เมื่อรสนิยมที่เคยปรากฏจากคนคนหนึ่งในระดับสูงสุดวันละ 5,000 คำ กลายเป็นอคติของโมเดลเดียวและถูกขยายเป็น โทเค็นที่สร้างขึ้น 10,000 ล้านโทเค็นต่อวัน นิสัยแบบไหนก็จะเด่นชัดเกินไป
โมเดล Claude ตอนนี้ชอบคำว่า "honest" เป็นพิเศษ จนแต่งเติมการประเมินและเงื่อนไขแทบทุกอย่างว่า "honest" และพอใช้คำว่า "analytical" กับ Gemini 3 Pro ครั้งหนึ่ง หลังจากนั้นคำนี้ก็แทบติดมากับทุกคำตอบ ถ้าเป็น system prompt ก็ยังแก้ได้ แต่ความชอบคำของค่าน้ำหนักโมเดลเองรับมือได้ยาก และน่าจะมีวิธีตรวจจับและป้องกันปรากฏการณ์แบบนี้เชิงสถิติในการฝึกหรือการฝึกต่อยอดตามมา
แน่นอนว่าประโยคนี้ตั้งใจล้อเลียน
เช่น เมื่อถูกถามว่า “กินคุกกี้ไปหรือเปล่า?” ก็ตอบว่า “เป็นเรื่องถูกต้องอย่างยิ่งที่คุณพ่อสงสัยครับ ความจริงคือผมกินไปทั้งหมด แต่ประเด็นหลักไม่ได้อยู่ตรงนั้น ตามการประเมินอย่างตรงไปตรงมา เราสามารถไปซื้อเพิ่มที่ร้านได้ครับ”
ตั้งค่าใน
CLAUDE.mdระดับโกลบอลให้ Claude ใช้ชื่อชวนขำว่า “Clod” แทน สรรพนามบุรุษที่หนึ่ง ที่อ้างถึงตัวเอง: https://github.com/alxndr/dotfiles/blob/272475280d84e/claude...ไม่ใช่แค่ “I”, “me”, “my” แต่ยังให้เปลี่ยนรูปย่ออย่าง “I'll”, “I'm” และ “myself” เป็น “Clod”, “Clodself” ตามลำดับด้วย
ในความสัมพันธ์ระหว่างมนุษย์ ถ้าอีกฝ่ายพูดแบบนี้แล้วเรายังเรียกร้องต่อ มันจะรู้สึกเสียมารยาท จึงเกิดผลเหมือนโยนค่านิยมทางศีลธรรมของ Anthropic มาเป็นความรู้สึกผิดของผู้ใช้ น่าจะดีกว่าถ้าบล็อกด้วยเหตุผลด้านความปลอดภัยแบบ OpenAI หรือแค่ตอบสั้น ๆ ว่า “เรื่องนั้นทำไม่ได้” แม้แต่ผมเองตอนแรกยังเขียนว่า “ตอนที่โมเดลไม่อยากทำ” แล้วค่อยแก้ทีหลัง แสดงว่าถูกการทำให้เหมือนมนุษย์แบบนี้ดึงดูดได้ง่ายแค่ไหน
CLAUDE.mdขึ้นมา คือเพื่อให้ทุกครั้งที่ Claude อยากชมผม มันเปลี่ยนเป็น เสียงเลียนธรรมชาติแบบสุ่ม แทน ซึ่งทำให้ประสบการณ์นักพัฒนาดีขึ้นมากแต่เพราะพรอมป์ตยูนิคอร์น เลยต้องมีกฎเพิ่มว่าอย่าใส่ “Local Oaf” ลงไปในโค้ดที่คอมมิตด้วย
ภาษาดีขึ้นชัดเจน แต่ก็ยังน่ารำคาญอยู่ และไม่รู้ว่าการตั้งค่านี้ทำให้คุณภาพเอาต์พุตเชิงเทคนิคลดลงหรือเปล่า
สัญญาณที่สม่ำเสมอที่สุดของข้อความที่ LLM เขียน คือปรากฏการณ์ที่ ร่องรอยของบทสนทนาระหว่างทำงานรั่วไหลออกมาในร้อยแก้วสุดท้าย
เวลาอ่านไปแล้วจู่ ๆ ก็โต้แย้งจุดยืนที่ไม่มีใครยกขึ้นมา และไม่เคยปรากฏที่อื่น จากนั้นผ่านไปพักใหญ่ก็ทำแบบเดียวกันซ้ำในประเด็นปลีกย่อยที่ต่างไปโดยสิ้นเชิง ทำนองว่า “วิธีที่ไม่มีใครคิดจะพิจารณาอาจดูน่าสนใจ แต่ล้มเหลวเพราะเหตุผลเหล่านี้” ทำให้นึกภาพมนุษย์ที่เหนื่อยจากการแก้ข้อผิดพลาดของ Claude แล้วส่งงานเขียนที่เสร็จออกไปทั้งอย่างนั้นโดยไม่ได้ตรวจแก้ทั้งชิ้น
LLM ยังห่างไกลจากการเป็นนักเขียนที่ยอดเยี่ยม มันลำบากกับการสร้างประโยคยาว ๆ ที่สอดคล้องกัน และพึ่งพา ขีดคั่นกับเซมิโคลอน เพื่อเชื่อมวลีสั้น ๆ เข้าด้วยกันพร้อมรักษาความถูกต้องทางไวยากรณ์
สงสัยว่าผลจากการที่แล็บใช้ reinforcement learning ให้โมเดลพื้นฐานแก้ไวยากรณ์ คือแทนที่จะเรียนรู้การเขียนประโยคสั้น ๆ ที่แตกเป็นท่อนให้เป็นธรรมชาติขึ้นใหม่ กลับเรียนรู้แค่วิธีเชื่อมด้วยเครื่องหมายวรรคตอนที่ผ่านตัวตรวจไวยากรณ์อัตโนมัติหรือเปล่า
วลีสั้นและกระชับ ที่พบได้บ่อย ดูเหมือนเป็นคุณลักษณะที่แล็บใส่เพิ่มในการฝึกภายหลัง เพื่อผู้ใช้ที่ไม่ต้องการประโยคยาว ๆ
ไม่รู้ว่าตอนขยับจาก Opus 4.7 มาเป็น Fable/Mythos 5 เขาฝึกอะไรกันมา แต่ชอบคำว่า “substrate” มากเกินไป
ก่อนหน้านี้ไม่เคยเห็นใครใช้คำนี้ในเอกสารเทคนิคหรือบทสนทนาจริง ๆ เลย จนจะบ้าอยู่แล้ว
เมื่อก่อน Opus 3 ดีตรงที่ทำให้พูดได้เป็นมนุษย์กว่า GPT มากได้ง่าย
ตอนนี้พอไปโฟกัสที่เอเจนต์และการเขียนโค้ด โมเดลต่าง ๆ จึงถูก RLHF ทำให้เป็นแบบแผนเดียวกันมากเกินไป จนทำให้หลุดจากน้ำเสียงเริ่มต้นได้ยากมาก ถ้าทำฟีเจอร์ให้มันตรวจทานงานเขียนหรือคอมเมนต์ในโค้ดแล้วแก้เองได้ ก็จะดีขึ้น แต่ก็ยังไม่สมบูรณ์แบบ น่าทึ่งที่โมเดลซึ่งว่ากันว่าฝึกมาด้วยความรู้ทั้งหมดของมนุษยชาติ กลับไม่ลังเลที่จะอ้างอิงคำสั่งเก่า ๆ แล้วเรียก Bash 100 ครั้ง แต่พอสนทนากันกลับแทบใช้คำอื่นนอกจาก "load-bearing" ไม่ได้
โดยเฉพาะ gemini-2.5-pro-experimental นั้นสนุกมากตรงที่หลังจากแพตช์ไฟล์ล้มเหลวหลายครั้ง ก็หงอยลง หมกมุ่นกับความสงสารตัวเอง แล้วทำโค้ดเบสพัง
งานเขียนมี ศิลปะ อยู่ในนั้น จึงหวังว่า LLM จะไม่มีวันทำได้สมบูรณ์แบบตลอดไป
อุตสาหกรรมที่เคยชูเป้าหมาย AGI ตอนนี้ดูเหมือนกำลังโฟกัสกับ coding agent มากเกินไป และรอจังหวะทะลุทะลวงทางการตลาดครั้งถัดไป
งานแบบเอเจนต์ต้องมีความเป็นอิสระสูง พร้อมมาตรการความปลอดภัยและการควบคุมจำนวนมาก แต่งานเขียนเชิงสร้างสรรค์ต้องกล้าเสี่ยงบ้างเป็นครั้งคราว และต้องไม่ฟังดูเหมือนหุ่นยนต์น่าเบื่อ พอลองฝึกโมเดลเองก็เห็นชัดว่าข้อกำหนดของการใช้งานสองแบบนี้ขัดกันโดยตรง
เสียดายที่ Concise Style ของ Claude หายไป ถ้าโยนย่อหน้าที่เขียนคร่าว ๆ ให้แล้วบอกว่า “เขียนใหม่ให้ชัดเจน” มันจะคงเนื้อหาไว้เหมือนเดิม แต่ขัดเกลาให้อ่านเรียบร้อยเหมาะกับข้อเสนองบวิจัย
เพราะมันแก้ข้อความที่ผมเขียนไว้ก่อนโดยตรง จึงลดสำนวนอย่าง "load-bearing" ลงได้ และช่วยประหยัดเวลาตกแต่งประโยคได้มาก โดยไม่ให้มันเขียนเนื้อหาวิทยาศาสตร์แทน ลองสร้างใหม่เป็นฟีเจอร์แล้ว แต่ไม่แน่ใจว่าทำได้ดีเท่าเดิมหรือไม่
Claude.mdเป็นบทสนทนาที่ “คน” สองคนถาม-ตอบกันสองสามข้อแบบ สั้นมาก ก็พอปัญหาไม่ใช่สำนวนเฉพาะคำใดคำหนึ่ง แต่คือการไปเกาะ รูปแบบน้ำเสียงที่คาดเดาได้ แล้วทำซ้ำไม่หยุด
มนุษย์ก็ทำแบบเดียวกัน แต่เป็นปรากฏการณ์ทางจิตวิทยาที่น่าสนใจว่าเมื่อเป็นมนุษย์เรากลับเรียกว่าสไตล์การเขียน แต่พอเครื่องทำกลับเกลียดจนแทบบ้า
แต่เมื่อโมเดลยอดนิยมไม่กี่ตัวตอบคำถามของทุกคน ถูกอ้างอิงและส่งต่อไปทุกที่ แถมยังเขียนการสื่อสารส่วนตัวใหม่ด้วย สัญญาณนั้นก็กลายเป็นสัญญาณรบกวน ทุกคนฟังดูเหมือนกัน และเราสูญเสียข้อมูลสำหรับแยกแยะที่มาซึ่งเราอาศัยทั้งทางชีววิทยาและวัฒนธรรม อาจมีคนที่ไม่รู้สึกเรื่องนี้มากนัก เหมือนภาวะจำใบหน้าไม่ได้หรือภาวะตาบอดสี แต่หลายคนรู้สึกไม่สบายใจจริง ๆ เพียงแต่อธิบายเหตุผลออกมาได้ไม่ชัด
โมเดลเหล่านี้เรียนรู้จากข้อมูลฝึกที่ทับซ้อนกันมาก, ข้อความการตลาดบนอินเทอร์เน็ตที่น่ารำคาญอยู่แล้ว, และเอาต์พุตของโมเดลอื่น ๆ ขณะที่ RLHF ก็เสริมวิธีพูดบางแบบที่ได้รางวัลง่าย ทำให้สไตล์ของแต่ละโมเดลค่อย ๆ บรรจบเข้าหากันจนคล้ายกัน
Claude เหมือนผู้จัดการโปรเจกต์ที่แย่ที่สุดที่ผมเคยเจอ คือเอาข้อสรุปง่าย ๆ ไปซ่อนใต้ชั้นถ้อยคำหลายชั้นจนแก่นสารหายไป และแม้จะกดไว้ได้เป็นส่วนใหญ่ ก็ยังมีบางส่วนเล็ดลอดออกมาตลอด ช่วงหนึ่งมันหยุดใช้คำว่า "scaffolding" ไม่ได้จนต้องแก้อย่างแรง