ข้ามไปยังเนื้อหา

การตั้งค่า

ZenCopy ใช้งานได้ทันทีโดยไม่ต้องตั้งค่าอะไรเลย หน้านี้มีไว้สำหรับตอนที่คุณอยากให้แอปเข้ากับตัวคุณมากขึ้น ครึ่งแรกว่าด้วยหน้าต่างการตั้งค่าสำหรับทุกคน ส่วนครึ่งหลังว่าด้วยไฟล์ตั้งค่าสำหรับผู้ใช้ขั้นสูง

เปิดได้จากเมนูของไอคอนถาดระบบ หรือไอคอนรูปเฟืองบนป๊อปอัป มีสามแท็บ: ทั่วไป, AI และแอ็กชัน

  • ตำแหน่งป๊อปอัป — ผลลัพธ์จะปรากฏที่มุมใดของหน้าจอ
  • ธีม — สว่าง / มืด / ตามระบบ
  • ภาษา — ภาษาที่แสดง (ค่าเริ่มต้นตาม OS ของคุณ)
  • เริ่มเมื่อเข้าสู่ระบบ — ให้ ZenCopy พร้อมรออยู่เสมอเมื่อคอมพิวเตอร์เปิดอยู่
  • ยืนยันก่อนส่งรูปภาพและไฟล์ — จะให้ถามหนึ่งครั้งก่อนที่รูปภาพหรือไฟล์จะถูกส่งไปยัง AI หรือไม่

นี่คือที่สำหรับเปลี่ยนบริการ AI (ผู้ให้บริการ โมเดล คีย์ API) ปุ่ม ทดสอบ จะบอกทันทีว่าการเชื่อมต่อใช้งานได้หรือไม่

แท็บนี้ยังมีช่อง เกี่ยวกับคุณ ด้วย เป็นที่สำหรับบรรยายบทบาทและความชอบของคุณด้วยประโยคธรรมดาไม่กี่ประโยค ภาษาใดก็ได้

ตัวอย่าง: “ฝ่ายขาย ส่วนใหญ่เขียนอีเมลถึงลูกค้า สุภาพแต่ไม่แข็งทื่อ สรุปก่อน”

เมื่อกรอกไว้ ทุกแอ็กชันจะปรับผลลัพธ์ให้เหมาะกับคุณ คำอธิบายจะมาในระดับความรู้ของคุณ และร่างข้อความจะกลับมาในน้ำเสียงที่คุณชอบ มันไม่กระทบงานที่ไม่เกี่ยวข้อง และตัวข้อความเองจะไม่โผล่ในผลลัพธ์

รายการของ “สิ่งที่เกิดขึ้นหลังคัดลอกสองครั้ง”

  • แอ็กชันที่ติดตั้งมาให้เปิดอ่านได้ — ใช้เป็นตัวอย่างการเขียนจริงได้ในตัว
  • แอ็กชันใหม่ใช้แค่ชื่อกับสิ่งที่อยากให้ทำเท่านั้น เช่น ชื่อ “สรุป 3 บรรทัด” คำสั่ง “สรุปเนื้อหานี้เป็น 3 บรรทัด”
  • ไม่มั่นใจในการเขียนคำสั่งก็ไม่เป็นไร จดสิ่งที่ต้องการแบบคร่าว ๆ แล้วกด ร่างด้วย AI — AI ที่คุณตั้งค่าไว้จะเรียบเรียงให้เป็นคำสั่งที่สมบูรณ์
  • การกำหนดเส้นทางให้คุณเลือกแอ็กชันต่างกันได้ตามประเภทของเนื้อหา (ข้อความ / รูปภาพ / ไฟล์)

แอ็กชันที่คุณสร้างแชร์ให้คนอื่นได้: ส่งออก (.md) จะเขียนออกมาเป็นไฟล์หนึ่งไฟล์ ส่วนฝ่ายผู้รับแค่วางลงใน นำเข้า หรือเลือกไฟล์นั้น

หากคุณต้องการยกหน้าที่ทั้งหมดให้ AI จัดการ? แชท AI ใดๆ ก็สามารถเขียนแอ็กชันที่พร้อมนำเข้าให้คุณได้ เพียงคัดลอกข้อความนี้แล้วเติมคำในช่องว่าง:

