489 оқулар
489 оқулар

Қант диабеті бойынша Reddit URL мекенжайлары бар RAG пайдалану: кеңейтілген білімді іздеуге арналған ашық бастапқы LLMs

бойынша Shilpi Bhattacharyya7m2025/03/27
Read on Terminal Reader

Тым ұзақ; Оқу

LLM көмегімен қант диабеті туралы тәжірибелік деректерді алуға қызығушылығымды ескере отырып, мен бұл экспериментті Ollama-мен өткіздім - мұндай тапсырмалар үшін пайдалануға болатын көптеген ашық бастапқы LLM-лердің бірі.
featured image - Қант диабеті бойынша Reddit URL мекенжайлары бар RAG пайдалану: кеңейтілген білімді іздеуге арналған ашық бастапқы LLMs
Shilpi Bhattacharyya HackerNoon profile picture

Үлкен тіл үлгілері керемет қуатты және олардың үлкен деректер корпусында оқытылғаны әсерлі. Дегенмен, біздің Құрылтайшы саяхатына кіріскен кезде, осы үлгілерді үйде оқытуға қанша бюджетіміз бар? Мүмкін, өте аз.


Бірақ күтіңіз, бұл алдын ала дайындалған LLMлер бізге пайдалы ма? Әрине, егер олар ашық бастапқы код болса. Бақытымызға орай, қазір олардың біразы қол жетімді.


Сонымен, олар қаншалықты пайдалы? AI саласындағы көпшілігіміз RAG туралы білеміз немесе кем дегенде олар туралы естідік. Қарапайым бір жолды анықтама берейін. Іздеу арқылы кеңейтілген генерация дәл солай естіледі - ол біз ұсынатын сыртқы көздерден деректерді шығарып алады және оны LLM шығысына дейін арттырады.


Бұл өте пайдалы, өйткені ол қажетті корпустың нәтижелерін шығару үшін біз сырттан беретін білімді қоса отырып, LLM-дің генеративті қуатын пайдаланады. Егер сізде шектеулі сыртқы корпус болса, біз модельді LLM туралы жалпы білімге негіздей аламыз.


Мені әсіресе тамақ пен денеге қатысты қалай тамақтанатынымыз қызықтырады және «қоқыс ішке, қоқыс шығару» ұғымына терең сенеді. Егер біз өзімізді табиғи пайдалы тағамдармен тамақтандыратын болсақ, біз табиғатты бейнелейміз - күшті, сергек және тоқтаусыз. Бірақ егер біз жасанды, жансыз тағамдарды тұтынатын болсақ, біз бірдей көрініп, сезіне бастаймыз - ағызылған және табиғи емес. Бүгінгі таңда жасанды және тазартылған тағамды шамадан тыс тұтынудың ең жаман салдарының бірі - қант диабеті.


Қант диабетімен өмір сүрудің нақты ауырсыну нүктелерін кім шынымен түсінеді? Бұл қарапайым - оны өз көзімен көрген адамдар. LLM көмегімен қант диабеті туралы тәжірибелік деректерді алуға қызығушылығымды ескере отырып, мен бұл экспериментті Ollama-мен өткіздім - мұндай тапсырмалар үшін пайдалануға болатын көптеген ашық бастапқы LLM-лердің бірі.


Әр кезеңде түсіндіріп, дәптеріммен бөлісіп отырамын. Оған қоса, түсінуге көмектесу үшін мен жоғары деңгейлі архитектуралық диаграмманы қосамын.

RAG жүйесінің архитектуралық диаграммасы


