การสร้าง Harness ร่วมกับ Jev

@sydneyrunkle
อังกฤษ18 ก.ย. 2569
420K
2.1K
210
49
3.9K

TL;DR

บทความนี้อธิบายวิธีการผสานรวม Jev โมเดล System One ความเร็วสูงจาก TypeSafe AI เข้ากับเอเจนต์ LangChain โดยเจาะลึกความสามารถของ Jev ในการตัดสินใจแบบมีโครงสร้าง การกำหนดเส้นทางโมเดล และระบบป้องกันความปลอดภัย เพื่อเพิ่มประสิทธิภาพและลดต้นทุนการทำงานของเอเจนต์

Agents ทำงานเป็นลูป: LLM ตัดสินใจว่าจะทำอะไร, เครื่องมือ (Tool) จะทำการประมวลผล, โมเดลจะประเมินผลลัพธ์ แล้ววนซ้ำลูปนี้จนกว่างานจะเสร็จสมบูรณ์

ในช่วงแรก การนำ Agents และ LLM มาผสานรวมเข้ากับแอปพลิเคชันซอฟต์แวร์เป็นเรื่องยาก เนื่องจากซอฟต์แวร์เหล่านี้พึ่งพาข้อมูลที่มีโครงสร้างและอินเทอร์เฟซที่คาดการณ์ได้ แต่มีสององค์ประกอบพื้นฐาน (Primitives) ที่ช่วยให้กระบวนการนี้ง่ายขึ้นอย่างมาก:

แต่แม้จะมีสิ่งเหล่านั้นแล้ว ลูปของ Agent ยังคง ช้า และ มีค่าใช้จ่ายสูง: เพราะทุกการตัดสินใจต้องมีการเรียกใช้โมเดลอีกครั้ง

ขอแนะนำ Jev ซึ่งเป็นโมเดลใหม่ ที่เปิดตัวโดย TypeSafe AI ทางบริษัทรายงานว่า Jev มีประสิทธิภาพในการอนุมาน (Inference) เร็วกว่าถึง 200 เท่า และมีต้นทุนต่ำกว่า 400 เท่า เมื่อเทียบกับ LLM ที่คล้ายคลึงกันในงานจำแนกประเภท (Classification tasks)

https://x.com/CompleteSkeptic/status/2099925682726002904

บทความนี้จะอธิบายว่า Jev ทำงานอย่างไร ตำแหน่งของมันในลูปของ Agent คืออะไร และวิธีใช้งานร่วมกับ LangChain

เจาะลึกเรื่อง Jev

Jev ไม่ใช่ LLM แบบดั้งเดิม มันไม่ได้สร้างข้อความ (Generate text) แต่เป็นสิ่งที่ทีม TypeSafe AI เรียกว่า System One model:

📖 System One models คือกลุ่มของโมเดล AI ที่ถูกสร้างขึ้นเพื่อตัดสินใจอย่างรวดเร็วและมีโครงสร้าง ซึ่งซอฟต์แวร์สามารถนำไปใช้ได้โดยตรง System One model จะประเมิน

สถานะ (state) และส่งคืนคำตอบที่มีชนิดข้อมูลชัดเจน (Typed answers) พร้อมความน่าจะเป็น

มันถูกฝึกโดยใช้ Reinforcement Learning for Calibrated Decisions (RLCD) โค้ดของคุณจะใช้ผลลัพธ์เหล่านั้นเพื่อนำทางสิ่งที่ Agent จะทำต่อไป โดยไม่ต้องเรียกใช้ Chat LLM เต็มรูปแบบสำหรับการตัดสินใจแต่ละครั้ง

เพื่อเรียกใช้โมเดล Jev คุณต้องส่ง สถานะ (state) (บริบท) และ คำถาม (questions) เกี่ยวกับสถานะนั้นไปให้ นี่คือเวอร์ชันคำถามเดียวจากตัวอย่างตั๋วสนับสนุน (Support-ticket) ใน เอกสารของพวกเขา:

json
1{
2 "model": "jev-latest",
3 "state": "Hi, I've been trying to connect my Stripe account for 3 days and it keeps failing. I'm losing sales. Please help ASAP.",
4 "questions": {
5 "is_urgent": {
6 "type": "noul",
7 "instructions": "The message conveys urgency or time-sensitivity"
8 }
9 }
10}

ตัวอย่างในเอกสารให้คำตอบด้านความเร่งด่วนดังนี้ ซึ่งแสดงที่นี่โดยไม่รวมส่วนอื่นๆ ของการตอบกลับ:

json
1{
2 "is_urgent": {
3 "type": "noul",
4 "noul": 0.999
5 }
6}

นั่นคือความน่าจะเป็น 99.9% ว่าข้อความนั้นเร่งด่วน ซึ่งแอปพลิเคชันของคุณสามารถใช้เพื่อจัดลำดับความสำคัญของตั๋วได้

มีสามประเภทของ คำถาม ที่รองรับ:

Sydney Runkle - inline image
  • Choice: เลือกจากชุดตัวเลือกที่กำหนด คืนค่าความน่าจะเป็นสำหรับแต่ละตัวเลือกและคะแนนความเชื่อมั่นโดยรวม
  • Score: ให้คะแนนอินพุตตามระดับที่เป็นลำดับ เช่น ต่ำ กลาง และสูง คืนค่าคะแนนต่อเนื่อง การกระจายตัวเบื้องหลัง และค่าความเชื่อมั่น
  • Noul: ตอบคำถามแบบใช่หรือไม่ใช่ (Yes-or-no) คืนค่าความน่าจะเป็นที่ประโยคหนึ่งจะเป็นจริง

ฟีเจอร์สำคัญอย่างหนึ่งคือคุณสามารถถามหลายคำถามเกี่ยวกับสถานะเดียวกันได้ในคำขอเดียว

💡 System One models ประเมินทุกคำถามในคำขอแบบขนาน (Parallel) การเพิ่มคำถามแทบไม่ส่งผลต่อเวลาตอบสนอง และมีค่าใช้จ่ายเพียงโทเคนสำหรับคำถามเพิ่มเติมเท่านั้น ซึ่งมีราคาถูก

สำหรับตัวอย่างการถามหลายคำถามเกี่ยวกับตั๋วสนับสนุน ดูที่ TypeSafe Quickstart

สรุปได้ว่า ต่างจาก LLM แบบดั้งเดิม Jev ไม่ได้ถูกจำกัดด้วยการสร้างข้อความหรือการตัดสินใจแบบลำดับ!

วิธีใช้ Jev ร่วมกับ LangChain

โมเดลที่ไม่ผูกติดกับผู้ให้บริการรายใดรายหนึ่ง (Provider agnostic) ของ LangChain เหมาะสมอย่างยิ่งสำหรับการรองรับ Jev alongside การเชื่อมต่อและผู้ให้บริการโมเดลอีกนับพันราย

การผสานรวมกับ LangChain เปิดให้เข้าถึง Jev ผ่านทาง TypeSafeClassifier คุณส่งสถานะและคำถามไปยัง .invoke() และได้รับผลลัพธ์จากการจำแนกประเภทแทนที่จะเป็นการตอบกลับแบบแชท

ติดตั้ง langchain-typesafe และตั้งค่า TYPESAFE_API_KEY ของคุณ จากนั้นทำการเรียกใช้:

python
1from langchain_typesafe import Noul, TypeSafeClassifier
2
3classifier = TypeSafeClassifier()
4
5response = classifier.invoke(
6 state=(
7 "The deploy failed twice and customers are seeing 500s. "
8 "Can someone look now?"
9 ),
10 questions={
11 "urgent": Noul(
12 instructions="Does this need attention right now?"
13 ),
14 },
15)
16
17urgency = response.nouls["urgent"].noul

สถานะ (State) สามารถเป็นข้อความ ข้อมูลที่มีโครงสร้าง หรือข้อความของ LangChain ก็ได้ ทำให้สามารถเรียกใช้ Jev จาก Node หรือ Middleware hook โดยใช้บริบทที่ Agent มีอยู่แล้วได้อย่างง่ายดาย

คุณสามารถสร้างสิ่งนี้ลงใน Custom middleware หรือ Tools ได้!

กรณีการใช้งาน

Jev ไม่ใช่ตัวแทนทดแทน (Drop-in replacement) สำหรับ LLM มันไม่ได้สร้างข้อความ แต่สามารถจัดการงานจำแนกประเภทที่เรามักใช้ LLM ทำในปัจจุบันได้ โดยไม่มี Latency และค่าใช้จ่ายเท่าเดิม สิ่งนี้ทำให้มันเป็นส่วนเสริมที่มีศักยภาพสำหรับโมเดลที่ขับเคลื่อน Agent ของคุณ: ใช้ LLM สำหรับการให้เหตุผลและการสร้างเนื้อหาแบบเปิดกว้าง และใช้ Jev สำหรับการตัดสินใจที่มีโครงสร้างและรวดเร็วระหว่างทาง

การกำหนดเส้นทางโมเดล (Model routing)

การค้นหาข้อมูลง่ายๆ ไม่จำเป็นต้องใช้โมเดลเดียวกับงานดีบักที่ยากลำบาก Model-routing middleware ช่วยให้ Jev ประเมินคำขอและเลือกโมเดลตามเกณฑ์ที่คุณกำหนด ดังนั้นจึงรวดเร็วและประหยัดสำหรับงานตรงไปตรงมา และมีความสามารถสูงขึ้นสำหรับงานที่ซับซ้อน