อ่าน https://zencopy.app/llms-full.txt — เอกสารประกอบฉบับเต็มของ ZenCopy รวมถึงรูปแบบไฟล์แอ็กชัน ตัวแปรเทมเพลต และวิธีการทำงานของเส้นทาง (routing) จากนั้นเขียนแอ็กชันของ ZenCopy ที่ทำสิ่งต่อไปนี้: [สิ่งที่คุณต้องการ] แสดงผลไฟล์แอ็กชันที่สมบูรณ์หนึ่งไฟล์ (Markdown พร้อม frontmatter) ในบล็อกโค้ดเดียว ซึ่งพร้อมสำหรับนำไปวางใน การตั้งค่า → แอ็กชัน → นำเข้า ของ ZenCopy หากแอ็กชันนี้ใช้งานได้เฉพาะในแอปหรือเว็บไซต์ใดเว็บไซต์หนึ่งโดยเฉพาะ ให้เพิ่มข้อความหนึ่งประโยคเพื่อบอกฉันว่าต้องตั้งค่ากฎเส้นทางใด

บล็อกโค้ดในคำตอบจะถูกนำไปใส่ใน การตั้งค่า → แอ็กชัน → นำเข้า ได้ทันที สำหรับคำถามที่เอกสารประกอบไม่สามารถให้คำตอบได้ (“ZenCopy สามารถทำ… ได้ด้วยหรือ?”) คลิกเพียงครั้งเดียวเพื่อแพ็กซอร์สโค้ดที่เกี่ยวข้อง — แล้วส่งผลลัพธ์นั้นให้กับ AI ตัวเดิม

จากตรงนี้เป็นต้นไปคือเรื่องการแก้ไขไฟล์ข้อความโดยตรง ทุกอย่างที่จำเป็นมีให้ในหน้าต่างการตั้งค่าแล้ว จะหยุดอ่านตรงนี้ก็ได้ตามสบาย

ไฟล์จะถูกอ่านจากไดเรกทอรีตั้งค่าแอปของผู้ใช้แต่ละคน เส้นทางที่แน่นอนจะถูกพิมพ์ลงบันทึกตอนเปิดแอปด้วย:

%APPDATA%\app.zencopy

ค่าเริ่มต้นของการกำหนดเส้นทางฝังอยู่ในตัวแอป routing.json ทำหน้าที่เขียนทับค่าเหล่านั้นเท่านั้น ไฟล์แอ็กชันเป็นแบบเพิ่มเข้าอย่างเดียว: มันใช้นิยามแอ็กชันใหม่ และแอ็กชันในตัวแตะต้องไม่ได้ (ไฟล์ในเครื่องที่อ้าง id ของแอ็กชันในตัวจะถูกละเว้น) การแก้ไขมีผลตั้งแต่ทริกเกอร์ครั้งถัดไป — ไม่ต้องรีสตาร์ต

ผู้ให้บริการ บวกการจับคู่ role → โมเดล บ้านของรูปแบบไฟล์นี้คือ ai-sdk-catalog — ทุกฟิลด์มีเอกสารอธิบายอยู่ที่นั่น (รวมถึง $schema สำหรับให้เอดิเตอร์ตรวจสอบและเติมข้อความอัตโนมัติ) และใน examples/ มีตัวอย่างการตั้งค่าสามขนาด สำหรับจุดเริ่มต้นแบบฉบับ ZenCopy (รูปแบบที่ UI การตั้งค่าเขียน, Ollama ในเครื่อง, role สำหรับแอ็กชัน) ดูที่สูตรสำเร็จ

ข้อกำหนดหนึ่งมาจากตัว ZenCopy เอง ไม่ใช่จากรูปแบบไฟล์: roles ต้องมี default เสมอ ทุกแอ็กชันจะรันด้วย role นี้ เว้นแต่ frontmatter ของแอ็กชันระบุ role อื่น และการทดสอบการเชื่อมต่อในหน้าตั้งค่าก็ ping role นี้เช่นกัน

