03 การจัดการพรอมต์
คุณมีแอปที่มีการติดตามการทำงาน พรอมต์ของระบบอยู่เป็นค่าคงที่ชื่อ SYSTEMPROMPT ในไฟล์ src/server/support-agent.ts และใช้โดยตรงเป็นข้อความของระบบ
เอกสารของเวิร์กช็อปได้รับการบำรุงรักษาในคลังเก็บสาธารณะ langfuse/langfuse-workshop ใช้คลังเก็บสำหรับแอปที่สามารถเรียกใช้ได้ สาขาจุดตรวจสอบ และการตั้งค่าในเครื่อง
จุดเริ่มต้น
git checkout checkpoint/03-prompt-managementคุณมีแอปที่มีการติดตามการทำงาน พรอมต์ของระบบอยู่เป็นค่าคงที่ชื่อ SYSTEM_PROMPT ในไฟล์ src/server/support-agent.ts และใช้โดยตรงเป็นข้อความของระบบ
ในบทนี้เราย้ายพรอมต์นั้นไปยัง Langfuse เพื่อให้มีเวอร์ชันและสามารถแก้ไขได้ในส่วนติดต่อผู้ใช้ และเราดึงมันกลับมาในเวลาของการร้องขอ ค่าคงที่ในเครื่องจะอยู่ในไฟล์เป็นข้อมูลสำรองสำหรับเมื่อ Langfuse ไม่สามารถเข้าถึงได้
ตรวจสอบให้แน่ใจว่า .env มี:
LANGFUSE_PROMPT_NAME=dad-it-support-agent
LANGFUSE_PROMPT_LABEL=productionเหตุใดจึงต้องจัดการพรอมต์
การเก็บพรอมต์ของระบบไว้ในโค้ดหมายความว่าการเปลี่ยนแปลงพรอมต์ทุกครั้งคือการเปลี่ยนแปลงโค้ด: pull request การตรวจสอบ การสร้าง และการปรับใช้ ด้วย Langfuse prompt management พรอมต์อยู่ใน Langfuse — มีเวอร์ชัน ติดป้ายชื่อ และสามารถแก้ไขได้ในส่วนติดต่อผู้ใช้ — และแอปดึงมันในเวลาของการร้องขอ นั่นหมายความว่าผู้ที่ไม่ใช่วิศวกรสามารถทำซ้ำพรอมต์ได้ การเปลี่ยนแปลงจะเกิดขึ้นอย่างอิสระจากรอบการปล่อยตัว และทุกเวอร์ชันจะถูกเก็บรักษาและเชื่อมโยงกับเทรสที่สร้างขึ้น
เรียนรู้เพิ่มเติมในเอกสาร Langfuse prompts
เป้าหมาย
สองขั้นตอน:
- เผยแพร่พรอมต์ของระบบไปยัง Langfuse เพื่อให้สำเนาที่มีเวอร์ชันอยู่ที่นั่น
- ดึงมันกลับมาในเวลาของการร้องขอ และเชื่อมโยงการสร้าง OpenAI แต่ละครั้งกับเวอร์ชันที่สร้างขึ้น
ขั้นตอนที่ 1 — เผยแพร่พรอมต์ (Langfuse UI)
วิธีที่ตรงไปตรงมาที่สุดในการสร้างพรอมต์คือการเพิ่มพรอมต์ด้วยตนเองในส่วนติดต่อผู้ใช้ — เป็นขั้นตอนการทำงานเดียวกับที่ทีมของคุณจะใช้สำหรับการทำซ้ำในอนาคตทั้งหมด
- ใน Langfuse เปิด Prompts → New prompt
- ตั้งชื่อ เป็น
dad-it-support-agent(ตรงกับLANGFUSE_PROMPT_NAMEใน.envของคุณ) - Type คือ
text - วาง เนื้อหาของ
SYSTEM_PROMPTจากsrc/server/support-agent.ts - ติดป้ายชื่อ เวอร์ชันเป็น
production(ตรงกับLANGFUSE_PROMPT_LABELใน.envของคุณ) - บันทึก

