สำนักงาน
เปลี่ยนหน้างานวิจัยเป็นงานนำเสนอ
สกัดหน้า เก็บเป็นบริบท LiveDoc ให้ PPT Task API สร้างเด็ค และถามจนได้ลิงก์ที่เสร็จ
คัดลอกพรอมป์ต์
แทนช่องในวงเล็บเหลี่ยมแล้ววางใน Claude Code, Codex หรือ AI ที่เข้าถึงเทอร์มินัล ระบบจะติดตั้งสกิล Felo ถามก่อนใช้เครดิต และรันเวิร์กโฟลว์
เปลี่ยนแหล่งนี้เป็นสไลด์: [URL สาธารณะหรือพาธ PDF] ผู้อ่าน: [ใครดู] จำนวนสไลด์: [6–10] ภาษา: [ภาษา] ธีม: [ชื่อธีมหรือ “default”] ใช้ Web Fetch กับหน้าสาธารณะ (หรือไฟล์ที่อัปโหลด) เก็บแหล่งเป็นบริบท LiveDoc สร้างงาน PPT และสอบถามจนสไลด์เสร็จ สร้าง: 1. โครงหนึ่งบรรทัดต่อสไลด์ 2. ลิงก์สไลด์ที่สร้าง 3. ลิงก์ LiveDoc ที่ใช้เป็นบริบท กฎ: - ห้ามแต่งข้อเท็จจริงที่ไม่มีในแหล่ง ช่องว่างให้เขียน “ไม่ระบุในแหล่ง” - งาน PPT ใช้เครดิต ถามก่อนส่ง - เก็บ URL ต้นทาง โครง และลิงก์สไลด์ไว้ด้วยกัน - ห้ามเผยแพร่หรือแชร์สไลด์นอก workspace - เขียนโครงลง ./deck-outline.md และสรุปในแชท
สำเนายังรวมขั้นตอนติดตั้งและกฎความปลอดภัย
สิ่งที่คุณได้รับ
ตัวอย่างผลลัพธ์จากการรันหนึ่งครั้ง ไม่ใช่การสร้างสด
แหล่ง -> โครงสไลด์
- ทำไมรายงานนี้สำคัญ
- ไตรมาสนี้เปลี่ยนอะไร
- สามกลุ่มลูกค้า
- จุดที่หลักฐานบาง
- สิ่งที่ต้องทดสอบต่อไป
สไลด์: https://felo.ai/slides/... บริบท: https://felo.ai/livedoc/...
การเรียกที่แน่นอน
สำหรับนักพัฒนา: เวิร์กโฟลว์เดียวกันในรูปโค้ดตามลำดับการทำงาน
แสดงการเรียก API จริง
สกัดหน้าต้นทาง
ด้วย Web Fetch เปลี่ยนหน้าสาธารณะเป็น Markdown โดยเก็บหัวเรื่องและเนื้อหา
deck.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type ExtractData = { data: { content: string } }; const page = await felo<ExtractData>("/v2/web/extract", { url: "https://example.com/research", output_format: "markdown", with_readability: true, });เก็บเป็นบริบท LiveDoc
สร้าง LiveDoc เพิ่มต้นทางเป็นเอกสาร และรับ short_id
deck.ts type LiveDocData = { data: { short_id: string } }; type ResourceData = { data: { id: string } }; const doc = await felo<LiveDocData>("/v2/livedocs", { name: "Quarterly research deck", description: "Source material for the next deck", }); const resource = await felo<ResourceData>( `/v2/livedocs/${doc.data.short_id}/resources/doc`, { title: "Source page", content: page.data.content, }, );ส่งงานสไลด์
เรียก PPT Task API พร้อมเนื้อหาและ LiveDoc short_id เพื่อรับ task_id
deck.ts type PptTaskData = { data: { task_id: string; livedoc_short_id: string }; }; const task = await felo<PptTaskData>("/v2/ppts", { query: "Six slides for a product review: findings, evidence, next steps", livedoc_short_id: doc.data.short_id, }); console.log(task.data.task_id);ตัวอย่างผลลัพธ์
{ "data": { "livedoc_short_id": "PvyKouzJirXjFdst4uKRK3", "ppt_business_id": "BfLPuQKmChk9SPmyQawxgr", "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9" } }ถามจนเสร็จ
ตรวจสถานะจนเสร็จและอ่านลิงก์สไลด์
deck.ts type TaskState = { data: { task_status: string; ppt_url?: string; live_doc_url?: string }; }; async function waitForDeck(taskId: string) { for (let attempt = 0; attempt < 40; attempt++) { const state = await felo<TaskState>(`/v2/tasks/${taskId}/historical`); if (state.data.task_status === "COMPLETED") return state.data; if (["FAILED", "EXPIRED", "CANCELED"].includes(state.data.task_status)) { throw new Error(`Deck task ${state.data.task_status}`); } await new Promise((resolve) => setTimeout(resolve, 3000)); } throw new Error("Deck task timed out"); } const result = await waitForDeck(task.data.task_id); console.log(result.ppt_url);ตัวอย่างผลลัพธ์
{ "task_status": "COMPLETED", "ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx", "live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx" }
รวมอะไรบ้าง
- สกัดหน้าต้นทางเป็น Markdown สะอาด
- LiveDoc เป็นบริบทใช้ซ้ำ
- งาน PPT อะซิงโครนัสและลิงก์ที่เสร็จ
- โครงสไลด์เพื่อตรวจก่อนแชร์
สิ่งที่ไม่ทำ
- เฉพาะหน้าสาธารณะหรือไฟล์อัปโหลด หน้าที่ต้องล็อกอินอาจล้มเหลว
- สไลด์ตามต้นทางและไม่ครอบคลุมระบบแบรนด์ทั้งหมด
- หนึ่งเด็คต่อการรัน หลายเด็คต้องวน
- ไม่แก้เด็คที่มีอยู่และไม่รับประกันความตรงของภาพ
- ไม่เผยแพร่หรือแชร์เด็ค
คำถาม
ใช้ PDF แทน URL ได้ไหม?
ได้ ส่งงาน PPT เป็น multipart form data พร้อมไฟล์ แพลตฟอร์มเก็บเป็นรีซอร์ส LiveDoc และสร้างเด็ค
เลือกธีมได้ไหม?
ได้ ระบุธีมแล้วส่ง id ธีมตอนสร้างงาน
เด็คหนึ่งใช้เวลานานเท่าไร?
เป็นงานอะซิงโครนัส ถามประวัติจนเสร็จ เด็คยาวใช้เวลามากกว่า
แก้เด็คที่มีอยู่ไหม?
ไม่ สร้างเด็คใหม่จากต้นทาง การแก้เด็คที่มีอยู่เป็นเวิร์กโฟลว์อื่น
เด็คหนึ่งมีค่าใช้จ่ายเท่าไร?
การสร้างสไลด์คิดตามการใช้งาน อัตราปัจจุบันที่หน้าค่าบริการ และพรอมป์ต์ขออนุมัติก่อนใช้จ่าย
ใช้ต้นทางซ้ำได้ไหม?
ได้ LiveDoc เก็บต้นทาง เด็คหรือ mindmap ถัดไปใช้ short_id ได้
เวิร์กโฟลว์ที่เกี่ยวข้อง
เปลี่ยนคำถามหนึ่งข้อเป็นบรีฟวิจัยที่มีแหล่งอ้างอิง
ถามเว็บ บันทึกหน้าเว็บที่อยู่เบื้องหลังคำตอบเป็น Markdown เพิ่มสิ่งที่ผู้ปฏิบัติพูดบน X และเก็บหลักฐานใน LiveDoc ที่ค้นซ้ำได้
เปิดเวิร์กโฟลว์เนื้อหาเผยแพร่สรุปข่าว AI รายวันที่ทีมอ่านจริง
รับสรุปข่าวพร้อมแหล่ง เพิ่มการพูดคุยของผู้ปฏิบัติบน X ดึงทรานสคริปต์วิดีโอ ประกอบฉบับเป็น Markdown และเก็บใน LiveDoc
เปิดเวิร์กโฟลว์สนับสนุนตอบคำถามฝ่ายสนับสนุนจากเอกสารของคุณเอง
สร้าง LiveDoc โหลดศูนย์ช่วยเหลือและ runbook ภายใน ดึงส่วนที่ตอบทิกเก็ต และให้โมเดลตอบจากหลักฐานนั้นเท่านั้น
เปิดเวิร์กโฟลว์ปรับให้เป็นของคุณ
สูตรเดิม ปรับตามวิธีที่คุณส่งมอบจริง
ต้นทาง PDF
อัปโหลด PDF ผ่าน multipart แพลตฟอร์มเก็บเป็นรีซอร์ส LiveDoc ก่อน
กำหนดธีม
ระบุธีมที่ใช้ได้และส่ง id ตอนสร้างงาน
ใช้ซ้ำในเด็คถัดไป
สร้างงาน PPT ใหม่ด้วย LiveDoc short_id เดิม
ไปต่อ
หน้าเอกสารอ้างอิงเบื้องหลังสูตรนี้และก้าวต่อไป