Langfuse WorkshopClickHouse Workshops

06 การทดลอง

ชุดข้อมูลของคุณปลูกไว้ใน Langfuse scripts/run-dataset.ts มีอยู่ในที่เก็บแล้ว

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

ดูไฟล์ Markdown นี้

จุดเริ่มต้น

git checkout checkpoint/06-experiments

ชุดข้อมูลของคุณปลูกไว้ใน Langfuse scripts/run-dataset.ts มีอยู่ในที่เก็บแล้ว

เหตุใดถึงการทดลอง

ร่องรอยบอกคุณเกี่ยวกับพฤติกรรม หนึ่ง การเปลี่ยนแปลง การทดลองบอกคุณเกี่ยวกับพฤติกรรม ข้ามชุดข้อมูล การรันการทดลองทุกครั้งทำสามสิ่งเดียวกัน:

  1. ดึงรายการแต่ละรายการจากชุดข้อมูล
  2. รันอินพุตของรายการผ่านเอเจนต์ — runSupportConversation(...) เดียวกันที่เว็บแอปใช้ เพื่อให้รูปแบบร่องรอยเหมือนกับการใช้งานจริง
  3. ให้คะแนนเอาต์พุตจริงกับเอาต์พุตที่คาดหวัง ด้วยตัวประเมินผลหนึ่งตัวหรือมากกว่า

ตัวประเมินผลที่แตกต่างกันตอบคำถามที่แตกต่างกัน สำหรับทัวร์ที่กว้างขึ้นเกี่ยวกับประเภทตัวประเมินผลและเวลาในการเลือกประเภทใด ให้ดูบทเรียน Langfuse Academy เกี่ยวกับการประเมิน สำหรับการอบรมนี้เราใช้สองอย่างที่ให้การอ่านครั้งแรกอย่างรวดเร็ว:

  • keyword_overlap (กำหนด) — คำตอบครอบคลุมขั้นตอนที่เราคาดหวังหรือไม่? เร็ว ราคาถูก และคำนวณโดยตรงในสคริปต์การทดลอง
  • correctness (LLM-as-a-judge) — คำตอบนั้นถูกต้องจริง ๆ หรือไม่? ชัดเจนยิ่งขึ้น โดยเฉพาะอย่างยิ่งเมื่อการเขียนสามารถแตกต่างกันได้ แต่คำตอบพื้นฐานต้องตรงกับอุดมคติ

บทนี้ใช้การตั้งค่าแบบผสมตั้งแต่แรก: การตรวจสอบแบบกำหนดราคาถูกอยู่ในโค้ดถัดจากการรันการทดลอง ในขณะที่ผู้พิพากษาทางความหมายอยู่ใน Langfuse

เป้าหมาย

เมื่อสิ้นสุดบทนี้:

  1. คุณสามารถรันชุดข้อมูลเต็มกับเอเจนต์ตามต้องการ
  2. รายการทุกรายการได้รับคะแนน keyword_overlap (กำหนด) และคะแนน correctness (LLM-as-a-judge)
  3. คะแนนทั้งสองพร้อมร่องรอยต่อรายการมองเห็นได้ใน Langfuse และพร้อมสำหรับการเปรียบเทียบกับการรันในอนาคต

ขั้นตอนที่ 1 — ทำความเข้าใจสคริปต์การรัน