1-қадам: Бірнеше URL мекенжайларынан мазмұнды алу және өңдеу. Reddit URL мекенжайларының берілген тізімінен мәтінді қырып алып, оны all_texts ішінде сақтаймыз.

 # Import necessary libraries import requests from bs4 import BeautifulSoup from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OllamaEmbeddings from langchain.vectorstores import FAISS from langchain.chains import RetrievalQA from langchain.prompts import PromptTemplate from langchain.llms import Ollama # List of URLs to scrape urls = [ 'https://www.reddit.com/r/diabetes/comments/1broigp/what_are_your_biggest_frustrations_with_diabetes/', 'https://www.reddit.com/r/diabetes_t2/comments/156znkx/whats_the_most_challenging_part_about_dealing/', 'https://www.reddit.com/r/diabetes/comments/qcsgji/what_is_the_hardest_part_about_managing_diabetes/', 'https://www.reddit.com/r/diabetes_t1/comments/1hdlipr/diabetes_and_pain/', 'https://www.reddit.com/r/diabetes/comments/ww6mrj/what_does_diabetic_nerve_pain_feel_like/', 'https://www.reddit.com/r/AskReddit/comments/avl1x0/diabetics_of_reddit_what_is_your_experience_of/', 'https://www.reddit.com/r/diabetes_t2/comments/1jggxi9/my_fathers_sugar_levels_are_not_dropping/', 'https://www.reddit.com/r/diabetes_t2/comments/1jglmie/shaky_feeling/', 'https://www.reddit.com/r/diabetes_t2/comments/1jgccvo/rant_from_a_depressedeating_disordered_diabetic/' ] # Initialize text storage all_texts = [] # Step 1: Fetch and process content from multiple URLs for url in urls: response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # Extract text from <p> tags text = ' '.join([para.get_text() for para in soup.find_all('p')]) if text: # Store only if text is found all_texts.append(text)

2-қадам: Мәтінді тиімді өңдеу үшін қырылған мәтінді басқарылатын бөліктерге бөлеміз. Сондай-ақ жадты пайдалануды азайтып, іздеу өнімділігін жақсарта аламыз.

 # Step 2: Split all content into chunks text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) all_chunks = [] for text in all_texts: all_chunks.extend(text_splitter.split_text(text))

3-қадам: Ollama ендірулерін инициализациялаймыз. Енгізулер – мәтіннің семантикалық мағынасын қамтитын өңделмеген мәтіннің сандық (векторлық) көрінісі. Енгізулер әртүрлі ML үлгілеріне мәтінді тиімді өңдеуге және түсінуге мүмкіндік береді. OllamaEmbeddings сыныбы осы ендірулерді жасау үшін llama2 үлгісін пайдаланады.

 # Step 3: Initialize Ollama embeddings embeddings = OllamaEmbeddings(model="llama2") # Adjust model name if needed

4-қадам: Facebook AI ұқсастықты іздеу (FAISS) — ұқсастықты тиімді іздеуге және жоғары өлшемді векторларды кластерлеуге арналған кітапхана. from_texts функциясы мәтін бөліктерін векторларға түрлендіреді (3-қадамнан бастап) және оларды FAISS векторлар қоймасында сақтайды. FAISS векторлық қашықтықтарды (косинус, евклид) жоғары оңтайландырылған түрде салыстыру арқылы сұрауыңызға ұқсас бөліктерді табуға көмектеседі.

 # Step 4: Create a FAISS vector store using all chunks vector_store = FAISS.from_texts(all_chunks, embeddings)

5-қадам: 4-қадамнан бастап FAISS векторлар қоймасындағы ендірулерде сақталған білімдер негізінде жауаптарды жасайтын немесе сұрауларды өңдейтін Ollama LLM іске қосамыз.

 # Step 5: Initialize the Ollama LLM llm = Ollama(model="llama2", temperature=0.3)

Бірге 3-5 қадамдар RAG мүмкіндігін қосады, мұнда LLM векторлық қоймадағы сақталған бөліктерден білімді ала алады және пайдаланушы сұрауына ең сәйкес жауап беру үшін шығарылған мәтінмәнді пайдалана алады.


