Langfuse WorkshopClickHouse Workshops

03 การจัดการพรอมต์

คุณมีแอปที่มีการติดตามการทำงาน พรอมต์ของระบบอยู่เป็นค่าคงที่ชื่อ SYSTEMPROMPT ในไฟล์ src/server/support-agent.ts และใช้โดยตรงเป็นข้อความของระบบ

เอกสารของเวิร์กช็อปได้รับการบำรุงรักษาในคลังเก็บสาธารณะ langfuse/langfuse-workshop ใช้คลังเก็บสำหรับแอปที่สามารถเรียกใช้ได้ สาขาจุดตรวจสอบ และการตั้งค่าในเครื่อง

ดูไฟล์ Markdown นี้

จุดเริ่มต้น

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

เป้าหมาย

สองขั้นตอน:

  1. เผยแพร่พรอมต์ของระบบไปยัง Langfuse เพื่อให้สำเนาที่มีเวอร์ชันอยู่ที่นั่น
  2. ดึงมันกลับมาในเวลาของการร้องขอ และเชื่อมโยงการสร้าง OpenAI แต่ละครั้งกับเวอร์ชันที่สร้างขึ้น

ขั้นตอนที่ 1 — เผยแพร่พรอมต์ (Langfuse UI)

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

  1. ใน Langfuse เปิด Prompts → New prompt
  2. ตั้งชื่อ เป็น dad-it-support-agent (ตรงกับ LANGFUSE_PROMPT_NAME ใน .env ของคุณ)
  3. Type คือ text
  4. วาง เนื้อหาของ SYSTEM_PROMPT จาก src/server/support-agent.ts
  5. ติดป้ายชื่อ เวอร์ชันเป็น production (ตรงกับ LANGFUSE_PROMPT_LABEL ใน .env ของคุณ)
  6. บันทึก

การสร้างพรอมต์ dad-it-support-agent ใน Langfuse

💡 ทางเลือก — เผยแพร่ผ่านสคริปต์ 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" และเทรสของคุณจะปรากฏ

openai-chat-completion ที่ติดตามการทำงาน พร้อมป้าย Prompt ที่มุมขวาบนเชื่อมโยงกลับไปยัง dad-it-support-agent · v1

สรุป

Prompt management คือสิ่งที่ปิดลูป trace ↔ prompt ทุกเวอร์ชันพรอมต์จะถูกเก็บรักษา การสร้างทั้งหมดรู้ว่าเวอร์ชันใดสร้างมันขึ้นมา และคุณสามารถทำซ้ำพรอมต์ได้อย่างอิสระจากการปรับใช้โค้ด

วิธีที่ตรงไปตรงมากว่าในการเชื่อมต่อ prompt management ตรงกับแนวปฏิบัติที่ดีที่สุดของ Langfuse คือ Langfuse skill (/langfuse) ทักษะนี้ใช้รูปแบบที่แนะนำกับฐานรหัสของคุณโดยไม่ต้องให้คุณหมุนแต่ละส่วนด้วยมือ บทนี้มีอยู่เพื่อให้คุณสามารถเห็นว่าทักษะกำลังทำอะไรภายใต้หน้าปก

สถานะสุดท้าย

นี่คือจุดเริ่มต้นสำหรับ 04-monitoring

ในหน้านี้

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

TH