DT Cloud ile Şirket Yapay Zekası Kurulumu
-
Yayımlama Tarihi 27 Şub 2025
-
Son Güncellenme 03 Mar 2025
-
Okuma Süresi 15 dakika
-
Yazar Can Şentay
İçindekiler
01- Sanal Makine Oluşturma
Dijital Bülten
Bulut dünyasındaki yeniliklerden haberdar olmak için bültenimize abone olun.
Günümüz iş dünyasında, Retrieval-Augmented Generation (RAG) sistemlerini doğru şekilde konuşlandırmak, şirketlerin yapay zeka potansiyelini tam anlamıyla kullanabilmeleri için kritik öneme sahip. Bu adım adım rehber sayesinde, kurumsal müşterilerimiz gizlilik ve veri egemenliği ihtiyaçlarını karşılarken kolaylıkla DT Cloud üzerinde güçlü ajansal RAG sistemleri yaratıp kullanabilirler. DT Cloud’un güvenilir altyapısı üzerinde kurulan bu RAG sistemi ile şirketinizin hassas verilerinin nerede depolandığı ve işlendiği üzerinde tam kontrol sahibi olurken, yapay zekanın dönüştürücü gücünden de sonuna kadar faydalanabilirsiniz.
Kuruluma ilk olarak DT Cloud Bulut Platformu üzerinde bir sanal makine oluşturarak başlıyoruz.
Kuruluma ilk olarak DT Cloud Bulut Platformu üzerinde bir sanal makine oluşturarak başlıyoruz.
-
Sanal Makine Oluşturma
Sanal Makine OluşturmaSanal makine, fiziksel bir bilgisayar sistemi üzerinde çalışan ve kendi bağımsız işletim sistemini barındıran bir yazılım ortamıdır.
1. Yeni bir Sanal Makine oluşturmak için "Sanal Makineler" sayfasında "Yeni Ekle" düğmesini tıklayın.
2. Tüm ayarları yaptıktan sonra "Sanal Makine Oluşturun" butonuna tıklayın. Ardından özet sayfasında girdiğiniz bilgileri kontrol edebilirsiniz. Seçimlerinizde herhangi bir problem olmadığını gördükten sonra "Sanal Makine Oluşturun" butonuna tıklayın.
3. "Oluşturma Seçenekleri" bölümünde, "İmaj Seçin" seçeneğini tıklayın.- "İmaj Seçin" butonuna tıklayın ve GPU destekli imajınızı seçin.
- Birim Ekle bölümünde varsayılan Önyükleme Birimi bulunur. "Birim Bağlayın" veya "Birim Ekleyin" seçeneklerini kullanarak önyükleme birimini değiştirebilir veya daha fazla birim ekleyebilirsiniz.
- Sanal Makine Tipi bölümünde "Sanal Makine Tipi Seçin" seçeneğine tıklayın ve ardından sizin için gereken RAM ve CPU'yu seçin.
- Ağ Bağlantısı bölümünde "Bir Ağ Seçin" butonuna tıklayın. Ağ Arayüzü Ekle penceresinde listeden ilk adımda oluşturmuş olduğunuz sanal ağı seçin. Ardından biraz altta yer alan Güvenlik Grubu penceresinde "Güvenlik Grubu Seç" butonuna tıklayıp "default" güvenlik grubunu kaldırıp yerine bir önceki adımda oluşturmuş olduğunuz güvenlik grubunu ekleyin. "Network Ekle" butonuna tıklayın.
- Kimlik Denetimi Yöntemini Seç bölümünde Sanal Makine ile güvenli bağlantı kurmak için "Yapılandırma" altındaki "Cloud Yapılandırması ile Doğrulama" yöntemini seçin.
- Cloud Yapılandırması ile Doğrulama seçeneğini seçtiğinizde, bir Ana bilgisayar adı, Kullanıcı Adı ve Şifre belirlemeniz gerekmektedir.
• Daha fazla bilgi için Sanal Makine Oluşturma sayfasını ziyaret edin. -
Elastik IP Adresi Oluşturma
Elastik IP Adresi Oluşturmaİnternet gibi genel ağlardan bir sanal ağa bağlı bir sanal makineye erişmek için Elastik bir IP adresi kullanılabilir. Sanal makinenin özel IP adresi, gerçek bir ağdan seçilen bir adresle eşlenir.
1. Elastik IP Adresleri sayfasında sağ üstte bulunan "Yeni Ekle" butonuna tıklayın.
2. Elastik IP Oluşturma sayfasında, Ağ Bağlantısı seçeneğinde "Ağ Seçin" butonuna tıklayın ve Elastik bir IP adresi seçmek için bir ağ seçin.
3. Elastik IP adresi atamak için bir sanal makine veya yük dengeleyici seçmek gerekir. "Bir Sanal Makine veya Yük Dengeleyici Seçin" butonuna tıklayın ve bir önceki adımda oluşturmuş olduğunuz sanal makine'yi seçin.
4. "Bir IP Adresi Seçin" butonuna tıklayarak IP adresinizi seçin.
5. "Elastik IP Oluşturun" butonuna tıklayın.• Daha fazla bilgi için Elastik IP Adresi Oluşturma sayfasını ziyaret edin. -
SSH Bağlantısı ve Nvidia Sürücü Kontrolü
SSH Bağlantısı ve Nvidia Sürücü KontrolüDT Cloud GPU Sanal Makineleri, Nvidia sürücüleri yüklü ve lisanslanmış olarak hazır hale getirilmiştir.
Sanal makinenize SSH bağlantısı gerçekleştirmek için önceki adımda oluşturduğunuz Elastik IP adresini ve "Cloud Yapılandırması ile Doğrulama" bölümünde belirttiğiniz "Kullanıcı Adı" ve "Şifre" bilgilerini kullanın.ssh <Kullanıcı Adınız>@<Elastik IP>
-
Ollama Kurulumu ve Konfigürasyonu
OllamaOllama'yı indirmek için aşağıdaki komutu kullanın:curl -fsSL https://ollama.com/install.sh | sh
1. Ollama'yı Erişebilir Hale Getirme
Öncelikle, Ollama'yı ağ üzerinden erişilebilir hale getirmek için aşağıdaki işlemi gerçekleştirin:
Ollama servis dosyasını düzenlemek için:sudo nano /etc/systemd/system/ollama.service
Dosyanın [Service] bölümünün en altına aşağıdaki satırı ekleyin:Environment="OLLAMA_HOST=0.0.0.0"
Daha sonra, yapılan değişiklikleri uygulamak için aşağıdaki komutları çalıştırın:sudo systemctl daemon-reload sudo systemctl restart ollama.service
-
DeepSeek Kurulumu
DeepSeekCPU, RAM ve GPU kaynaklarınıza göre uygun modeli seçerek, DT Cloud’un GPU destekli sanal makinelerinin avantajlarından faydalanın. -
Ön Koşullar
Bu Agentic RAG'yi yerel olarak kurup çalıştırmak için aşağıdaki kurulumlara sahip olmanız gerektiğinden emin olun:
• Gerekli Kütüphaneler
Aşağıdaki komutu kullanarak gerekli bağımlılıkları yükleyin:sudo apt install python3-pip -y pip install streamlit pydantic crewai langchain pypdf faiss-cpu sentence-transformers langchain-community langchain
-
Kod İncelemesi
Bu bölümde, CrewAI ajanlarını kullanarak PDF'leri yerel olarak işleyen ve yanıtları Streamlit arayüzü üzerinden sunan bu Agentic RAG chatbot'unun kodunu inceleyeceğiz.
1. İlk Kurulum
Bu adımda, projenin gereksinim duyduğu kütüphaneler ve modüller içeri aktarılır. Bu kütüphaneler, PDF işleme, doğal dil işleme ve arayüz için gerekli olan işlevleri sağlar.import streamlit as st import re import os from crewai import Agent, Task, Crew, Process, LLM from langchain_community.document_loaders import PyPDFLoader from langchain_community.vectorstores import FAISS from langchain_community.embeddings import HuggingFaceEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter from pydantic import BaseModel, Field, ConfigDict from typing import Optional # Environment setup os.environ["OPENAI_API_KEY"] = "ollama" os.environ["OPENAI_API_BASE"] = "http://<Elastik IP>:11434" os.environ["OPENAI_MODEL_NAME"] = "ollama/deepseek-r1:7b" # Constants CHUNK_SIZE = 512 CHUNK_OVERLAP = 220 EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2" LLM_MODEL = "ollama/deepseek-r1:7b" API_BASE = "http://<Elastik IP>:11434" API_KEY = "ollama" SIMILARITY_THRESHOLD = 0.7
Streamlit kütüphanesi, etkileşimli kullanıcı arayüzü sağlamak için kullanılırken, re kütüphanesi metin işleme için regex işlemleri gerçekleştirir. os kütüphanesi çevresel değişkenleri ayarlamak için kullanılır. crewai kütüphanesi, yapay zeka işlemleri için gerekli modüllerini sağlar. langchain_community kütüphanesi, PDF yükleme, metin parçalama, vektör depolama ve gömme üretimi gibi doğal dil işleme işlevlerini sağlar. pydantic, veri doğrulama ve yapılandırmalar için kullanılırken, typing modülü veri türlerini belirlemek için kullanılır.
Ortam değişkenlerinde, OPENAI_API_KEY, OPENAI_API_BASE, ve OPENAI_MODEL_NAME gibi değişkenler ile API bağlantı bilgileri ve kullanılacak modelin adı belirlenir. Bu, projede kullanılan özel API endpoint'ine bağlantıyı sağlar. CHUNK_SIZE ve CHUNK_OVERLAP, PDF dosyasındaki metnin nasıl işleneceğini, ne kadar büyük parçalara bölüneceğini ve bu parçalar arasındaki örtüşme miktarını belirler. EMBEDDING_MODEL, metin gömme modelini tanımlar ve burada "sentence-transformers/all-MiniLM-L6-v2" modeli kullanılır. SIMILARITY_THRESHOLD metin karşılaştırmalarında benzerliğin hangi seviyede kabul edileceğini belirtir ve bu projede 0.7 olarak ayarlanmıştır.
2. PDF İşleme
def process_pdf(pdf_path): loader = PyPDFLoader(pdf_path) docs = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=220) split_docs = text_splitter.split_documents(docs) embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") vectorstore = FAISS.from_documents(split_docs, embedding_model) return vectorstore
process_pdf fonksiyonu, PyPDFLoader kullanarak PDF'yi yükler, ardından RecursiveCharacterTextSplitter ile metni parçalara ayırır (her biri 512 karakter uzunluğunda ve 220 karakterlik bir örtüşme ile). Son olarak, verimli benzerlik tabanlı sorgulama için HuggingFace embeddings kullanarak bir FAISS vektör deposu oluşturur. Bu işlem, PDF içeriğinin hızlı bir şekilde aranabilir ve benzerlik tabanlı sorgulama için uygun hale getirilmesini sağlar.
class PDFRetrievalAgent(Agent): """Agent to retrieve relevant information from PDF documents.""" vectorstore: Optional[FAISS] = Field(default=None, description="The vector store for document retrieval.") model_config = ConfigDict(arbitrary_types_allowed=True) def __init__(self, vectorstore: FAISS): super().__init__( role="PDF Retrieval Agent", backstory="I retrieve relevant information from PDF documents.", goal="Retrieve relevant text from the document based on the query." ) self.vectorstore = vectorstore def execute_task(self, task: Task, context: dict = None, tools: list = None): query = task.description docs_with_scores = self.vectorstore.similarity_search_with_score(query, k=5) filtered_docs = [doc for doc, score in docs_with_scores if score >= SIMILARITY_THRESHOLD] if not filtered_docs: return "" retrieved_text = "\n".join([doc.page_content for doc in filtered_docs]) return retrieved_text
PDFRetrievalAgent, bir CrewAI ajanıdır ve FAISS arayıcıyı kullanarak ilgili belge parçalarını alır. Bir sorgu verildiğinde, ajan bir görev aracılığıyla bu sorguyu işler, eşleşen alıntıları alır ve bunları birleştirerek bir sonraki ajana iletmek üzere tek bir metin dizisi haline getirir.
4. LLM Ajanının Tanımlanması
3. Veri Getirme Ajanının Tanımlanması
class LLMAgent(Agent): """Agent to analyze and refine retrieved excerpts.""" def __init__(self, llm): super().__init__( role="LLM Processor", backstory="I analyze and refine retrieved excerpts to generate meaningful insights.", goal="Summarize and interpret retrieved text to provide a clear response." ) self.llm = llm def execute_task(self, task: Task, context: dict = None, tools: list = None): if not context or not isinstance(context, str) or len(context.strip()) == 0: return "Not found in the document." system_prompt = ( "You are an AI assistant that answers STRICTLY based on the provided document excerpts. " "Follow these rules:\n" "1. If the question is unrelated to the document, respond 'Not found in the document.'\n" "2. If information is missing, respond 'Not found in the document.'\n" "3. Never invent answers or use external knowledge.\n\n" "DOCUMENT EXCERPTS:\n" + context ) user_prompt = ( f"Question: {task.description}\n\n" "Answer STRICTLY based on the document excerpts above. " "If unsure, respond 'Not found in the document.'" ) response = self.llm.call([ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt} ]) return response if "not found in the document" in response.lower() else response
LLMAgent, alınan metni DeepSeek modelini kullanarak (LLM aracılığıyla) işler. Katı bir sistem komutu, yanıtların yalnızca sağlanan alıntılara dayanmasını garanti eder. Eğer uygun bir bağlam bulunamazsa, ajan bir yedek mesaj döndürür.
5. Think Etiketlerini Yönetme
def remove_think_content(text): """Remove <think>...</think> tags and their content from the given text.""" return re.sub(r'<think>.*?</think>', '', text, flags=re.DOTALL)
Bu fonksiyon, DeepSeek LLM çıktısındaki <think> etiketlerini yönetir.- remove_think_content: <think> içeriğini nihai yanıttan çıkarır, böylece yanıtın daha net olmasını sağlar.
6. Streamlit UI ve Ajan İş Akışı
def main(): """Main function to run the Streamlit app.""" st.title("Document Query Assistant") st.sidebar.header("Upload a PDF") uploaded_file = st.sidebar.file_uploader("Choose a PDF file", type=["pdf"]) background_image = """ <style> .stApp { background-image: url("https://dtcloudnow.com/assets/img/website/why-dt-logo.png"); background-size: 30%; background-position: center 9%; background-repeat: no-repeat; } </style> """ st.markdown(background_image, unsafe_allow_html=True) if uploaded_file: with open("temp.pdf", "wb") as f: f.write(uploaded_file.getbuffer()) vectorstore = process_pdf("temp.pdf") st.sidebar.success("PDF uploaded and processed! ✅ Start asking questions below.") pdf_retrieval_agent = PDFRetrievalAgent(vectorstore) llm = LLM(model=LLM_MODEL, api_base=API_BASE, api_key=API_KEY) llm_agent = LLMAgent(llm) if "messages" not in st.session_state: st.session_state["messages"] = [] for message in st.session_state["messages"]: with st.chat_message(message["role"]): st.write(message["content"]) if prompt := st.chat_input("Ask a question about your document"): st.session_state["messages"].append({"role": "user", "content": prompt}) retrieval_task = Task( description=prompt, agent=pdf_retrieval_agent, expected_output="Relevant text from the document based on the query." ) context = pdf_retrieval_agent.execute_task(retrieval_task) if not context: response = "Not found in the document." else: llm_task = Task( description=prompt, agent=llm_agent, expected_output="A clear and concise response based on the document excerpts." ) crew = Crew( agents=[pdf_retrieval_agent, llm_agent], tasks=[retrieval_task, llm_task], verbose=True, process=Process.sequential ) result = crew.kickoff() response = remove_think_content(result.raw) if result else "Not found in the document." st.session_state["messages"].append({"role": "assistant", "content": response}) with st.chat_message("user"): st.write(prompt) with st.chat_message("assistant"): st.write(response) if __name__ == "__main__": main()
Streamlit UI başlıkla başlar ve kullanıcıların bir PDF yükleyebileceği bir yan menü içerir. Yüklenen PDF, FAISS vektör deposuna işlenir. PDFRetrievalAgent ve LLMAgent ajanları, yerel olarak Ollama aracılığıyla çalışan retriever ve DeepSeek model ile başlatılır. Bir kullanıcı soru girdiğinde, bu soru geçmişe eklenir ve ajan iş akışını tetikler. CrewAI'nin Crew modülü, süreci orkestre eder: retrieval_task, PDFRetrievalAgent kullanarak belge alıntılarını alır. Ardından, llm_task bu alıntıları LLMAgent ile net bir yanıta dönüştürür. Bu ayar, görevlerin sırasıyla çalışmasını sağlar ve retrieval çıktısının LLM işlem adımına girmesini temin eder. Sonucunda ise <think> etiketleri nihai yanıttan çıkarılır. UI, kullanıcının sorusunu gösterir ve asistanın yanıtını sunarak belge ile kesintisiz ve şeffaf bir etkileşim yaratır.
Uygulamayı python3 -m streamlit run dtgpu.py komutuyla başlattıktan sonra, tarayıcınızı açarak aşağıdaki adrese gidin:http://<Elastik IP>:8501
-
PDF Yükleme ve ChatBot’un Kullanımı
Streamlit UIEkranınızın sol tarafındaki panelde çıkan dosya yükleme alanını kullanarak PDF dosyasını sisteme yükleyebilirsiniz. Sonrasında ise yapay zekaya istediğiniz soruyu sorarak sistemi kullanmaya başlayabilirsiniz. -
Sonuç
Rehberimizde detaylı olarak anlattığımız bu kurulum süreci, bulut platformumuzun sunduğu GPU kaynaklarını kullanarak ajansal RAG sistemlerinizin performansını en üst düzeye çıkarmanıza olanak tanır. Karmaşık altyapı yönetimi ve ölçeklendirme sorunlarıyla uğraşmak yerine, işinizin özüne odaklanabilirsiniz. Bu rehber ile kurumunuzun yapay zeka yeteneğini bugün hemen güçlendirin. Rehberi kullanarak sistemlerinizi DT Cloud Bulut Platformu üzerinde hemen kurmaya başlayın veya özel ihtiyaçlarınız için satış ekibimizle iletişime geçin!
Dijital Bülten
Bulut dünyasındaki yeniliklerden haberdar olmak için bültenimize abone olun.
Benzer Makaleler
-
Mar 14,2024
ChatGPT vs Gemini
Yapay zeka devlerinden OpenAI'ın ChatGPT’sinin mi yoksa Google'ın Gemini'ının mı size daha uygun olduğunu biliyor musunuz? Her ikisinin de kendine özgü güçlü ve zayıf yönleri bulunuyor.Gelin bu güçlü ve zayıf yönleri birlikte inceleyelim!
Daha Fazla -
Şub 20,2024
Dijitalleşen Meslekler
Teknolojinin hızlı evrimi, yapay zeka, bulut bilişim ve platform mühendisliğine olan talebi artırıyor, yeni meslekler ortaya çıkıyor ve mevcut meslekler dijitalleşiyor.
Daha Fazla -
Şub 01,2024
“Forbes Teknoloji Konseyi”nin Türkiye’den yeni üyesi DTG CEO’su Tolga Dinçer oldu
Tolga Dinçer, dünya çapında başarılı iş insanlarının davet aldığı “Forbes Teknoloji Konseyi”ne kabul edildi.
Daha Fazla
DT Cloud ile Şirket Yapay Zekası Kurulumu
İletişime Geçin
Copyright ©2024 DT. Her hakkı saklıdır.
Bulut dünyasındaki yeniliklerden haberdar olmak için bültenimize abone olun.
Copyright ©2024 DT. Her hakkı saklıdır.