ฟังก์ชัน AI: แปลงข้อมูลตามขนาดด้วย LLM

ฟังก์ชัน AI ใน Microsoft Fabric ใช้การแปลงแบบบรรทัดเดียวที่ขับเคลื่อนด้วย LLM กับแพนด้าขนาดใหญ่หรือ PySpark DataFrames ด้วยโค้ดdf.ai.<function_name>()หนึ่งบรรทัด พวกเขาทํางานพร้อมกันสูงโดยการเรียกการอนุมานแบบอะซิงโครนัสหลายร้อยครั้งในขณะที่ยังคงแยกเนื้อหาระดับแถว วิธีการนี้ช่วยให้คุณสามารถเพิ่มคุณค่า จําแนก สรุป และแยกข้อมูลได้อย่างรวดเร็วจากข้อความและเอกสารที่ไม่มีโครงสร้างในวงกว้าง

ใช้ตารางนี้เพื่อข้ามไปยังตัวอย่างในภาพรวมนี้หรือเอกสารประกอบเกี่ยวกับแพนด้าและ PySpark โดยละเอียด

Function คำอธิบาย เอกสารโดยละเอียด
ai.analyze_sentiment ตรวจจับสภาวะทางอารมณ์ของข้อความที่ป้อน ตัวอย่าง. แพนด้าPySpark
ai.classify จัดหมวดหมู่ข้อความที่ป้อนตามป้ายกํากับของคุณ ตัวอย่าง. แพนด้าPySpark
ai.embed สร้างการฝังเวกเตอร์สําหรับข้อความที่ป้อน ตัวอย่าง. แพนด้าPySpark
ai.extract แยกฟิลด์ เช่น ตําแหน่งที่ตั้ง ชื่อ หรือเอนทิตีแบบกําหนดเอง ตัวอย่าง. แพนด้าPySpark
ai.fix_grammar การสะกดคํา ไวยากรณ์ และเครื่องหมายวรรคตอนที่ถูกต้อง ตัวอย่าง. แพนด้าPySpark
ai.generate_response สร้างคําตอบตามคําแนะนําของคุณ ตัวอย่าง. แพนด้าPySpark
ai.similarity เปรียบเทียบความหมายของข้อความกับค่าหนึ่งหรือคอลัมน์อื่น ตัวอย่าง. แพนด้าPySpark
ai.summarize สรุปข้อมูลข้อความ ไฟล์ หรือแถว ตัวอย่าง. แพนด้าPySpark
ai.translate แปลข้อความที่ป้อนเป็นภาษาอื่น ตัวอย่าง. แพนด้าPySpark

คุณสามารถใช้ฟังก์ชัน AI ในสมุดบันทึกที่มีแพนด้าหรือ PySpark ในคิวรี SQL และใน Dataflow Gen2 Fabric จัดการการตั้งค่าปลายทางสําหรับโมเดลในตัว

ใช้ฟังก์ชัน AI ในประสบการณ์ Fabric

ฟังก์ชัน AI พร้อมใช้งานในประสบการณ์ Fabric หลายแบบ:

  • สมุดบันทึก: ใช้ pandas และ PySpark API เพื่อเพิ่ม DataFrames ในเวิร์กโฟลว์วิทยาศาสตร์ข้อมูลและวิศวกรรมข้อมูล
  • ตําแหน่งข้อมูลการวิเคราะห์คลังสินค้าและ SQL: ใช้ ฟังก์ชัน AI ในคลังสินค้าหรือปลายทางการวิเคราะห์ SQL เพื่อเรียกใช้ฟังก์ชันที่มีรูปแบบ SQL เช่น ai_summarize, ai_classifyและ ai_generate_response โดยตรงในคิวรี T-SQL
  • กระแสข้อมูล Gen2: ใช้พรอมต์ AI Fabric ในกระแสข้อมูล Gen2 เพื่อเพิ่มคอลัมน์ที่สร้างโดย AI ใน Power Query

ใช้ฟังก์ชัน AI แบบหลายรูปแบบ

ฟังก์ชัน AI แบบหลายรูปแบบประมวลผลรูปภาพ PDF และไฟล์ข้อความนอกเหนือจากค่าข้อความ ใช้เพื่อสรุป PDF จําแนกรูปภาพ แยกฟิลด์เอกสาร หรือสร้างการตอบกลับที่มีพื้นฐานมาจากเนื้อหาไฟล์

