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

การตั้งค่า

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

%APPDATA%\app.zencopy

ค่าเริ่มต้นของกฎฝังอยู่ในตัวแอป rules.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 → prompt แบบแบน บวกรายการ overrides ที่มีลำดับความสำคัญสูงกว่า (ไม่บังคับ ข้อแรกที่ตรงชนะ) ประเภทมีสามแบบคือ text, image และ files (การคัดลอกแบบมีรูปแบบจะถือเป็น text) ค่าเริ่มต้นคือข้อความไปที่สรุป ส่วนรูปภาพและไฟล์ไปที่อธิบาย แผนที่แบบแบนแก้ไขได้ในแอป (ตั้งค่า → พรอมต์ → กฎ) คุณจึงต้องแตะไฟล์นี้เฉพาะเมื่อจะใช้ overrides เท่านั้น

{
"text": "zencopy-summarize",
"image": "zencopy-explain",
"files": "zencopy-explain",
"overrides": [{ "when": { "app_name": "Slack", "min_chars": 200 }, "prompt": "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ชื่อที่ถูกอ้างถึงจาก rules.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