คีย์ API เขียนลงไฟล์ในเครื่องนี้โดยตรง (UI การตั้งค่าก็เขียนรูปแบบเดียวกัน) และไม่มีวันออกไปนอกเครื่องของคุณ ตัวแปรสภาพแวดล้อมจะไม่ถูกอ่าน — แอป GUI ถูกเปิดโดย OS ไม่ใช่เชลล์ของคุณ ตัวแปรที่ export ไว้ใน .zshrc และไฟล์ทำนองเดียวกันจึงส่งไปไม่ถึงอยู่แล้ว ไฟล์นี้ถูกตรวจสอบกับ schema ทุกครั้งที่อ่าน การแก้ไขที่ผิดพลาดจะปรากฏเป็นข้อความชัดเจนทั้งในป๊อปอัปและในเอดิเตอร์ของการตั้งค่า — ไม่มีอะไรล้มเหลวแบบเงียบ ๆ

แอ็กชันใดจัดการการจับประเภทใด: แผนที่ kind → action แบบแบน บวกรายการ overrides ที่มีลำดับความสำคัญสูงกว่า (ไม่บังคับ ข้อแรกที่ตรงชนะ) ประเภทมีสี่แบบคือ text, rich_text, image และ files ค่าเริ่มต้นคือข้อความไปที่ Zen ส่วนรูปภาพและไฟล์ไปที่อธิบาย แผนที่แบบแบนแก้ไขได้ในแอป (ตั้งค่า → แอ็กชัน → การกำหนดเส้นทาง) คุณจึงต้องแตะไฟล์นี้เฉพาะเมื่อจะใช้ overrides เท่านั้น

{
"text": "zencopy-zen",
"rich_text": "zencopy-zen",
"image": "zencopy-explain",
"files": "zencopy-explain",
"overrides": [{ "when": { "app_name": "Slack", "min_chars": 200 }, "action": "summarize" }]
}

เงื่อนไขของ when: kind, app_name, exec_name, window_title, url (ทั้งหมดรองรับไวลด์การ์ด *), file_name (ไวลด์การ์ดสำหรับจับคู่ชื่อไฟล์ที่คัดลอกมาทั้งหมด โดยไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ — เช่น *.pdf) รวมทั้ง min_chars / max_chars

สำหรับการจับแบบ image และ files เนื้อหาจะถูกส่งไปยังโมเดลโดยตรง (รวมสูงสุด 10 MB ต่อการจับหนึ่งครั้ง) ประเภทของไฟล์ตรวจจากเนื้อหา ไม่ใช่ชื่อไฟล์: รูปภาพ, PDF และเสียงจะถูกแนบไปตามเดิม ส่วนไฟล์ข้อความ (Markdown, ซอร์สโค้ด, CSV, …) จะกลายเป็นข้อความของการจับ ({{ text }}) และทำงานเหมือนกับว่าคุณคัดลอกเนื้อหาข้างในมาทุกประการ เอกสาร Office (Word, Excel, PowerPoint) ก็จะกลายเป็นข้อความเช่นกัน: เนื้อหาของเอกสารจะถูกแยกและส่ง แต่เค้าโครงและรูปภาพจะไม่ถูกส่ง การเข้ารหัสอักขระถูกตรวจจับอัตโนมัติ โดยแปลงรูปแบบเก่าอย่าง Shift_JIS และ UTF-16 ให้ด้วย ไฟล์นอกเหนือจากนี้จะถูกปฏิเสธพร้อมข้อความที่ชัดเจน เส้นทางแบบเต็มจะถูกส่งไปพร้อมเนื้อหา เพื่อให้โมเดลแยกไฟล์ออกจากกันได้และรู้ว่าไฟล์อยู่ที่ไหน เนื่องจากไฟล์แนบไบนารีอาจมีค่าใช้จ่ายมากกว่าข้อความ ป๊อปอัปจะถามก่อนส่ง (ไฟล์ข้อความทำงานได้โดยไม่ถาม) — การยืนยันปิดได้ทั้งตรงนั้นเองหรือในการตั้งค่า

หนึ่งไฟล์ = หนึ่งแอ็กชัน: frontmatter แบบ YAML + เนื้อหาพรอมต์แบบ Liquid ไฟล์เดียวกันนี้คือรูปแบบสำหรับแชร์ด้วย — ตั้งค่า → แอ็กชัน → นำเข้า รับได้ทั้งการวางเป็นข้อความและการเลือกไฟล์

