Bizimle iletişime geçin

Yapay Genel Zeka

Sıfırdan ve Ötesinden RAG için LLM Temsilcileri Oluşturma: Kapsamlı Bir Kılavuz

mm
Sıfırdan ve Ötesinden RAG için LLM Temsilcileri Oluşturma: Kapsamlı Bir Kılavuz

GPT-3, GPT-4 gibi yüksek lisans eğitimleri ve bunların açık kaynak muadilleri sıklıkla güncel bilgi alımında zorluk çeker ve bazen halüsinasyonlara veya yanlış bilgilere neden olabilir.

Alma-Artırılmış Nesil (RAG) Yüksek Lisans'ın gücünü dışarıdan bilgi erişimiyle birleştiren bir tekniktir. RAG, LLM yanıtlarını gerçek, güncel bilgilere dayandırmamıza olanak tanıyarak yapay zeka tarafından oluşturulan içeriğin doğruluğunu ve güvenilirliğini önemli ölçüde artırır.

Bu blog yazısında, RAG için sıfırdan LLM aracılarının nasıl oluşturulacağını, mimarisini, uygulama ayrıntılarını ve gelişmiş teknikleri derinlemesine inceleyeceğiz. RAG'ın temellerinden, karmaşık akıl yürütme ve görev yürütme yeteneğine sahip gelişmiş aracılar oluşturmaya kadar her şeyi ele alacağız.

LLM ajansımızı oluşturmaya başlamadan önce, RAG'ın ne olduğunu ve neden önemli olduğunu anlayalım.

RAG veya Alma-Artırılmış Üretim, bilgi erişimini metin oluşturmayla birleştiren hibrit bir yaklaşımdır. Bir RAG sisteminde:

  • İlgili belgeleri bir bilgi tabanından almak için bir sorgu kullanılır.
  • Bu belgeler daha sonra orijinal sorguyla birlikte bir dil modeline beslenir.
  • Model, hem sorguya hem de alınan bilgilere dayalı olarak bir yanıt üretir.
RAG

RAG

Bu yaklaşımın çeşitli avantajları vardır:

  • Geliştirilmiş doğruluk: RAG, alınan bilgilerdeki yanıtları temel alarak halüsinasyonları azaltır ve gerçeklerin doğruluğunu artırır.
  • Güncel bilgiler: Bilgi tabanı düzenli olarak güncellenerek sistemin güncel bilgilere erişmesine olanak sağlanır.
  • Şeffaflık: Sistem, bilgileri için kaynak sağlayabilir, güveni artırabilir ve doğrulamaya olanak tanıyabilir.

LLM Temsilcilerini Anlamak

 

Basit bir cevabı olmayan bir problemle karşılaştığınızda genellikle birkaç adımı izlemeniz, dikkatlice düşünmeniz ve daha önce denediğiniz şeyleri hatırlamanız gerekir. LLM aracıları, dil modeli uygulamalarında tam olarak bu tür durumlar için tasarlanmıştır. Kapsamlı veri analizini, stratejik planlamayı, veri alımını ve karmaşık sorunları çözmek için geçmiş eylemlerden öğrenme yeteneğini birleştirirler.

LLM Acenteleri nedir?

LLM aracıları, sıralı akıl yürütme gerektiren karmaşık metinler oluşturmak için tasarlanmış gelişmiş yapay zeka sistemleridir. İleriyi düşünebilir, geçmiş konuşmaları hatırlayabilir ve yanıtlarını ihtiyaç duyulan duruma ve tarza göre ayarlamak için farklı araçlar kullanabilirler.

Hukuk alanında şu soruyu düşünün: "Kaliforniya'da belirli bir tür sözleşme ihlalinin potansiyel hukuki sonuçları nelerdir?" Alma artırılmış üretim (RAG) sistemine sahip temel bir Yüksek Lisans, gerekli bilgileri yasal veritabanlarından alabilir.

Daha detaylı bir senaryo için: "Yeni veri gizliliği yasaları ışığında, şirketlerin karşılaştığı yaygın yasal zorluklar nelerdir ve mahkemeler bu sorunları nasıl ele alıyor?" Bu soru, yalnızca gerçekleri araştırmaktan daha derinlere iner. Yeni kuralları, farklı şirketler üzerindeki etkilerini ve mahkemelerin tepkilerini anlamakla ilgilidir. Bir LLM danışmanı bu görevi, en son yasaları almak, geçmiş davaları analiz etmek, yasal belgeleri özetlemek ve kalıplara dayanarak eğilimleri tahmin etmek gibi alt görevlere ayırır.

LLM Acentelerinin Bileşenleri