ประเภทไฟล์ที่รองรับ ได้แก่ JPG/JPEG, PNG, GIF แบบคงที่, WebP, PDF, MD, TXT, CSV, TSV, JSON, XML, PY และไฟล์ข้อความอื่นๆ ตั้งอยู่ในแพ column_type="path" นด้าหรือ input_col_type ใน col_types PySpark สําหรับตัวอย่าง โปรดดู ใช้อินพุตหลายรูปแบบกับฟังก์ชัน AI

Prerequisites

Note

  • ฟังก์ชัน AI ได้รับการสนับสนุนใน Fabric Runtime 1.3 และใหม่กว่า
  • ฟังก์ชัน AI [pandas, PySpark, Dataflow Gen2 และ Datawarehouse SQL] มีค่าเริ่มต้นเป็น gpt-5-mini โดยตั้งค่าreasoning_effortเป็นlow โมเดลนี้มีหน้าต่างบริบท 400,000 โทเค็นและเอาต์พุตสูงสุด 128,000 โทเค็น สําหรับขีดจํากัดและอัตราของโมเดล โปรดดูตารางโมเดลภาษา
  • ฟังก์ชัน AI จะไม่บันทึกหรือจัดเก็บข้อความแจ้งของผู้ใช้ ข้อมูลอินพุต หรือเอาต์พุต

โมเดลและผู้ให้บริการ

ฟังก์ชัน AI ใช้ตําแหน่งข้อมูล Fabric ในตัวตามค่าเริ่มต้น คุณยังสามารถกําหนดค่า pandas และ PySpark AI Functions เพื่อใช้ LLM ใดๆ ที่รองรับ chat_completions หรือ responses API ได้แก่:

  • โมเดล Azure OpenAI
  • โมเดล Microsoft Foundry เช่น Qwen, Kimi, Grok, LLaMA, Mistral และอื่นๆ

สําหรับตัวเลือกการกําหนดค่า โปรดดู ปรับแต่งฟังก์ชัน AI ด้วยแพนด้า และ ปรับแต่งฟังก์ชัน AI ด้วย PySpark

ตั้งค่าฟังก์ชัน AI

ฟังก์ชัน AI รองรับแพนด้าในรันไทม์ Python และ PySpark และ PySpark ในรันไทม์ PySpark ติดตั้งเฉพาะแพ็คเกจที่รันไทม์ของคุณต้องการ

ติดตั้งการพึ่งพา

รันไทม์ การพึ่งพา
แพนด้า (รันไทม์ Python) ติดตั้งsynapseml_internalsynapseml_coreและล้อ files. ติดตั้ง openai เวอร์ชัน 1.99.5 หรือใหม่กว่าเฉพาะในกรณีที่คุณต้องการพฤติกรรมไคลเอ็นต์ดั้งเดิมของ SDK หรือตัวอย่างรูปแบบการตอบสนอง Pydantic
แพนด้า (Fabric Runtime 2.0 พร้อม PySpark 4.1 และ Python 3.13) ติดตั้ง nest_asyncioชั่วคราว ติดตั้ง openai เวอร์ชัน 1.99.5 หรือใหม่กว่าเฉพาะในกรณีที่คุณต้องการพฤติกรรมไคลเอ็นต์ดั้งเดิมของ SDK หรือตัวอย่างรูปแบบการตอบสนอง Pydantic
แพนด้า (รันไทม์ PySpark อื่นๆ) ไม่จําเป็นต้องติดตั้งสําหรับการใช้งานส่วนใหญ่ ติดตั้ง openai เวอร์ชัน 1.99.5 หรือใหม่กว่าเฉพาะในกรณีที่คุณต้องการพฤติกรรมไคลเอ็นต์ดั้งเดิมของ SDK หรือตัวอย่างรูปแบบการตอบสนอง Pydantic
PySpark (รันไทม์ PySpark) ไม่จําเป็นต้องติดตั้ง