---
id: summarize
label: สรุป
role: default
instructions: คุณคือผู้ช่วยที่ตอบอย่างกระชับ
---
สรุปเนื้อหาต่อไปนี้เป็นภาษา {{ locale }} ความยาว 3 บรรทัด:
{{ text }}
Frontmatterความหมาย
idชื่อที่ถูกอ้างถึงจาก routing.json (ค่าเริ่มต้น: ชื่อไฟล์) — คำนำหน้า zencopy- สงวนไว้สำหรับแอ็กชันที่ติดตั้งมาให้
labelแสดงบนป๊อปอัป
rolerole ของ catalog ที่ใช้เรียก (ค่าเริ่มต้น: default)
instructionsพรอมต์ระบบ (เทมเพลต Liquid)

ตัวแปรเทมเพลต พร้อมตัวอย่างค่าเมื่อคัดลอกย่อหน้าหนึ่งในเบราว์เซอร์:

ตัวแปรตัวอย่าง
{{ text }}ข้อความที่คัดลอก (การคัดลอกแบบ HTML จะกลายเป็น Markdown)
{{ markup }}ซอร์ส HTML/RTF ของการคัดลอกแบบมีรูปแบบ
{{ format }}html (หรือ rtf และว่างสำหรับการคัดลอกธรรมดา)
{{ file_name }}report.pdf (ชื่อของไฟล์ที่คัดลอกมาไฟล์แรก)
{{ file_names }}ชื่อของไฟล์ที่คัดลอกมาทั้งหมด รายการละหนึ่งบรรทัด
{{ file_paths }}เส้นทางเต็มของไฟล์ที่คัดลอกมาทั้งหมด รายการละหนึ่งบรรทัด
{{ app_name }}Safari
{{ exec_name }}Safari / chrome.exe
{{ exec_path }}/Applications/Safari.app/Contents/MacOS/Safari
{{ window_title }}ราคา – Example
{{ url }}https://example.com/pricing (เฉพาะเบราว์เซอร์)
{{ process_id }}8123
{{ now }}2026-07-08 20:15:00
{{ locale }}th

นอกจากนี้ยังมีฟิลเตอร์เฉพาะของ ZenCopy ชื่อ language_name: {{ locale | language_name }} จะขยายเป็น “Thai” แทนที่จะเป็น “th” ซึ่งอ่านเป็นธรรมชาติกว่าในพรอมต์ หากอยากเห็นค่าจริง ให้เปิดโหมดนักพัฒนาในการตั้งค่า — ตัวแปรเทมเพลตของการจับแต่ละครั้งจะปรากฏในป๊อปอัปเป็น JSON

แอ็กชันแบบง่าย (ชื่อกับคำสั่ง) สร้างจากหน้าต่างการตั้งค่าก็ได้เช่นกัน สิ่งที่มันเขียนออกมาก็คือไฟล์รูปแบบนี้เป๊ะ ๆ

ทั้ง frontmatter instructions และเนื้อหาเป็นเทมเพลต LiquidJS เต็มรูปแบบ: เงื่อนไข ลูป และฟิลเตอร์ใช้ได้ทั้งหมด แอ็กชันเดียวจึงปรับตัวตามที่มาของการคัดลอกได้:

---
id: context-aware
label: ปรับตามบริบท
---
{% if url contains "github.com" %}
รีวิวโค้ดนี้และชี้ความเสี่ยงที่ใหญ่ที่สุดเพียงข้อเดียว:
{% elsif app_name == "Slack" %}
สรุปเธรดแชตนี้เป็น 2 บรรทัด:
{% else %}
อธิบายสิ่งนี้เป็นภาษา {{ locale }}:
{% endif %}
{{ text | truncate: 8000 }}

บันทึกแบบมีโครงสร้าง (ข้อมูลลับและเนื้อหาที่คัดลอกถูกปกปิด) จะออกทางเทอร์มินัลในโหมด dev และเขียนลงไฟล์แบบหมุนเวียนในรุ่น release:

%LOCALAPPDATA%\app.zencopy\logs