Skip to content

Sumat-Dev/flutter-langchain-example-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flutter Langchain Example App

เริ่มต้น LLM applications ด้วย LangChain.dart

🦜️🔗 สร้างด้วยแอปพลิเคชั่นด้วย LangChain.dart

LangChain ให้บริการโมดูลหลายรูปแบบที่สามารถใช้ในการสร้างแอปพลิเคชันระบบตัวตนภาษา โมดูลสามารถใช้เป็นแบบเดี่ยวในแอปพลิเคชันที่ง่าย ๆ และสามารถประกอบกันได้สำหรับกรณีการใช้ที่ซับซ้อนมากขึ้น การประกอบกันนี้ถูกขับเคลื่อนด้วยภาษา Expression Language (LCEL) ของ LangChain ซึ่งกำหนดโดยให้มีอินเทอร์เฟซ Runnable ที่เป็นรูปแบบเดียวกันที่โมดูลหลาย ๆ อันดังนั้นจึงเป็นไปได้ที่จะเชื่อมต่อองค์ประกอบได้อย่างราบรื่น

รูปแบบที่ง่ายที่สุดและที่พบบ่อยประกอบด้วยสิ่งที่เป็นไปได้ทั้งหมด:

  1. LLM/Chat Model: โมเดลภาษาเป็นหัวใจของการคิดเชิงพื้นฐานที่นี่ ในการทำงานกับ LangChain คุณจำเป็นต้องเข้าใจเกี่ยวกับประเภทต่าง ๆ ของโมเดลภาษาและวิธีการทำงานกับพวกเขา
  2. Prompt Template: ให้คำแนะนำกับโมเดลภาษานั่นเอง ส่วนควบคุมว่าโมเดลภาษาจะส่งออกอย่างไร ดังนั้นการเข้าใจวิธีการสร้างคำแนะนำและกลยุทธ์ในการให้คำแนะนำที่แตกต่างกันจึงเป็นสิ่งสำคัญ
  3. Output Parser: แปลงคำตอบต้นฉบับจากโมเดลภาษาเป็นรูปแบบที่ใช้งานได้ง่ายขึ้น ทำให้ง่ายต่อการใช้งานคำตอบที่ได้ด้านล่าง

LLM/Chat Model

โมเดลภาษามี 2 ประเภท

  • LLM: โมเดลพื้นฐานรับข้อความ (String)เป็นอินพุตและส่งกลับข้อความ (String)
  • ChatModel: โมเดลพื้นฐานรับรายการข้อความเป็นอินพุตและส่งคืนข้อความ

ข้อความพื้นฐานถูกกำหนดโดย ChatMessage ซึ่งมีคุณลักษณะ (Attribute) ที่จำเป็น 2 รายการ

  • content: เนื้อหาของข้อความ(Message) มักจะเป็นสตริง (String)
  • role: คือลักษณะเฉพาะ (Entity) ที่ ChatMessage ส่งมา

LangChain มี Object มากมายเพื่อแยกแยะความแตกต่างระหว่างบทบาทที่แตกต่างกันได้อย่างง่ายดาย

  • HumanChatMessage : ChatMessage มาจากมนุษย์/ผู้ใช้
  • AIChatMessage : ChatMessage มาจาก AI/ผู้ช่วย
  • SystemChatMessage : ChatMessage มาจากระบบ
  • FunctionChatMessage/ ToolChatMessage : ChatMessage ที่มีเอาต์พุตของการเรียกใช้ฟังก์ชันหรือการเรียกใช้เครื่องมือ

หากไม่มีบทบาทใดที่ฟังดูถูกต้อง ก็ยังมี CustomChatMessage คลาสที่คุณสามารถระบุบทบาทด้วยตนเองได้

LangChain มีอินเทอร์เฟซทั่วไปที่ใช้ร่วมกันโดยทั้ง LLMs และ ChatModels อย่างไรก็ตาม การทำความเข้าใจความแตกต่างเพื่อสร้างคำแนะนำสำหรับโมเดลภาษาที่กำหนดได้อย่างมีประสิทธิภาพสูงสุดจะเป็นประโยชน์

วิธีที่ง่ายที่สุดในการเรียก LLM หรือ ChatModel คือการใช้ .invoke() วิธีการเรียกพื้นฐานสำหรับ LangChain Expression Language (LCE)

LLM.invoke : รับค่าสตริง ส่งคืนสตริง ChatModel.invoke : รับรายการ ChatMessage ส่งคืน ChatMessage

Prompt templates

แอปพลิเคชัน LLM ส่วนใหญ่จะไม่ผ่านการป้อนข้อมูลของผู้ใช้โดยตรงไปยังไฟล์ LLM โดยปกติแล้วพวกเขาจะเพิ่มการป้อนข้อมูลของผู้ใช้ลงในข้อความขนาดใหญ่ที่เรียกว่า Prompt templates ที่ให้บริบทเพิ่มเติมเกี่ยวกับงานเฉพาะที่มีอยู่

Example

final prompt = PromptTemplate.fromTemplate(
  'What is a good name for a company that makes {product}?',
);

final res = prompt.format({'product': 'colorful socks'});
print(res);
// 'What is a good name for a company that makes colorful socks?'

Output Parser

Output Parsers คือ เครื่องมือที่แปลงผลลัพธ์ของ LLM จากรูปแบบของข้อความเป็นรูปแบบที่สามารถนำไปใช้งานได้ต่อไป

มีประเภทหลักๆ ของ Output Parsers ดังนี้

  • แปลงข้อความจาก LLM -> ข้อมูลโครงสร้าง (เช่น JSON)
  • แปลงข้อความ ChatMessage เป็น string เพียงอย่างเดียว
  • แปลงข้อมูลเพิ่มเติมที่ส่งคืนจากการเรียกใช้ฟังก์ชันนอกเหนือจากข้อความ (เช่น OpenAI function invocation) เป็น string สำหรับข้อมูลเพิ่มเติมเกี่ยวกับนี้ ดูในส่วนเกี่ยวกับ output parsers

Example

class CommaSeparatedListOutputParser 
    extends BaseOutputParser<ChatResult, OutputParserOptions, List<String>> {
  
  const CommaSeparatedListOutputParser()
      : super(defaultOptions: const OutputParserOptions());

  @override
  Future<List<String>> invoke(
      final ChatResult input, {
      final OutputParserOptions? options,
  }) async {
    final message = input.output;
    return message.content.trim().split(',');
  }
}

Dart packages

Reference

Reference content from LangChain.dart

About

เริ่มต้น LLM Applications ด้วย LangChain.dart

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published