เปิด scripts/run-dataset.ts ไฟล์ถูกอธิบายด้วยความเห็นที่มีหมายเลข (// --- 1. Boot the OpenTelemetry SDK ..., // --- 3. The deterministic evaluator ... เป็นต้น) เพื่อให้คุณสามารถอ่านมันทีละส่วน ในระดับสูง:

  • โหลดชุดข้อมูลที่โฮสต์จาก Langfuse โดย DATASET_NAME
  • สำหรับรายการแต่ละรายการ เรียก runSupportConversation(...) เดียวกันที่เว็บแอปใช้
  • ใช้ dataset.runExperiment(...) เพื่อม้วนร่องรอยต่อรายการทั้งหมดเป็นแถวการรันเดียว
  • แนบคะแนน keyword_overlap ต่อรายการโดยเปรียบเทียบ expectedKeywords กับคำตอบของเอเจนต์

ร่องรอยที่ผลิตมีรูปแบบเดียวกับร่องรอยการใช้งานจริง — ราก dad-it-support-chat-turn เดียวกัน รุ่น OpenAI ช่วง เครื่องมือ ช่วง เราไม่ต้องการการตั้งค่า UI พิเศษสำหรับคะแนนที่กำหนดเพราะมันอยู่ในสคริปต์แล้ว

dataset.runExperiment(...) — ชิ้นส่วนที่เคลื่อนที่

การรันทั้งหมดคือการเรียกใหม่ runExperiment ก็เท่านั้น รูปแบบลดลงไป:

await dataset.runExperiment({
  name: "Dad IT Support Agent experiment",
  runName,           // unique label for this run; shows up in the Runs tab
  description: "...",
  metadata: { model: env.openaiModel },
  maxConcurrency: 1, // run items one at a time

  task: async (item) => {
    const response = await runSupportConversation({ /* item.input */ });
    return response.answer;
  },

  evaluators: [
    async ({ output, expectedOutput }) => ({
      name: "keyword_overlap",
      value: keywordOverlap(output as string, (expectedOutput as any).expectedKeywords),
      comment: "..."
    })
  ]
});

สามสิ่งที่ต้องเข้าใจ:

  • task คือ ตรรมชาติของแอปพลิเคชันของคุณ — เราเรียกตรงเข้า runSupportConversation(...) ซึ่งหมายความว่ารายการร่องรอยทุกรายการที่สคริปต์นี้ผลิตเหมือนกับร่องรอยการใช้งานจริง
  • evaluators คือรายการ ตัวประเมินผลแต่ละรายการทำงานหลังจาก task ส่งคืนและแนบคะแนนไปยังร่องรอยรายการ ที่นี่เราใช้ตัวประเมินผลที่กำหนดรายการเดียว แต่คุณสามารถเพิ่มเติมเมื่อเวลาผ่านไป
  • runName จัดกลุ่มร่องรอยต่อรายการทั้งหมดเป็นแถวเดียวในมุมมองการรัน Langfuse เลือกชื่อที่เปลี่ยนต่อการรัน (เราใส่ตราเวลา) เพื่อไม่ให้การรันสองครั้งชนกัน

ขั้นตอนที่ 2 — ตรวจสอบตัวประเมินผล keyword_overlap ที่กำหนด

ภายใน scripts/run-dataset.ts ฟังก์ชันตัวช่วยค้นหา expectedKeywords ของรายการชุดข้อมูลภายในคำตอบรุ่นและส่งกลับเศษส่วนที่ตรงกัน

ทำไมต้องเก็บไว้ในสคริปต์?

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

นี่ยังเป็นรูปแบบค่าเริ่มต้นที่ดีสำหรับทีมที่ต้องการให้ตรรมชาติการทดลองอยู่ในที่เก็บ

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

ขั้นตอนที่ 3 — ตั้งค่าตัวประเมินผล correctness ใน Langfuse

Langfuse ส่งมีเทมเพลต ความถูกต้อง LLM-as-a-judge ที่เปรียบเทียบคำตอบจริงกับคำตอบในอุดมคติและส่งกลับคะแนน เราเชื่อมมันกับการรันชุดข้อมูลเพื่อให้รายการแต่ละรายการได้รับคะแนนกำหนดในท้องถิ่นและคะแนนตัดสินความถูกต้องในรูปแบบจำลองที่ปรากฏในมุมมองการเปรียบเทียบการรัน

ตรวจสอบโครงการสดใหม่: ความถูกต้องคือตัวประเมินผล LLM-as-a-judge หากคุณไม่ได้กำหนดค่าแบบจำลองการประเมินค่าเริ่มต้นในเซสชัน 4 ให้ทำเดี๋ยวนี้: เปิด การตั้งค่าโครงการ → การเชื่อมต่อ LLM และเพิ่มคีย OpenAI ของคุณ รูปแบบนั้นเองตั้งค่าระหว่างการสร้างตัวประเมินผล — วิซาร์ด ตั้งค่าตัวประเมินผล ขอสำหรับมันในขั้นตอน การเชื่อมต่อ LLM การตั้งค่า เลือกแบบจำลองที่มีความสามารถในการส่งออกโครงสร้างเช่น openai / gpt-4.1 เมื่อตั้งค่าแล้ว มันจะปรากฏเป็น แบบจำลองเริ่มต้น ที่ด้านบนของหน้าตัวประเมินผล ที่มีคุณยังสามารถเปลี่ยนแปลงได้ในภายหลัง เก็บคีย API ในเขตข้อมูลลับ Langfuse เท่านั้น อย่าวางมันในวิถีการอบรมที่ใช้ร่วมกันหรือบันทึกย่อ

  1. ใน Langfuse เปิด ตัวประเมินผล → ตั้งค่าตัวประเมินผล และเลือก ความถูกต้อง จากรายการ ใช้ที่มีอยู่ (ตัวประเมินผลที่จัดการโดย Langfuse)

  2. กำหนดเป้าหมายการรันจากชุดข้อมูลนี้:

    • รันบน: การทดลอง (UI มักเปิดการสังเกต ดังนั้นให้สลับไปตรวจสอบก่อน)
    • ตัวกรองที่: ชุดข้อมูลเป็น 'dad-it-support-workshop'
  3. แม็ปตัวแปรเทมเพลต ใน UI ตั้งค่าดรอปดาวน์ แหล่ง ก่อน จากนั้นเพิ่มเฉพาะ JsonPath ที่จำเป็น:

    ตัวแปรฟิลด์วัตถุJsonPath
    queryอินพุต$.messages[-1].content
    generationเอาต์พุตปล่อยว่าง
    ground_truthเอาต์พุตที่คาดหวัง$.idealAnswer

    การตั้งค่าที่ทำลายทั่วไปคือการปล่อยทั้งสามตัวแปรบน อินพุต เพราะดรอปดาวน์นั้นปรากฏขึ้นก่อน ถ้า generation หรือ ground_truth ชี้ไป อินพุต ตัวประเมินผลอ่านข้อมูลที่ผิดสำหรับการรันทุกครั้ง

  4. ใช้แบบจำลองผู้พิพากษ์ที่คุณกำหนดค่าในเซสชัน 4 หรือในตรวจสอบโครงการสดใหม่ข้างบน หรือเลือกแบบจำลองผู้พิพากษ์ที่มีความสามารถในการส่งออกโครงสร้างอื่น และบันทึก

  5. เปิดใช้งานตัวประเมินผล

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

ทำไมต้องรันบน การทดลอง ที่นี่? เพราะสำหรับการอบรมนี้เราต้องการให้ correctness ปรากฏบนแถวการรันการทดลองและในมุมมองการเปรียบเทียบการรัน

การแม็ปตัวแปรความถูกต้อง

ขั้นตอนที่ 4 — รันชุดข้อมูล

npm run dataset:run

สคริปต์สิ้นสุดโดยพิมพ์บทสรุปการรันที่จัดรูปแบบในคอนโซล ร่องรอยระดับรายการและคะแนนปรากฏใน Langfuse เมื่อการรันดำเนินการ และตัวประเมินผลความถูกต้องอาจยังคงเติมคะแนนสำหรับเวลาสั้น ๆ เพราะมันทำงานอย่างอะซิงโครนัส

สคริปต์แนบ keyword_overlap ตัวเอง ตัวประเมินผลความถูกต้องที่คุณตั้งค่าในขั้นตอนที่ 3 ทำงานอย่างอะซิงโครนัสใน Langfuse บนแถวการรันใหม่เร็ว ๆ นี้

สิ่งที่ต้องตรวจสอบใน Langfuse

  • การรัน ใหม่ ภายใต้ชุดข้อมูลของคุณ — แถวหนึ่งต่อรายการที่มี สอง คะแนน: keyword_overlap และ correctness บวกลิงก์ร่องรอย
  • ร่องรอยระดับรายการ — รูปแบบเดียวกับร่องรอยการใช้งานจริง
  • มุมมองแผนภูมิ ของชุดข้อมูล → เฉลี่ยต่อการรันสำหรับคะแนนทั้งสอง พร้อมสำหรับการเปรียบเทียบแบบเคียงข้างหลังการเปลี่ยนแปลงในอนาคต

ผลลัพธ์การทดลอง

วิธีตรวจสอบว่าคุณเสร็จสิ้นแล้ว

  • แถวการรันหนึ่งแถวปรากฏภายใต้ชุดข้อมูล
  • รายการแต่ละรายการมีร่องรอยและคะแนนทั้งสองแนบ
  • รูปแบบร่องรอยตรงกับร่องรอยการใช้งานจริงปกติ

ห่อ

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

หากทีมของคุณชอบตรรมชาติการทดลองที่เพิ่มขึ้นใน UI Langfuse การตรวจสอบแบบกำหนดยังสามารถย้ายเข้าไปในตัวประเมินผลรหัสในภายหลัง เอกสาร ตัวประเมินผลรหัส ครอบคลุมเส้นทางนั้น และ การทดลองผ่าน SDK แสดงวิธีการตั้งค่าด้านรหัสพอดี

ทักษะ Langfuse (/langfuse) รู้รูปแบบตัวประเมินผลที่แนะนำและรูปแบบการตั้งค่า — การเดินนี้มีอยู่เพื่อให้คุณเห็นว่าทักษะทำอะไรอยู่เบื้องหลัง เรียนรู้เพิ่มเติมเกี่ยวกับการทดลองในบทเรียน Langfuse Academy

สถานะการสิ้นสุด

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

ในหน้านี้

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