Note

  • การติดตั้งnest_asyncioเป็นแพตช์ความเข้ากันได้ชั่วคราวสําหรับฟังก์ชัน AI ของแพนด้าใน Fabric Runtime 2.0 ข้อกําหนดนี้จะถูกลบออกในการอัปเดตในอนาคต
  • ฟังก์ชัน PySpark AI ไม่จําเป็นต้องมีขั้นตอนการติดตั้งเพิ่มเติมในรันไทม์ Fabric Spark

Fabric Runtime 2.0 ซึ่งใช้ Python 3.13 และ PySpark 4.1 ไม่ได้รวมแพ็คเกจโดยnest_asyncioกําเนิด หากต้องการใช้ pandas AI Functions ในรันไทม์นี้ ให้ติดตั้ง nest_asyncio เป็นแพตช์ความเข้ากันได้ชั่วคราว ในการอัปเดตในอนาคต ข้อกําหนดนี้จะถูกลบออกเนื่องจาก pandas AI Functions สามารถใช้แพ็คเกจที่ใหม่กว่า nest_asyncio2 ซึ่งติดตั้งไว้ล่วงหน้าใน Fabric Runtime 2.0

# Temporary compatibility patch for Fabric Runtime 2.0.
%pip install -q nest_asyncio 2>/dev/null

# Optional: install openai version 1.99.5 or later for SDK-native client behavior.
%pip install -q openai 2>/dev/null

นําเข้าไลบรารีที่จําเป็น

นําเข้าไลบรารี AI Functions สําหรับรันไทม์ของคุณ

# Required imports
import synapse.ml.aifunc as aifunc
import pandas as pd

ใช้ฟังก์ชันตัวช่วยสําหรับไฟล์และสคีมา

ฟังก์ชัน AI ประกอบด้วยตัวช่วยสําหรับเวิร์กโฟลว์หลายรูปแบบ:

  • aifunc.load: นําเข้าไฟล์จากโฟลเดอร์ลงในตารางที่มีโครงสร้าง คุณสามารถระบุพร้อมท์หรือสคีมา
  • aifunc.list_file_paths: แจกแจงไฟล์ URL และเส้นทางจากโฟลเดอร์เพื่อใช้เป็นอินพุตไปยังฟังก์ชัน AI ใดๆ
  • ai.infer_schema: อนุมานสคีมาการแยกจากเนื้อหาไฟล์เพื่อใช้กับai.extract

สําหรับตัวอย่าง โปรดดู ใช้อินพุตหลายรูปแบบกับฟังก์ชัน AI

ใช้ฟังก์ชัน AI

ตัวอย่างต่อไปนี้แสดงฟังก์ชัน AI หลักสําหรับแพนด้าและ PySpark ฟังก์ชัน PySpark AI ทํางานเป็นการแปลง Spark แบบกระจายทั่วทั้งคลัสเตอร์ Fabric Spark

Note

ฟังก์ชัน AI ส่วนใหญ่รองรับเส้นทางไฟล์ใน column_type="path" แพนด้าหรือ input_col_type/col_types="path" ใน PySpark สําหรับตัวอย่าง โปรดดู ใช้อินพุตหลายรูปแบบกับฟังก์ชัน AI

Tip

โมเดล Python เริ่มต้นคือ gpt-5-mini .reasoning_effort="low" หากต้องการเปลี่ยนโมเดลหรือการตั้งค่าการปรับแต่ง โปรดดู การกําหนดค่าแพนด้า หรือ การกําหนดค่า PySpark

ai.analyze_sentiment: ตรวจจับความคิดเห็น

ฟังก์ชันจะ ai.analyze_sentiment ติดป้ายกํากับแต่ละอินพุตเป็นบวก ลบ ผสม หรือเป็นกลาง คุณยังสามารถระบุป้ายชื่อแบบกําหนดเองได้อีกด้วย

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([
        "The cleaning spray permanently stained my beautiful kitchen counter. Never again!",
        "I used this sunscreen on my vacation to Florida, and I didn't get burned at all. Would recommend.",
        "I'm torn about this speaker system. The sound was high quality, though it didn't connect to my roommate's phone.",
        "The umbrella is OK, I guess."
    ], columns=["reviews"])

df["sentiment"] = df["reviews"].ai.analyze_sentiment()
display(df)