Yüksek Lisans acenteleri genellikle dört bileşenden oluşur:

  1. Ajan/Beyin: Dili işleyen ve anlayan temel dil modeli.
  2. Planlama: Mantık yürütme, görevleri parçalara ayırma ve özel planlar geliştirme yeteneği.
  3. Bellek: Geçmiş etkileşimlerin kayıtlarını tutar ve onlardan öğrenir.
  4. Alet Kullanımı: Görevleri gerçekleştirmek için çeşitli kaynakları birleştirir.

Ajan/Beyin

Bir Yüksek Lisans temsilcisinin temelinde, üzerinde eğitim aldığı çok büyük miktarda veriye dayalı olarak dili işleyen ve anlayan bir dil modeli bulunur. Temsilciye nasıl yanıt vereceği, hangi araçları kullanacağı ve hedefleyeceği hedefler konusunda rehberlik ederek ona belirli bir ipucu vererek başlarsınız. Temsilciyi belirli görevlere veya etkileşimlere uygun bir kişiyle özelleştirerek performansını artırabilirsiniz.

Bellek

Bellek bileşeni, geçmiş eylemlerin kaydını tutarak LLM aracılarının karmaşık görevleri yerine getirmesine yardımcı olur. İki ana bellek türü vardır:

  • Kısa süreli hafıza: Devam eden tartışmaları takip eden bir not defteri gibi davranır.
  • Uzun süreli hafıza: Günlük gibi işlev görür; kalıpları öğrenmek ve daha iyi kararlar vermek için geçmiş etkileşimlerden gelen bilgileri saklar.

Aracı, bu tür bellekleri harmanlayarak daha özel yanıtlar sunabilir ve zaman içinde kullanıcı tercihlerini hatırlayarak daha bağlantılı ve ilgili bir etkileşim yaratabilir.

Planlama

Planlama, LLM temsilcilerinin akıl yürütmesine, görevleri yönetilebilir parçalara ayırmasına ve görevler geliştikçe planları uyarlamasına olanak tanır. Planlama iki ana aşamadan oluşur:

  • Plan Oluşturma: Bir görevi daha küçük alt görevlere bölmek.
  • Plan Yansıması: Stratejileri geliştirmek için geri bildirimleri dahil ederek planın etkililiğini gözden geçirmek ve değerlendirmek.

Düşünce Zinciri (CoT) ve Düşünce Ağacı (ToT) gibi yöntemler bu ayrıştırma sürecine yardımcı olarak temsilcilerin bir sorunu çözmek için farklı yollar keşfetmesine olanak tanır.

Mevcut yetenekleri ve potansiyelleri de dahil olmak üzere AI aracılarının dünyasını daha derinlemesine incelemek için okumayı düşünün “Auto-GPT ve GPT-Engineer: Günümüzün Önde Gelen Yapay Zeka Aracılarına İlişkin Derinlemesine Bir Kılavuz”

Ortamı Ayarlama

RAG aracımızı oluşturmak için geliştirme ortamımızı kurmamız gerekiyor. Python ve birkaç önemli kütüphane kullanacağız:

  • Dil Zinciri: Yüksek Lisans ve erişim bileşenlerimizi düzenlemek için
  • Renk parlaklığı: Belge yerleştirmeler için vektör mağazamız olarak
  • OpenAI'nin GPT modelleri: Temel LLM'miz olarak (tercih edilirse bunu açık kaynaklı bir modelle değiştirebilirsiniz)
  • HızlıAPI: Temsilcimizle etkileşime geçmek için basit bir API oluşturmak için

Öncelikle ortamımızı ayarlayarak başlayalım:

# Create a new virtual environment
python -m venv rag_agent_env
source rag_agent_env/bin/activate # On Windows, use `rag_agent_env\Scripts\activate`

# Install required packages
pip install langchain chromadb openai fastapi uvicorn

Şimdi rag_agent.py adında yeni bir Python dosyası oluşturalım ve gerekli kütüphaneleri içeri aktaralım:

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
from langchain.document_loaders import TextLoader
import os

# Set your OpenAI API key
os.environ["OPENAI_API_KEY"] = "your-api-key-here"

Basit Bir RAG Sistemi Oluşturmak

Ortamımız hazır olduğuna göre, temel bir RAG sistemi oluşturalım. Öncelikle bir dizi belgeden bir bilgi tabanı oluşturacağız, ardından bunu soruları yanıtlamak için kullanacağız.

Adım 1: Belgeleri Hazırlayın

Öncelikle belgelerimizi yükleyip hazırlamamız gerekiyor. Bu örnek için, yapay zeka ve makine öğrenimi hakkında bazı bilgiler içeren knowledge_base.txt adlı bir metin dosyamız olduğunu varsayalım.