6-қадам: Мұнда пайдаланушы сұрауына жауап беру үшін сақталған білімді сұрау үшін ask_question_with_fallback функциясын анықтаймыз. Бірақ егер ол ұқсас құжаттарды таба алмаса немесе ұқсастық көрсеткіші төмен болса, ол негізгі LLM туралы жалпы білімге қайта оралады (Оллама мұнда).

 # Step 6: Create the question-answering function def ask_question_with_fallback(query): # Retrieve relevant documents docs = vector_store.similarity_search(query, k=3) docs = vector_store.similarity_search(query, k=3) for doc in docs: print(f"Retrieved doc: {doc.page_content[:200]}") # If no relevant documents or low similarity, use general knowledge #if not docs or all(doc.metadata.get('score', 1.0) < 0.3 for doc in docs): # return use_general_knowledge(query) if not docs: return use_general_knowledge(query) # Format retrieved documents as context context = "\n\n".join([doc.page_content for doc in docs]) # Construct RAG prompt rag_prompt = f""" Use the following pieces of context to answer the question at the end. If you don't know the answer based on this context, respond with "NO_ANSWER_FOUND". Context: {context} Question: {query} Provide a direct and concise answer to the question based only on the context above: """ rag_answer = llm(rag_prompt) # Check for fallback trigger if "NO_ANSWER_FOUND" in rag_answer or "don't know" in rag_answer.lower() or "cannot find" in rag_answer.lower(): return use_general_knowledge(query) return { "answer": rag_answer, "source": "URL content", "source_documents": docs }

7-қадам: Бұл қалпына келтіру функциясы. 6-қадамда тиісті құжаттарды алу мүмкін болмаса, LLM пайдаланушы сұрауына жауап беру үшін өзінің жалпы білімін пайдаланады.

 # Step 7: Define fallback general knowledge function def use_general_knowledge(query): general_prompt = f""" Answer this question using your general knowledge: {query} Provide a direct and helpful response. If you don't know, simply say so. """ general_answer = llm(general_prompt) return { "answer": general_answer, "source": "General knowledge", "source_documents": [] }

8-қадам: Бұл қадам осы RAG механизмін пайдалану үлгісін көрсетеді. Сіз үлгіге сұраныс бересіз және LLM сұрауыңызға жауап беру үшін сыртқы немесе ішкі білімді пайдаланады.

 #Step 8 # Example usage query = "What is the hardest part about managing diabetes?" # Replace with your actual question result = ask_question_with_fallback(query) # Display results print("Answer:") print(result["answer"]) print(f"\nSource: {result['source']}") if result["source_documents"]: print("\nSource Documents:") for i, doc in enumerate(result["source_documents"]): print(f"Source {i+1}:") print(doc.page_content[:200] + "...") # Print first 200 chars of each source print()

8-қадамдағы менің нәтижесі төменде. Модель RAG пайдаланады, ол FAISS дүкенінен ұқсас құжатты анықтайды және менің сұрауыма жауап береді.

Қорытындылай келе, URL мекенжайлары бар RAG пайдалану қант диабетіне қатысты сұраулардағы кеңейтілген білімді іздеудің қуатты тәсілі болып табылады. Reddit сияқты қауымдастық платформаларының шынайы дүниетанымын ашық бастапқы LLM-лердің үстіне біріктіру арқылы біз жекелендірілген және нақты ақпаратты ұсына аламыз - онымен күнделікті өмір сүретіндерден кім жақсы түсінеді?


Бұл әдіс үнемді ғана емес, сонымен бірге ынтымақтастықты дамытады, сайып келгенде, қант диабетін басқаратын адамдарға қолдауды жақсартады. Жасанды интеллект дамып келе жатқандықтан, оның денсаулық сақтау мен әл-ауқатты жақсарту әлеуеті әлі де кең.


Сюзи Хазелвудтың көркем суреті: https://www.pexels.com/photo/close-up-photo-of-sugar-cubes-in-glass-jar-2523650/

L O A D I N G
. . . comments & more!

About Author

Shilpi Bhattacharyya HackerNoon profile picture
Shilpi Bhattacharyya@shbhattachar
Founder at AI-Basil.com | Product Manager at IBM

ТЕГТЕРДІ АЛУ

БҰЛ МАҚАЛА БАСҚАРҒАН...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks