เริ่มต้น LLM applications ด้วย LangChain.dart
LangChain ให้บริการโมดูลหลายรูปแบบที่สามารถใช้ในการสร้างแอปพลิเคชันระบบตัวตนภาษา โมดูลสามารถใช้เป็นแบบเดี่ยวในแอปพลิเคชันที่ง่าย ๆ และสามารถประกอบกันได้สำหรับกรณีการใช้ที่ซับซ้อนมากขึ้น การประกอบกันนี้ถูกขับเคลื่อนด้วยภาษา Expression Language (LCEL) ของ LangChain ซึ่งกำหนดโดยให้มีอินเทอร์เฟซ Runnable
ที่เป็นรูปแบบเดียวกันที่โมดูลหลาย ๆ อันดังนั้นจึงเป็นไปได้ที่จะเชื่อมต่อองค์ประกอบได้อย่างราบรื่น
รูปแบบที่ง่ายที่สุดและที่พบบ่อยประกอบด้วยสิ่งที่เป็นไปได้ทั้งหมด:
- LLM/Chat Model: โมเดลภาษาเป็นหัวใจของการคิดเชิงพื้นฐานที่นี่ ในการทำงานกับ LangChain คุณจำเป็นต้องเข้าใจเกี่ยวกับประเภทต่าง ๆ ของโมเดลภาษาและวิธีการทำงานกับพวกเขา
- Prompt Template: ให้คำแนะนำกับโมเดลภาษานั่นเอง ส่วนควบคุมว่าโมเดลภาษาจะส่งออกอย่างไร ดังนั้นการเข้าใจวิธีการสร้างคำแนะนำและกลยุทธ์ในการให้คำแนะนำที่แตกต่างกันจึงเป็นสิ่งสำคัญ
- Output Parser: แปลงคำตอบต้นฉบับจากโมเดลภาษาเป็นรูปแบบที่ใช้งานได้ง่ายขึ้น ทำให้ง่ายต่อการใช้งานคำตอบที่ได้ด้านล่าง
โมเดลภาษามี 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
แอปพลิเคชัน 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 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(',');
}
}
- langchain Build LLM-powered Dart/Flutter applications
- langchain_openai OpenAI module for LangChain.dart
- flutter_dotenv Load configuration at runtime from a .env file
Reference content from LangChain.dart