💡 ทางเลือก — เผยแพร่ผ่านสคริปต์
scripts/publish-prompt.tsดันค่าคงที่SYSTEM_PROMPTขึ้นไปยัง Langfuse (npm run prompt:publish) ผลลัพธ์เหมือนกัน
ขั้นตอนที่ 2 — ดึงพรอมต์จาก Langfuse
เพิ่มการนำเข้า ใน src/server/support-agent.ts:
import { LangfuseClient } from "@langfuse/client";สร้างไคลเอ็นต์ที่ระดับโมดูล:
const langfuse = new LangfuseClient();เพิ่มโปรแกรมช่วยเหลือ getPrompt ที่ดึงจาก Langfuse โดยส่งกลับ null เมื่อเกิดความผิดพลาดใดๆ เพื่อให้แชทสามารถกลับไปใช้ SYSTEM_PROMPT ในเครื่อง:
async function getPrompt() {
try { return await langfuse.prompt.get(env.langfusePromptName); }
catch { return null; }
}ใช้มันใน runSupportConversation — ดึง จากนั้นกลับไปใช้ค่าคงที่ในเครื่องหากการดึงส่งกลับค่าว่าง:
const langfusePrompt = await getPrompt();
const systemPrompt = langfusePrompt?.prompt ?? SYSTEM_PROMPT;ส่ง systemPrompt เป็นข้อความของระบบ ค้นหาบรรทัดนี้ในรอบสนทนาไม่กี่บรรทัดด้านล่าง:
{ role: "system", content: SYSTEM_PROMPT },และเปลี่ยนเป็น:
{ role: "system", content: systemPrompt },หากไม่มีการเปลี่ยนแปลงนี้ โมเดลจะยังคงได้รับค่าคงที่ในเครื่อง — ป้ายพรอมต์ในขั้นตอนถัดไปจะยังคงปรากฏ แต่การแก้ไขพรอมต์ใน Langfuse จะไม่มีผลต่อคำตอบ
ส่ง langfusePrompt ไปยังการเรียก observeOpenAI ที่มีอยู่ เพื่อให้การสร้างเชื่อมโยงกับเวอร์ชันพรอมต์ที่เผยแพร่ — เฉพาะเมื่อเรามี:
const openai = observeOpenAI(
new OpenAI({ apiKey: env.openaiApiKey }),
langfusePrompt ? { langfusePrompt } : undefined
);สามสิ่งที่ควรสังเกต:
- การเรียก
observeOpenAI(new OpenAI(...))เองไม่เปลี่ยนแปลง — ห่อแบบเดียวกันจากขั้นตอนที่ 02 เราเพิ่มอาร์กิวเมนต์ที่สองแบบมีเงื่อนไขซึ่งมีlangfusePrompt - ค่าคงที่
SYSTEM_PROMPTในเครื่องจะอยู่ในไฟล์เป็นข้อมูลสำรอง หาก Langfuse ไม่ได้รับการกำหนดค่าอย่างถูกต้องหรือพรอมต์ยังไม่ได้เผยแพร่ แชทจะยังคงทำงาน — มันจะไม่มีป้ายพรอมต์ในเทิร์นนั้น - การส่ง
langfusePromptเข้าไปในobserveOpenAIคือสิ่งที่ทำให้การสร้างทุกครั้งภายใต้ไคลเอ็นต์นั้นมีป้าย Prompt ซึ่งเชื่อมโยงกลับไปยังเวอร์ชันที่เผยแพร่ที่แน่นอน
ตรวจสอบ
npm run devถามคำถามหนึ่งข้อ จากนั้นใน Langfuse:
- เปิดเทรส คลิกการสร้าง OpenAI มันควรจะแสดงป้าย Prompt ที่เชื่อมโยงไปยัง
dad-it-support-agentที่เวอร์ชันที่คุณเผยแพร่ - ในมุมมอง Prompts สำหรับ
dad-it-support-agentให้เลื่อนไปที่ "Used in" และเทรสของคุณจะปรากฏ

สรุป
Prompt management คือสิ่งที่ปิดลูป trace ↔ prompt ทุกเวอร์ชันพรอมต์จะถูกเก็บรักษา การสร้างทั้งหมดรู้ว่าเวอร์ชันใดสร้างมันขึ้นมา และคุณสามารถทำซ้ำพรอมต์ได้อย่างอิสระจากการปรับใช้โค้ด
วิธีที่ตรงไปตรงมากว่าในการเชื่อมต่อ prompt management ตรงกับแนวปฏิบัติที่ดีที่สุดของ Langfuse คือ Langfuse skill (/langfuse) ทักษะนี้ใช้รูปแบบที่แนะนำกับฐานรหัสของคุณโดยไม่ต้องให้คุณหมุนแต่ละส่วนด้วยมือ บทนี้มีอยู่เพื่อให้คุณสามารถเห็นว่าทักษะกำลังทำอะไรภายใต้หน้าปก
สถานะสุดท้าย
นี่คือจุดเริ่มต้นสำหรับ 04-monitoring
02 การติดตาม
นี่คือสเลตว่างสำหรับขั้นตอนการติดตาม — โค้ดเดียวกับ checkpoint/01-base-app โดยไม่มีการเชื่อมต่อ Langfuse ยัง แพ็คเกจ Langfuse อยู่ในแล้ว package.json — เรียกใช้ npm inst...
04 การมอนิเตอร์
คุณมีแอปที่ติดตามการทำงาน พร้อมพรอมต์ที่จัดการโดย Langfuse ทั้งหมด ทุกเทิร์นแชทจะเป็นเทรสที่มีโครงสร้างซ้อนกันใน Langfuse