python
1from langchain.agents import create_agent
2from langchain_typesafe.experimental.middleware import (
3 ModelChoice,
4 ModelRouterMiddleware,
5)
6
7router = ModelRouterMiddleware(
8 choices={
9 "fast": ModelChoice(
10 model="openai:luna",
11 criteria="Direct lookups, extraction, and localized changes.",
12 ),
13 "powerful": ModelChoice(
14 model="openai:sol",
15 criteria="Architecture and high-stakes decisions.",
16 ),
17 },
18 instructions="Choose the least costly model that can complete the task.",
19)
20
21agent = create_agent("openai:gpt-5.6-luna", middleware=[router])

Router จะเลือกโมเดลจากข้อความล่าสุดของผู้ใช้และใช้อย่างต่อเนื่องตลอดการทำงาน ความน่าจะเป็นและคะแนนความเชื่อมั่นยังคงพร้อมใช้งานในสถานะของ Agent ด้วย

Auto Mode

Agent ยังคงมีความไม่น่าเชื่อถือโดยธรรมชาติ Agent อาจได้รับคำแนะนำที่ไม่ดี (ไม่ว่าจะโดยบังเอิญหรือจากผู้โจมตีที่มีความตั้งใจเพียงพอ) ซึ่งอาจโน้มน้าวให้มันดำเนินการที่เราไม่ต้องการ

Coding harnesses อย่าง claude, codex, cursor ได้ปล่อยฟีเจอร์บางอย่างเพื่อจำแนกการกระทำที่เป็นอันตราย ก่อน ที่มันจะเกิดขึ้น ซึ่งช่วยสร้างความเชื่อมั่นใน Agent ขึ้นทีละนิด จนถึงตอนนี้ ขั้นตอนการจำแนกประเภทนี้ถูกซ่อนอยู่ในส่วน Closed source ของ Harness เหล่านั้น

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

python
1from langchain.agents import create_agent
2from langchain_typesafe.experimental.middleware import (
3 AutoModeMiddleware,
4)
5
6guardrail = AutoModeMiddleware(tools=["bash"])
7
8agent = create_agent("openai:gpt-5.6-luna", middleware=[guardrail])

AutoModeMiddleware ใช้ Jev เพื่อตรวจสอบการเรียกใช้ Tools สำหรับการตัดสินใจที่อาจมีความเสี่ยง และบล็อกการเรียกใช้ก่อนที่ Tool จะทำงาน

เริ่มต้นเลย!

เราตื่นเต้นมากเกี่ยวกับ Jev และความเป็นไปได้ที่มาพร้อมกับมัน โครงการเจ๋งๆ บางอย่างที่เห็นแล้ว: Kyle Jeong จาก Browserbase กำลังขับเคลื่อน Agent ที่ใช้เบราว์เซอร์ด้วยต้นทุนเพียงเศษเสี้ยวของเซนต์, Jarrod Watts สร้าง Agent สำหรับเทรดสด และ Ryan Vogel กำลังทำ Email triage ในขนาดใหญ่

โมเดลใหม่ออกมาทุกสัปดาห์ในเวลานี้ แต่ตัวนี้ได้รับการตอบรับที่ดีเป็นพิเศษ เราตื่นเต้นที่จะได้เห็นสิ่งที่คุณสร้างด้วย LangChain และ Jev

บอกความคิดเห็นของคุณได้ที่ ฟอรัม, แท็กเราบน X และแชร์สิ่งที่คุณกำลังสร้าง หรือมีส่วนร่วมใน LangChain issues!

คำขอบคุณ

ขอบคุณ @huntlovell, @hwchase, @ccurme, @veryboldbagel และ Nathan Drenzer สำหรับการรีวิวอย่างละเอียดอ่อนและการมีส่วนร่วม

บันทึกในคลิกเดียว

อ่านบทความไวรัลเชิงลึกด้วย AI ใน YouMind

บันทึกแหล่งที่มา ถามคำถามที่ตรงประเด็น สรุปข้อโต้แย้ง และเปลี่ยนบทความไวรัลให้เป็นโน้ตที่นำกลับมาใช้ได้ใน AI เวิร์กสเปซเดียว

สำรวจ YouMind
สำหรับครีเอเตอร์

เปลี่ยน Markdown ของคุณให้เป็นบทความ 𝕏 ที่สะอาดตา

เวลาคุณเผยแพร่งานเขียนยาวของตัวเอง การจัดรูปแบบรูปภาพ ตาราง และบล็อกโค้ดให้เข้ากับ 𝕏 นั้นน่าปวดหัว YouMind เปลี่ยนร่าง Markdown ทั้งฉบับให้เป็นบทความ 𝕏 ที่สะอาดตาและพร้อมโพสต์ทันที

ลอง Markdown เป็น 𝕏

แพตเทิร์นให้ถอดรหัสเพิ่มเติม

บทความไวรัลล่าสุด

สำรวจบทความไวรัลเพิ่มเติม