สกรีนช็อตของกรอบข้อมูลที่มีคอลัมน์

ai.classify: จัดหมวดหมู่ข้อความ

ฟังก์ชันจะ ai.classify จัดประเภทข้อความที่ป้อนโดยใช้ป้ายชื่อที่คุณให้ไว้

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([
        "This duvet, lovingly hand-crafted from all-natural fabric, is perfect for a good night's sleep.",
        "Tired of friends judging your baking? With these handy-dandy measuring cups, you'll create culinary delights.",
        "Enjoy this *BRAND NEW CAR!* A compact SUV perfect for the professional commuter!"
    ], columns=["descriptions"])

df["category"] = df['descriptions'].ai.classify("kitchen", "bedroom", "garage", "other")
display(df)

สกรีนช็อตของกรอบข้อมูลที่มีคอลัมน์

ai.embed: สร้างการฝังเวกเตอร์

ฟังก์ชันนี้จะ ai.embed แปลงข้อความเป็นเวกเตอร์ตัวเลขที่จับความหมาย ใช้การฝังสําหรับการค้นหาความคล้ายคลึงกัน การดึงข้อมูล และเวิร์กโฟลว์การเรียนรู้ของเครื่อง

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([
        "This duvet, lovingly hand-crafted from all-natural fabric, is perfect for a good night's sleep.",
        "Tired of friends judging your baking? With these handy-dandy measuring cups, you'll create culinary delights.",
        "Enjoy this *BRAND NEW CAR!* A compact SUV perfect for the professional commuter!"
    ], columns=["descriptions"])
    
df["embed"] = df["descriptions"].ai.embed()
display(df)

สกรีนช็อตของกรอบข้อมูลที่มีคอลัมน์ 'descriptions' และ 'embed' คอลัมน์ 'ฝัง' มีเวกเตอร์ฝังตัวสําหรับคําอธิบาย

ai.extract: แยกเอนทิตี

ฟังก์ชันจะ ai.extract แยกฟิลด์ เช่น ชื่อ ตําแหน่ง หรือเอนทิตีแบบกําหนดเองจากข้อความที่ป้อนเข้า

ป้ายชื่อที่มีโครงสร้าง

ใช้ ExtractLabel เมื่อคุณต้องการการแยกแบบพิมพ์ รองรับโครงสร้าง JSON Schema เช่น ฟิลด์ที่พิมพ์, enums, อาร์เรย์, วัตถุที่ซ้อนกัน, ค่าที่ว่างได้, คุณสมบัติที่จําเป็น และ additionalProperties=false. ตัวอย่างเช่น ดูแพนด้าหรือ PySpark

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([
        "MJ Lee lives in Tucson, AZ, and works as a software engineer for Microsoft.",
        "Kris Turner, a nurse at NYU Langone, is a resident of Jersey City, New Jersey."
    ], columns=["descriptions"])

df_entities = df["descriptions"].ai.extract("name", "profession", "city")
display(df_entities)

สกรีนช็อตแสดงกรอบข้อมูลใหม่ที่มีคอลัมน์ 'ชื่อ' 'อาชีพ' และ 'เมือง' ซึ่งมีข้อมูลที่ดึงมาจากกรอบข้อมูลเดิม

ai.fix_grammar: แก้ไขไวยากรณ์

ฟังก์ชันนี้ ai.fix_grammar แก้ไขการสะกด ไวยากรณ์ และเครื่องหมายวรรคตอน

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([
        "There are an error here.",
        "She and me go weigh back. We used to hang out every weeks.",
        "The big picture are right, but you're details is all wrong."
    ], columns=["text"])

df["corrections"] = df["text"].ai.fix_grammar()
display(df)

ภาพหน้าจอแสดงกรอบข้อมูลที่มีคอลัมน์ 'ข้อความ' และคอลัมน์ 'การแก้ไข' ซึ่งมีข้อความจากคอลัมน์ข้อความที่มีไวยากรณ์ที่แก้ไขแล้ว

ai.generate_response: ใช้ข้อความแจ้งผู้ใช้ที่กําหนดเอง

ฟังก์ชันนี้ ai.generate_response สร้างข้อความที่กําหนดเองจากข้อความแจ้งและข้อมูลแถวของคุณ

