⚡ การสร้างแอปพลิเคชันที่ขับเคลื่อนด้วย LLM ใน Ruby ⚡
สำหรับการรวม Deep Rails โปรดดู: langchainrb_rails gem
พร้อมสำหรับการให้คำปรึกษาแบบชำระเงิน! ส่งอีเมลถึงฉัน
ติดตั้ง gem และเพิ่มลงใน Gemfile ของแอปพลิเคชันโดยดำเนินการ:
bundle add langchainrb
หากไม่ได้ใช้ Bundler เพื่อจัดการการขึ้นต่อกัน ให้ติดตั้ง Gem โดยดำเนินการ:
gem install langchainrb
อาจจำเป็นต้องมีอัญมณีเพิ่มเติม โดยค่าเริ่มต้นจะไม่รวมไว้ ดังนั้นคุณจึงสามารถรวมได้เฉพาะสิ่งที่คุณต้องการเท่านั้น
require "langchain"
โมดูล Langchain::LLM
มอบอินเทอร์เฟซแบบรวมสำหรับการโต้ตอบกับผู้ให้บริการ Large Language Model (LLM) ต่างๆ นามธรรมนี้ช่วยให้คุณสามารถสลับระหว่างแบ็กเอนด์ LLM ต่างๆ ได้อย่างง่ายดายโดยไม่ต้องเปลี่ยนโค้ดแอปพลิเคชันของคุณ
คลาส LLM ทั้งหมดสืบทอดมาจาก Langchain::LLM::Base
และจัดเตรียมอินเทอร์เฟซที่สอดคล้องกันสำหรับการดำเนินการทั่วไป:
คลาส LLM ส่วนใหญ่สามารถเริ่มต้นได้ด้วยคีย์ API และตัวเลือกเริ่มต้นที่เป็นตัวเลือก:
llm = Langchain :: LLM :: OpenAI . new (
api_key : ENV [ "OPENAI_API_KEY" ] ,
default_options : { temperature : 0.7 , chat_model : "gpt-4o" }
)
ใช้วิธี embed
เพื่อสร้างการฝังสำหรับข้อความที่กำหนด:
response = llm . embed ( text : "Hello, world!" )
embedding = response . embedding
embed()
text
: (จำเป็น) ข้อความอินพุตที่จะฝังmodel
: (ไม่บังคับ) ชื่อโมเดลที่จะใช้หรือโมเดลการฝังเริ่มต้นจะถูกใช้ ใช้วิธีการ complete
เพื่อสร้างความสำเร็จสำหรับพรอมต์ที่กำหนด:
response = llm . complete ( prompt : "Once upon a time" )
completion = response . completion
complete()
prompt
: (จำเป็น) ข้อความแจ้งให้ป้อนข้อมูลให้เสร็จสิ้นmax_tokens
: (ไม่บังคับ) จำนวนโทเค็นสูงสุดที่จะสร้างtemperature
: (ไม่บังคับ) ควบคุมการสุ่มในการสร้าง ค่าที่สูงกว่า (เช่น 0.8) ทำให้เอาท์พุตสุ่มมากขึ้น ในขณะที่ค่าที่ต่ำกว่า (เช่น 0.2) ทำให้เอาท์พุตมีการกำหนดมากขึ้นtop_p
: (ไม่บังคับ) ทางเลือกแทนอุณหภูมิ ควบคุมความหลากหลายของโทเค็นที่สร้างขึ้นn
: (ไม่บังคับ) จำนวนความสำเร็จที่จะสร้างสำหรับแต่ละพรอมต์stop
: (ไม่บังคับ) ลำดับที่ API จะหยุดสร้างโทเค็นเพิ่มเติมpresence_penalty
: (ไม่บังคับ) ลงโทษโทเค็นใหม่ตามการมีอยู่ของโทเค็นในข้อความจนถึงตอนนี้frequency_penalty
: (ไม่บังคับ) ลงโทษโทเค็นใหม่ตามความถี่ในข้อความจนถึงตอนนี้ ใช้วิธี chat
เพื่อสร้างการแชทให้เสร็จสิ้น:
messages = [
{ role : "system" , content : "You are a helpful assistant." } ,
{ role : "user" , content : "What's the weather like today?" }
# Google Gemini and Google VertexAI expect messages in a different format:
# { role: "user", parts: [{ text: "why is the sky blue?" }]}
]
response = llm . chat ( messages : messages )
chat_completion = response . chat_completion
chat()
messages
: (จำเป็น) อาร์เรย์ของวัตถุข้อความที่แสดงถึงประวัติการสนทนาmodel
: (ไม่บังคับ) โมเดลแชทเฉพาะที่จะใช้temperature
: (ไม่บังคับ) ควบคุมการสุ่มในการสร้างtop_p
: (ไม่บังคับ) ทางเลือกแทนอุณหภูมิ ควบคุมความหลากหลายของโทเค็นที่สร้างขึ้นn
: (ไม่บังคับ) จำนวนตัวเลือกการจบแชทที่จะสร้างmax_tokens
: (ไม่บังคับ) จำนวนโทเค็นสูงสุดที่จะสร้างในการแชทให้เสร็จสิ้นstop
: (ไม่บังคับ) ลำดับที่ API จะหยุดสร้างโทเค็นเพิ่มเติมpresence_penalty
: (ไม่บังคับ) ลงโทษโทเค็นใหม่ตามการมีอยู่ของโทเค็นในข้อความจนถึงตอนนี้frequency_penalty
: (ไม่บังคับ) ลงโทษโทเค็นใหม่ตามความถี่ในข้อความจนถึงตอนนี้logit_bias
: (ไม่บังคับ) แก้ไขความเป็นไปได้ที่โทเค็นที่ระบุจะปรากฏเมื่อเสร็จสมบูรณ์user
: (ไม่บังคับ) ตัวระบุเฉพาะที่แสดงถึงผู้ใช้ปลายทางของคุณtools
: (ไม่บังคับ) รายการเครื่องมือที่โมเดลอาจเรียกใช้tool_choice
: (ไม่บังคับ) ควบคุมวิธีการทำงานของการเรียกโมเดล ด้วยอินเทอร์เฟซแบบรวม คุณสามารถสลับระหว่างผู้ให้บริการ LLM ต่างๆ ได้อย่างง่ายดายโดยการเปลี่ยนคลาสที่คุณสร้างอินสแตนซ์:
# Using Anthropic
anthropic_llm = Langchain :: LLM :: Anthropic . new ( api_key : ENV [ "ANTHROPIC_API_KEY" ] )
# Using Google Gemini
gemini_llm = Langchain :: LLM :: GoogleGemini . new ( api_key : ENV [ "GOOGLE_GEMINI_API_KEY" ] )
# Using OpenAI
openai_llm = Langchain :: LLM :: OpenAI . new ( api_key : ENV [ "OPENAI_API_KEY" ] )
วิธี LLM แต่ละวิธีส่งคืนออบเจ็กต์การตอบสนองที่ให้อินเทอร์เฟซที่สอดคล้องกันสำหรับการเข้าถึงผลลัพธ์:
embedding
: ส่งกลับค่าเวกเตอร์การฝังcompletion
: ส่งคืนการเติมข้อความที่สร้างขึ้นให้สมบูรณ์chat_completion
: คืนค่าการแชทที่สร้างขึ้นเสร็จสิ้นtool_calls
: ส่งคืนการเรียกเครื่องมือที่ทำโดย LLMprompt_tokens
: ส่งกลับจำนวนโทเค็นในพรอมต์completion_tokens
: ส่งกลับจำนวนโทเค็นเมื่อดำเนินการเสร็จสิ้นtotal_tokens
: ส่งกลับจำนวนโทเค็นทั้งหมดที่ใช้ บันทึก
แม้ว่าอินเทอร์เฟซหลักจะสอดคล้องกันระหว่างผู้ให้บริการ แต่ LLM บางแห่งอาจมีคุณลักษณะหรือพารามิเตอร์เพิ่มเติม ศึกษาเอกสารประกอบสำหรับชั้นเรียน LLM แต่ละชั้นเรียนเพื่อเรียนรู้เกี่ยวกับความสามารถและตัวเลือกเฉพาะของผู้ให้บริการ
สร้างพรอมต์พร้อมตัวแปรอินพุต:
prompt = Langchain :: Prompt :: PromptTemplate . new ( template : "Tell me a {adjective} joke about {content}." , input_variables : [ "adjective" , "content" ] )
prompt . format ( adjective : "funny" , content : "chickens" ) # "Tell me a funny joke about chickens."
การสร้าง PromptTemplate โดยใช้เพียงพรอมต์และไม่มี input_variables:
prompt = Langchain :: Prompt :: PromptTemplate . from_template ( "Tell me a funny joke about chickens." )
prompt . input_variables # []
prompt . format # "Tell me a funny joke about chickens."
บันทึกเทมเพลตพร้อมท์ลงในไฟล์ JSON:
prompt . save ( file_path : "spec/fixtures/prompt/prompt_template.json" )
กำลังโหลดเทมเพลตพร้อมท์ใหม่โดยใช้ไฟล์ JSON:
prompt = Langchain :: Prompt . load_from_path ( file_path : "spec/fixtures/prompt/prompt_template.json" )
prompt . input_variables # ["adjective", "content"]
สร้างพรอมต์ด้วยตัวอย่างช็อตบางส่วน:
prompt = Langchain :: Prompt :: FewShotPromptTemplate . new (
prefix : "Write antonyms for the following words." ,
suffix : "Input: {adjective} n Output:" ,
example_prompt : Langchain :: Prompt :: PromptTemplate . new (
input_variables : [ "input" , "output" ] ,
template : "Input: {input} n Output: {output}"
) ,
examples : [
{ "input" : "happy" , "output" : "sad" } ,
{ "input" : "tall" , "output" : "short" }
] ,
input_variables : [ "adjective" ]
)
prompt . format ( adjective : "good" )
# Write antonyms for the following words.
#
# Input: happy
# Output: sad
#
# Input: tall
# Output: short
#
# Input: good
# Output:
บันทึกเทมเพลตพร้อมท์ลงในไฟล์ JSON:
prompt . save ( file_path : "spec/fixtures/prompt/few_shot_prompt_template.json" )
กำลังโหลดเทมเพลตพรอมต์ใหม่โดยใช้ไฟล์ JSON:
prompt = Langchain :: Prompt . load_from_path ( file_path : "spec/fixtures/prompt/few_shot_prompt_template.json" )
prompt . prefix # "Write antonyms for the following words."
กำลังโหลดเทมเพลตพรอมต์ใหม่โดยใช้ไฟล์ YAML:
prompt = Langchain :: Prompt . load_from_path ( file_path : "spec/fixtures/prompt/prompt_template.yaml" )
prompt . input_variables #=> ["adjective", "content"]
แยกวิเคราะห์ข้อความตอบกลับ LLM ลงในเอาต์พุตที่มีโครงสร้าง เช่น JSON
คุณสามารถใช้ StructuredOutputParser
เพื่อสร้างพรอมต์ที่สั่งให้ LLM ให้การตอบสนอง JSON ที่เป็นไปตามสคีมา JSON ที่เฉพาะเจาะจง:
json_schema = {
type : "object" ,
properties : {
name : {
type : "string" ,
description : "Persons name"
} ,
age : {
type : "number" ,
description : "Persons age"
} ,
interests : {
type : "array" ,
items : {
type : "object" ,
properties : {
interest : {
type : "string" ,
description : "A topic of interest"
} ,
levelOfInterest : {
type : "number" ,
description : "A value between 0 and 100 of how interested the person is in this interest"
}
} ,
required : [ "interest" , "levelOfInterest" ] ,
additionalProperties : false
} ,
minItems : 1 ,
maxItems : 3 ,
description : "A list of the person's interests"
}
} ,
required : [ "name" , "age" , "interests" ] ,
additionalProperties : false
}
parser = Langchain :: OutputParsers :: StructuredOutputParser . from_json_schema ( json_schema )
prompt = Langchain :: Prompt :: PromptTemplate . new ( template : "Generate details of a fictional character. n {format_instructions} n Character description: {description}" , input_variables : [ "description" , "format_instructions" ] )
prompt_text = prompt . format ( description : "Korean chemistry student" , format_instructions : parser . get_format_instructions )
# Generate details of a fictional character.
# You must format your output as a JSON value that adheres to a given "JSON Schema" instance.
# ...
จากนั้นแยกวิเคราะห์การตอบสนอง llm:
llm = Langchain :: LLM :: OpenAI . new ( api_key : ENV [ "OPENAI_API_KEY" ] )
llm_response = llm . chat ( messages : [ { role : "user" , content : prompt_text } ] ) . completion
parser . parse ( llm_response )
# {
# "name" => "Kim Ji-hyun",
# "age" => 22,
# "interests" => [
# {
# "interest" => "Organic Chemistry",
# "levelOfInterest" => 85
# },
# ...
# ]
# }
หาก parser ไม่สามารถแยกวิเคราะห์การตอบสนอง LLM คุณสามารถใช้ OutputFixingParser
ได้ โดยจะส่งข้อความแสดงข้อผิดพลาด เอาต์พุตก่อนหน้า และข้อความพร้อมท์ต้นฉบับไปยัง LLM เพื่อขอคำตอบ "แก้ไขแล้ว":
begin
parser . parse ( llm_response )
rescue Langchain :: OutputParsers :: OutputParserException => e
fix_parser = Langchain :: OutputParsers :: OutputFixingParser . from_llm (
llm : llm ,
parser : parser
)
fix_parser . parse ( llm_response )
end
หรืออีกทางหนึ่ง หากคุณไม่ต้องการจัดการกับ OutputParserException
คุณสามารถลดความซับซ้อนของโค้ดได้:
# we already have the `OutputFixingParser`:
# parser = Langchain::OutputParsers::StructuredOutputParser.from_json_schema(json_schema)
fix_parser = Langchain :: OutputParsers :: OutputFixingParser . from_llm (
llm : llm ,
parser : parser
)
fix_parser . parse ( llm_response )
ดูที่นี่สำหรับตัวอย่างที่เป็นรูปธรรม
RAG เป็นวิธีการที่ช่วยให้ LLM สร้างข้อมูลที่ถูกต้องและเป็นปัจจุบัน ขั้นตอนการทำงาน RAG โดยทั่วไปมี 3 ขั้นตอนด้านล่าง:
Langchain.rb มอบอินเทอร์เฟซแบบรวมที่สะดวกสบายนอกเหนือจากฐานข้อมูล vectorsearch ที่รองรับ ซึ่งช่วยให้กำหนดค่าดัชนี เพิ่มข้อมูล สืบค้น และดึงข้อมูลได้อย่างง่ายดาย
ฐานข้อมูล | โอเพ่นซอร์ส | ข้อเสนอคลาวด์ |
---|---|---|
โครมา | ||
เอปซิลลา | ||
ฮันสลิบ | ||
มิลวัส | ✅ซิลลิซ คลาวด์ | |
ไพน์โคน | ||
Pg vector | ||
คิวดรานท์ | ||
วีเวียต | ||
การค้นหาแบบยืดหยุ่น |
เลือกฐานข้อมูลการค้นหาเวกเตอร์ที่คุณจะใช้ เพิ่มการพึ่งพาอัญมณี และสร้างอินสแตนซ์ไคลเอนต์:
gem "weaviate-ruby" , "~> 0.8.9"
เลือกและยกตัวอย่างผู้ให้บริการ LLM ที่คุณจะใช้เพื่อสร้างการฝัง
llm = Langchain :: LLM :: OpenAI . new ( api_key : ENV [ "OPENAI_API_KEY" ] )
client = Langchain :: Vectorsearch :: Weaviate . new (
url : ENV [ "WEAVIATE_URL" ] ,
api_key : ENV [ "WEAVIATE_API_KEY" ] ,
index_name : "Documents" ,
llm : llm
)
คุณสามารถสร้างฐานข้อมูลการค้นหาเวกเตอร์อื่นๆ ที่รองรับได้:
client = Langchain :: Vectorsearch :: Chroma . new ( ... ) # `gem "chroma-db", "~> 0.6.0"`
client = Langchain :: Vectorsearch :: Epsilla . new ( ... ) # `gem "epsilla-ruby", "~> 0.0.3"`
client = Langchain :: Vectorsearch :: Hnswlib . new ( ... ) # `gem "hnswlib", "~> 0.8.1"`
client = Langchain :: Vectorsearch :: Milvus . new ( ... ) # `gem "milvus", "~> 0.9.3"`
client = Langchain :: Vectorsearch :: Pinecone . new ( ... ) # `gem "pinecone", "~> 0.1.6"`
client = Langchain :: Vectorsearch :: Pgvector . new ( ... ) # `gem "pgvector", "~> 0.2"`
client = Langchain :: Vectorsearch :: Qdrant . new ( ... ) # `gem "qdrant-ruby", "~> 0.9.3"`
client = Langchain :: Vectorsearch :: Elasticsearch . new ( ... ) # `gem "elasticsearch", "~> 8.2.0"`
สร้างสคีมาเริ่มต้น:
client . create_default_schema
เพิ่มข้อมูลข้อความธรรมดาลงในฐานข้อมูลการค้นหาเวกเตอร์ของคุณ:
client . add_texts (
texts : [
"Begin by preheating your oven to 375°F (190°C). Prepare four boneless, skinless chicken breasts by cutting a pocket into the side of each breast, being careful not to cut all the way through. Season the chicken with salt and pepper to taste. In a large skillet, melt 2 tablespoons of unsalted butter over medium heat. Add 1 small diced onion and 2 minced garlic cloves, and cook until softened, about 3-4 minutes. Add 8 ounces of fresh spinach and cook until wilted, about 3 minutes. Remove the skillet from heat and let the mixture cool slightly." ,
"In a bowl, combine the spinach mixture with 4 ounces of softened cream cheese, 1/4 cup of grated Parmesan cheese, 1/4 cup of shredded mozzarella cheese, and 1/4 teaspoon of red pepper flakes. Mix until well combined. Stuff each chicken breast pocket with an equal amount of the spinach mixture. Seal the pocket with a toothpick if necessary. In the same skillet, heat 1 tablespoon of olive oil over medium-high heat. Add the stuffed chicken breasts and sear on each side for 3-4 minutes, or until golden brown."
]
)
หรือใช้ตัวแยกวิเคราะห์ไฟล์เพื่อโหลด แยกวิเคราะห์ และจัดทำดัชนีข้อมูลลงในฐานข้อมูลของคุณ:
my_pdf = Langchain . root . join ( "path/to/my.pdf" )
my_text = Langchain . root . join ( "path/to/my.txt" )
my_docx = Langchain . root . join ( "path/to/my.docx" )
client . add_data ( paths : [ my_pdf , my_text , my_docx ] )
รูปแบบไฟล์ที่รองรับ: docx, html, pdf, text, json, jsonl, csv, xlsx, eml, pptx
ดึงเอกสารที่คล้ายกันตามสตริงการสืบค้นที่ส่งผ่านใน:
client . similarity_search (
query : ,
k : # number of results to be retrieved
)
ดึงเอกสารที่คล้ายกันโดยอิงตามสตริงการสืบค้นที่ส่งผ่านเทคนิค HyDE:
client . similarity_search_with_hyde ( )
ดึงเอกสารที่คล้ายกันตามการฝังที่ส่งผ่านใน:
client . similarity_search_by_vector (
embedding : ,
k : # number of results to be retrieved
)
การสืบค้นแบบ RAG
client . ask ( question : "..." )
Langchain::Assistant
เป็นคลาสที่ทรงพลังและยืดหยุ่นที่รวม Large Language Models (LLM) เครื่องมือ และการจัดการการสนทนาเพื่อสร้างผู้ช่วยอัจฉริยะแบบโต้ตอบได้ ได้รับการออกแบบมาเพื่อจัดการกับการสนทนาที่ซับซ้อน ใช้เครื่องมือ และให้คำตอบที่สอดคล้องกันตามบริบทของการโต้ตอบ
llm = Langchain :: LLM :: OpenAI . new ( api_key : ENV [ "OPENAI_API_KEY" ] )
assistant = Langchain :: Assistant . new (
llm : llm ,
instructions : "You're a helpful AI assistant" ,
tools : [ Langchain :: Tool :: NewsRetriever . new ( api_key : ENV [ "NEWS_API_KEY" ] ) ]
)
# Add a user message and run the assistant
assistant . add_message_and_run! ( content : "What's the latest news about AI?" )
# Supply an image to the assistant
assistant . add_message_and_run! (
content : "Show me a picture of a cat" ,
image_url : "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
)
# Access the conversation thread
messages = assistant . messages
# Run the assistant with automatic tool execution
assistant . run ( auto_tool_execution : true )
# If you want to stream the response, you can add a response handler
assistant = Langchain :: Assistant . new (
llm : llm ,
instructions : "You're a helpful AI assistant" ,
tools : [ Langchain :: Tool :: NewsRetriever . new ( api_key : ENV [ "NEWS_API_KEY" ] ) ]
) do | response_chunk |
# ...handle the response stream
# print(response_chunk.inspect)
end
assistant . add_message ( content : "Hello" )
assistant . run ( auto_tool_execution : true )
โปรดทราบว่าขณะนี้ LLM ทั้งหมดยังไม่รองรับการสตรีม
llm
: อินสแตนซ์ LLM ที่จะใช้ (จำเป็น)tools
: อาร์เรย์ของอินสแตนซ์เครื่องมือ (เป็นทางเลือก)instructions
: คำแนะนำของระบบสำหรับผู้ช่วย (ตัวเลือก)tool_choice
: ระบุวิธีการเลือกเครื่องมือ ค่าเริ่มต้น: "อัตโนมัติ" สามารถส่งชื่อฟังก์ชันเครื่องมือเฉพาะได้ วิธีนี้จะบังคับให้ Assistant ใช้ฟังก์ชันนี้ เสมอparallel_tool_calls
: ว่าจะทำการเรียกเครื่องมือแบบขนานหลายครั้งหรือไม่ ค่าเริ่มต้น: จริงadd_message_callback
: ฟังก์ชั่นโทรกลับ (proc, lambda) ที่ถูกเรียกเมื่อมีการเพิ่มข้อความใด ๆ ในการสนทนา (ตัวเลือก) assistant . add_message_callback = -> ( message ) { puts "New message: #{ message } " }
tool_execution_callback
: ฟังก์ชันเรียกกลับ (proc, lambda) ที่ถูกเรียกก่อนที่จะเรียกใช้งานเครื่องมือ (เป็นทางเลือก) assistant . tool_execution_callback = -> ( tool_call_id , tool_name , method_name , tool_arguments ) { puts "Executing tool_call_id: #{ tool_call_id } , tool_name: #{ tool_name } , method_name: #{ method_name } , tool_arguments: #{ tool_arguments } " }
add_message
: เพิ่มข้อความผู้ใช้ลงในอาร์เรย์ข้อความrun!
: ประมวลผลการสนทนาและสร้างการตอบกลับadd_message_and_run!
: รวมการเพิ่มข้อความและการเรียกใช้ผู้ช่วยsubmit_tool_output
: ส่งเอาต์พุตด้วยตนเองไปยังการเรียกเครื่องมือmessages
: ส่งคืนรายการข้อความที่กำลังดำเนินอยู่Langchain::Tool::Calculator
: มีประโยชน์สำหรับการประเมินนิพจน์ทางคณิตศาสตร์ ต้องใช้ gem "eqn"
Langchain::Tool::Database
: เชื่อมต่อฐานข้อมูล SQL ของคุณ ต้องใช้ gem "sequel"
Langchain::Tool::FileSystem
: โต้ตอบกับระบบไฟล์ (อ่านและเขียน)Langchain::Tool::RubyCodeInterpreter
: มีประโยชน์สำหรับการประเมินโค้ด Ruby ที่สร้างขึ้น ต้องใช้ gem "safe_ruby"
(ต้องการวิธีแก้ปัญหาที่ดีกว่า)Langchain::Tool::NewsRetriever
: wrapper รอบ NewsApi.org เพื่อดึงบทความข่าวLangchain::Tool::Tavily
: เสื้อคลุมรอบ Tavily AILangchain::Tool::Weather
: เรียก Open Weather API เพื่อดึงข้อมูลสภาพอากาศปัจจุบันLangchain::Tool::Wikipedia
: เรียก Wikipedia API Langchain::Assistant สามารถขยายได้อย่างง่ายดายด้วยเครื่องมือที่กำหนดเองโดยการสร้างคลาสที่ extend Langchain::ToolDefinition
และใช้วิธีการที่จำเป็น
class MovieInfoTool
extend Langchain :: ToolDefinition
define_function :search_movie , description : "MovieInfoTool: Search for a movie by title" do
property :query , type : "string" , description : "The movie title to search for" , required : true
end
define_function :get_movie_details , description : "MovieInfoTool: Get detailed information about a specific movie" do
property :movie_id , type : "integer" , description : "The TMDb ID of the movie" , required : true
end
def initialize ( api_key : )
@api_key = api_key
end
def search_movie ( query : )
...
end
def get_movie_details ( movie_id : )
...
end
end
movie_tool = MovieInfoTool . new ( api_key : "..." )
assistant = Langchain :: Assistant . new (
llm : llm ,
instructions : "You're a helpful AI assistant that can provide movie information" ,
tools : [ movie_tool ]
)
assistant . add_message_and_run ( content : "Can you tell me about the movie 'Inception'?" )
# Check the response in the last message in the conversation
assistant . messages . last
ตัวช่วยประกอบด้วยการจัดการข้อผิดพลาดสำหรับอินพุตที่ไม่ถูกต้อง ประเภท LLM ที่ไม่รองรับ และความล้มเหลวในการดำเนินการของเครื่องมือ ใช้เครื่องสถานะเพื่อจัดการโฟลว์การสนทนาและจัดการสถานการณ์ต่างๆ ได้อย่างสง่างาม
โมดูลการประเมินผลคือชุดเครื่องมือที่สามารถใช้เพื่อประเมินและติดตามประสิทธิภาพของผลิตภัณฑ์ที่ส่งออกโดย LLM และไปป์ไลน์ RAG (Retrieval Augmented Generation) ของคุณ
Ragas ช่วยคุณประเมินไปป์ไลน์การดึงข้อมูล Augmented Generation (RAG) ของคุณ การใช้งานจะขึ้นอยู่กับเอกสารนี้และ repo Python ดั้งเดิม Ragas ติดตาม 3 ตัวชี้วัดต่อไปนี้และกำหนดคะแนน 0.0 - 1.0:
# We recommend using Langchain::LLM::OpenAI as your llm for Ragas
ragas = Langchain :: Evals :: Ragas :: Main . new ( llm : llm )
# The answer that the LLM generated
# The question (or the original prompt) that was asked
# The context that was retrieved (usually from a vectorsearch database)
ragas . score ( answer : "" , question : "" , context : "" )
# =>
# {
# ragas_score: 0.6601257446503674,
# answer_relevance_score: 0.9573145866787608,
# context_relevance_score: 0.6666666666666666,
# faithfulness_score: 0.5
# }
มีตัวอย่างเพิ่มเติม: /examples
Langchain.rb ใช้กลไก Ruby Logger มาตรฐานและตั้งค่าเริ่มต้นเป็นค่า level
เดียวกัน (ปัจจุบันคือ Logger::DEBUG
)
หากต้องการแสดงข้อความบันทึกทั้งหมด:
Langchain . logger . level = Logger :: DEBUG
ตัวบันทึกจะบันทึกไปที่ STDOUT
ตามค่าเริ่มต้น ในการกำหนดค่าปลายทางบันทึก (เช่น บันทึกลงในไฟล์) ให้ทำดังนี้
Langchain . logger = Logger . new ( "path/to/file" , ** Langchain :: LOGGER_OPTIONS )
หากคุณประสบปัญหาในการติดตั้ง unicode
gem ที่ต้องการโดย pragmatic_segmenter
ให้ลองเรียกใช้:
gem install unicode -- --with-cflags= " -Wno-incompatible-function-pointer-types "
git clone https://github.com/andreibondarev/langchainrb.git
cp .env.example .env
จากนั้นกรอกตัวแปรสภาพแวดล้อมใน .env
bundle exec rake
เพื่อให้แน่ใจว่าการทดสอบผ่านและรัน standardrbbin/console
เพื่อโหลด gem ในเซสชัน REPL คุณสามารถเพิ่มอินสแตนซ์ LLM, เครื่องมือ, ตัวแทน และอื่นๆ ของคุณเองได้ตามใจชอบ และทดลองกับสิ่งเหล่านี้gem install lefthook && lefthook install -f
เข้าร่วมกับเราในเซิร์ฟเวอร์ Discord ของ Langchain.rb
ยินดีรายงานข้อผิดพลาดและคำขอดึงบน GitHub ที่ https://github.com/andreibondarev/langchainrb
อัญมณีนี้มีให้ใช้งานในรูปแบบโอเพ่นซอร์สภายใต้เงื่อนไขของใบอนุญาต MIT