# Load the document
loader = TextLoader("knowledge_base.txt")
documents = loader.load()

# Split the documents into chunks
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# Create embeddings
embeddings = OpenAIEmbeddings()

# Create a vector store
vectorstore = Chroma.from_documents(texts, embeddings)

Adım 2: Alma Tabanlı Bir Kalite Güvence Zinciri Oluşturun

Artık vektör depomuza sahip olduğumuza göre, erişim tabanlı bir QA zinciri oluşturabiliriz:

# Create a retrieval-based QA chain
qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever())

Adım 3: Sistemi Sorgulayın

Artık RAG sistemimizi sorgulayabiliriz:

query = "What are the main applications of machine learning?"
result = qa.run(query)
print(result)

Adım 4: LLM Temsilcisi Oluşturma

Basit RAG sistemimiz kullanışlı olsa da oldukça sınırlıdır. Daha karmaşık görevleri yerine getirebilen ve aldığı bilgiler hakkında akıl yürütebilen bir LLM aracısı oluşturarak sistemimizi geliştirelim.

LLM aracısı, araçları kullanabilen ve hangi eylemlerin gerçekleştirileceğine karar verebilen bir yapay zeka sistemidir. Sadece soruları yanıtlamakla kalmayıp aynı zamanda web aramaları ve temel hesaplamalar da yapabilen bir aracı oluşturacağız.

Öncelikle aracımız için bazı araçları tanımlayalım:

from langchain.agents import Tool
from langchain.tools import DuckDuckGoSearchRun
from langchain.tools import BaseTool
from langchain.agents import initialize_agent
from langchain.agents import AgentType

# Define a calculator tool
class CalculatorTool(BaseTool):
name = "Calculator"
description = "Useful for when you need to answer questions about math"

def _run(self, query: str) 
    try:
        return str(eval(query))
    except:
        return "I couldn't calculate that. Please make sure your input is a valid mathematical expression."

# Create tool instances
search = DuckDuckGoSearchRun()
calculator = CalculatorTool()

# Define the tools
tools = [Tool(name="Search",func=search.run,description="Useful for when you need to answer questions about current events"),
Tool(name="RAG-QA",func=qa.run,description="Useful for when you need to answer questions about AI and machine learning"),
Tool(name="Calculator",func=calculator._run,description="Useful for when you need to perform mathematical calculations")
]

# Initialize the agent
agent = initialize_agent(tools, OpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)

Artık RAG sistemimizi kullanabilen, web aramaları yapabilen ve hesaplamalar yapabilen bir aracımız var. Hadi test edelim:

result = agent.run("What's the difference between supervised and unsupervised learning? Also, what's 15% of 80?")
print(result)

Bu aracı, LLM aracılarının önemli bir avantajını ortaya koyuyor: karmaşık sorguları yanıtlamak için birden fazla aracı ve akıl yürütme adımını birleştirebiliyorlar.

Aracıyı Gelişmiş RAG Teknikleriyle Geliştirme

Mevcut RAG sistemimiz iyi çalışsa da performansını artırmak için kullanabileceğimiz birkaç gelişmiş teknik vardır:

a) Yoğun Geçiş Erişimi (DPR) ile Anlamsal Arama

Basit yerleştirme tabanlı erişim kullanmak yerine, daha doğru anlamsal arama için DPR'yi uygulayabiliriz:

from transformers import DPRQuestionEncoder, DPRContextEncoder

question_encoder = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
context_encoder = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")

# Function to encode passages
def encode_passages(passages):
return context_encoder(passages, max_length=512, return_tensors="pt").pooler_output

# Function to encode query
def encode_query(query):
return question_encoder(query, max_length=512, return_tensors="pt").pooler_output

b) Sorgu Genişletme

Alma performansını iyileştirmek için sorgu genişletmeyi kullanabiliriz:

from transformers import T5ForConditionalGeneration, T5Tokenizer

model = T5ForConditionalGeneration.from_pretrained("t5-small")
tokenizer = T5Tokenizer.from_pretrained("t5-small")

def expand_query(query):
input_text = f"expand query: {query}"
input_ids = tokenizer.encode(input_text, return_tensors="pt")
outputs = model.generate(input_ids, max_length=50, num_return_sequences=3)
expanded_queries = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs]
return expanded_queries

c) Yinelemeli İyileştirme

Aracının, ilk alımını açıklığa kavuşturmak veya genişletmek için takip soruları sorabileceği yinelemeli bir iyileştirme süreci uygulayabiliriz:

def iterative_retrieval(initial_query, max_iterations=3):
query = initial_query
for _ in range(max_iterations):
result = qa.run(query)
clarification = agent.run(f"Based on this result: '{result}', what follow-up question should I ask to get more specific information?")
if clarification.lower().strip() == "none":
break
query = clarification
return result

# Use this in your agent's process

Çoklu Aracı Sisteminin Uygulanması

Daha karmaşık görevleri yerine getirmek için, farklı ajanların farklı alanlarda uzmanlaştığı çoklu ajan sistemini uygulayabiliriz. İşte basit bir örnek:

class SpecialistAgent:
def __init__(self, name, tools):
self.name = name
self.agent = initialize_agent(tools, OpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

def run(self, query):
return self.agent.run(query)

# Create specialist agents
research_agent = SpecialistAgent("Research", [Tool(name="RAG-QA", func=qa.run, description="For AI and ML questions")])
math_agent = SpecialistAgent("Math", [Tool(name="Calculator", func=calculator._run, description="For calculations")])
general_agent = SpecialistAgent("General", [Tool(name="Search", func=search.run, description="For general queries")])

class Coordinator:
def __init__(self, agents):
self.agents = agents

def run(self, query):
# Determine which agent to use
if "calculate" in query.lower() or any(op in query for op in ['+', '-', '*', '/']):
return self.agents['Math'].run(query)
elif any(term in query.lower() for term in ['ai', 'machine learning', 'deep learning']):
return self.agents['Research'].run(query)
else:
return self.agents['General'].run(query)

coordinator = Coordinator({'Research': research_agent, 'Math': math_agent, 'General': general_agent})

# Test the multi-agent system
result = coordinator.run("What's the difference between CNN and RNN? Also, calculate 25% of 120.")
print(result)

Bu çok aracılı sistem uzmanlaşmaya izin verir ve daha geniş bir sorgu yelpazesini daha etkili bir şekilde ele alabilir.

RAG Aracılarını Değerlendirme ve Optimize Etme

RAG aracımızın iyi performans gösterdiğinden emin olmak için değerlendirme ölçümlerini ve optimizasyon tekniklerini uygulamamız gerekiyor:

a) Uygunluk Değerlendirmesi

Alınan belgelerin alaka düzeyini değerlendirmek için BLEU, ROUGE veya BERTScore gibi ölçümleri kullanabiliriz:

from bert_score import score

def evaluate_relevance(query, retrieved_doc, generated_answer):
P, R, F1 = score([generated_answer], [retrieved_doc], lang="en")
return F1.mean().item()

b) Cevap Kalitesi Değerlendirmesi

Yanıt kalitesini değerlendirmek için insan değerlendirmesini veya otomatik ölçümleri kullanabiliriz:

from nltk.translate.bleu_score import sentence_bleu

def evaluate_answer_quality(reference_answer, generated_answer):
return sentence_bleu([reference_answer.split()], generated_answer.split())

# Use this to evaluate your agent's responses

Gelecekteki Yönler ve Zorluklar

RAG ajanlarının geleceğine baktığımızda birçok heyecan verici yön ve zorluk ortaya çıkıyor:

a) Çok modlu RAG: RAG'ı görüntü, ses ve video verilerini içerecek şekilde genişletme.

b) Federal RAG: RAG'ın dağıtılmış, gizliliği koruyan bilgi tabanlarında uygulanması.

c) Sürekli Öğrenme: RAG temsilcilerinin zaman içinde bilgi tabanlarını ve modellerini güncellemelerine yönelik yöntemler geliştirmek.

d) Etik Hususlar: RAG sistemlerinde önyargı, adalet ve şeffaflığın ele alınması.

e) ölçeklenebilirlik: RAG'ı büyük ölçekli, gerçek zamanlı uygulamalar için optimize etme.

Sonuç

RAG için sıfırdan LLM aracıları oluşturmak karmaşık ama ödüllendirici bir süreçtir. RAG'nin temellerini ele aldık, basit bir sistem uyguladık, bir LLM aracısı oluşturduk, gelişmiş tekniklerle geliştirdik, çoklu aracı sistemlerini inceledik ve değerlendirme ve optimizasyon stratejilerini tartıştık.

Son beş yılımı, Makine Öğrenimi ve Derin Öğrenmenin büyüleyici dünyasına dalarak geçirdim. Tutkum ve uzmanlığım, özellikle AI/ML'ye odaklanarak 50'den fazla farklı yazılım mühendisliği projesine katkıda bulunmamı sağladı. Devam eden merakım, beni daha fazla keşfetmeye hevesli olduğum bir alan olan Doğal Dil İşleme'ye de çekti.