พารามิเตอร์เพิ่มเติม

ใช้ response_format เมื่อคุณต้องการเอาต์พุตที่มีโครงสร้าง รวมถึงออบเจ็กต์ JSON, JSON Schema หรือโมเดล Pydantic ตัวอย่างเช่น ดูแพนด้าหรือ PySpark

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([
        ("Scarves"),
        ("Snow pants"),
        ("Ski goggles")
    ], columns=["product"])

df["response"] = df.ai.generate_response("Write a short, punchy email subject line for a winter sale.")
display(df)

สกรีนช็อตแสดงกรอบข้อมูลที่มีคอลัมน์ 'product' และ 'response' คอลัมน์ 'การตอบกลับ' ประกอบด้วยหัวเรื่องที่เจาะลึกสําหรับผลิตภัณฑ์

ai.similarity: คํานวณความคล้ายคลึงกัน

ฟังก์ชันจะ ai.similarity เปรียบเทียบค่าอินพุตแต่ละค่ากับค่าอ้างอิงหนึ่งค่าหรือกับค่าในคอลัมน์อื่น คะแนนมีตั้งแต่ -1 ความหมายตรงกันข้ามไปจนถึง 1 ความหมายที่เหมือนกัน

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([ 
        ("Bill Gates", "Technology"), 
        ("Satya Nadella", "Healthcare"), 
        ("Joan of Arc", "Agriculture") 
    ], columns=["names", "industries"])
    
df["similarity"] = df["names"].ai.similarity(df["industries"])
display(df)

สกรีนช็อตของกรอบข้อมูลที่มีคอลัมน์ 'ชื่อ', 'อุตสาหกรรม' และ 'ความคล้ายคลึงกัน' คอลัมน์ 'ความคล้ายคลึงกัน' มีคะแนนความคล้ายคลึงกันสําหรับชื่อและอุตสาหกรรม

ai.summarize: สรุปข้อความ

ฟังก์ชันจะ ai.summarize สรุปข้อความ เนื้อหาไฟล์ คอลัมน์เดียว หรือคอลัมน์ทั้งหมดในแต่ละแถว

การปรับแต่งข้อมูลสรุปด้วยวิธีการ

ใช้เพื่อ instructions ควบคุมน้ําเสียง ความยาว ผู้ชม หรือโฟกัส ตัวอย่างเช่น ดูแพนด้าหรือ PySpark

# This code uses AI. Always review output for mistakes.

df= pd.DataFrame([
        ("Microsoft Teams", "2017",
        """
        The ultimate messaging app for your organization—a workspace for real-time 
        collaboration and communication, meetings, file and app sharing, and even the 
        occasional emoji! All in one place, all in the open, all accessible to everyone.
        """),
        ("Microsoft Fabric", "2023",
        """
        An enterprise-ready, end-to-end analytics platform that unifies data movement, 
        data processing, ingestion, transformation, and report building into a seamless, 
        user-friendly SaaS experience. Transform raw data into actionable insights.
        """)
    ], columns=["product", "release_year", "description"])

df["summaries"] = df["description"].ai.summarize()
display(df)

สกรีนช็อตที่แสดงกรอบข้อมูล คอลัมน์

ai.translate: แปลข้อความ

ฟังก์ชันนี้จะ ai.translate แปลข้อความเป็นภาษาอื่น

# This code uses AI. Always review output for mistakes. 

df = pd.DataFrame([
        "Hello! How are you doing today?", 
        "Tell me what you'd like to know, and I'll do my best to help.", 
        "The only thing we have to fear is fear itself."
    ], columns=["text"])

df["translations"] = df["text"].ai.translate("spanish")
display(df)

สกรีนช็อตของกรอบข้อมูลที่มีคอลัมน์ 'ข้อความ' และ 'การแปล' คอลัมน์ 'คําแปล' ประกอบด้วยข้อความที่แปลเป็นภาษาสเปน

ฟังก์ชัน Chain PySpark AI

ฟังก์ชัน PySpark AI ส่งคืน DataFrames ที่ให้ df.ai ผู้เข้าถึงผูกไว้กับสคีมาผลลัพธ์ การแปลงห่วงโซ่โดยไม่ต้องทําให้ DataFrames ระดับกลางเป็นรูปธรรม

# This code uses AI. Always review output for mistakes.

output = (
    df
    .ai.summarize(input_col="review_text", output_col="summary")
    .ai.classify(
        labels=["service", "cleanliness", "location", "other"],
        input_col="summary",
        output_col="category",
    )
)
display(output)

ดูสถิติการใช้งานด้วย ai.stats

ใช้กับ ai.stats Series หรือ DataFrame ที่สร้างโดย AI เพื่อตรวจสอบเมตริกการใช้งานและการดําเนินการ

ai.stats ส่งกลับ DataFrame ที่มีสถิติ เช่น

  • num_successful: จํานวนแถวที่ประมวลผลสําเร็จโดยฟังก์ชัน AI
  • num_exceptions: จํานวนแถวที่พบข้อยกเว้นระหว่างการดําเนินการ แถวเหล่านี้จะแสดงเป็นอินสแตนซ์ของ aifunc.ExceptionResult.
  • num_unevaluated: จํานวนแถวที่ไม่ได้ประมวลผลเนื่องจากข้อยกเว้นก่อนหน้านี้ทําให้ไม่สามารถดําเนินการประเมินต่อไปได้ แถวเหล่านี้จะแสดงเป็นอินสแตนซ์ของ aifunc.NotEvaluatedResult.
  • num_harmful: จํานวนแถวที่ถูกบล็อกโดยตัวกรองเนื้อหา Azure OpenAI แถวเหล่านี้จะแสดงเป็นอินสแตนซ์ของ aifunc.FilterResult.
  • cached_tokens: จํานวนโทเค็นอินพุตที่แคชไว้ทั้งหมด
  • input_tokens: จํานวนโทเค็นอินพุตทั้งหมดที่ใช้สําหรับการเรียกฟังก์ชัน AI
  • output_tokens: จํานวนโทเค็นเอาต์พุตทั้งหมดที่สร้างโดยโมเดล
  • reasoning_tokens: จํานวนโทเค็นการให้เหตุผลทั้งหมดที่ใช้โดยโมเดลการให้เหตุผล
  • model: ชื่อการปรับใช้โมเดลที่ใช้สําหรับการเรียกฟังก์ชัน AI

ผลลัพธ์อาจมีลักษณะเหมือนตารางนี้:

num_successful num_exceptions num_unevaluated num_harmful cached_tokens input_tokens output_tokens reasoning_tokens client_type input_types แบบจำลอง
2 0 0 0 0 555 4 0 fabric_llm_endpoint {"text": 2} GPT-5-มินิ

Tip

ใช้เพื่อ ai.stats ติดตามการใช้งาน รูปแบบข้อผิดพลาด และการใช้โทเค็น

แถวที่ถึงขีดจํากัดความจุจะแสดงเป็นอินสแตนซ์ของaifunc.CapacityExceededResult ในเวิร์กโฟลว์แพนด้า ใช้เพื่อ aifunc.split_results แยกผลลัพธ์ที่สําเร็จออกจากผลลัพธ์ที่ไม่ใช่ผลลัพธ์ เพื่อให้คุณสามารถตรวจสอบแถวที่จํากัดความจุและลองอีกครั้งหลังจากความจุพร้อมใช้งานหรือแก้ไขขีดจํากัดแล้ว

ความโปร่งใสของต้นทุน

ฟังก์ชัน AI ของแพนด้าสามารถแสดงจํานวนโทเค็นและการประมาณหน่วยความจุระหว่างการดําเนินการด้วยprogress_bar_mode="stats" สําหรับ PySpark ให้ใช้ df.ai.stats DataFrame ผลลัพธ์

แอป Fabric Capacity Metrics รายงานการใช้แบบจําลองการเรียกเป็นการดําเนินการ AI Functions โปรดดูรายละเอียดที่หัวข้อการเรียกเก็บเงินสําหรับฟังก์ชัน AI

ประเมินและเร่งความเร็ว

ใช้ สมุดบันทึกเริ่มต้น AI Functions สําหรับตัวอย่างแพนด้าและ PySpark แบบ end-to-end ใช้ สมุดบันทึก AI Functions Eval เพื่อประเมินคุณภาพผลงานก่อนการผลิต