Ако радите у компанији која користи веб податке, сигурно знате да је то само први слој сложенијег производа. У ствари, веб-скрапирани подаци су традиционално складиштени у датотекама или базама података (куцкете за складиштење у облаку, језера података или складишта података) и затим се анализирају помоћу пословне интелигенције (БИ) алата, и комерцијалних и власничких. На пример, тим може скрапити цене производа или прегледе купаца са веба, сачувати сирове податке као ЦСВ / ЈСОН датотеке, учитати их у СКЛ складиште података, а затим користити БИ платформе као што су Таблео или Повер БИ да би креирали табла и Данас, Велики језички модели (ЛЛМ) мењају ову парадигму. Уместо да се ослањају искључиво на статичке табеле или СКЛ упите, организације могу да користе АИ асистенте да добију увид из огребаних података преко природног језика. Другим речима, уместо да човек пише упит или тумачи графикон, АИ асистент може директно одговорити на питања о подацима. Размислите о томе да имате свој ЦхатГПТ-попут интерфејс и напишете неке позиве да бисте добили увид, заобилазећи стварање табла. Видио сам овај тип приступа у неколико производа пре него што су ЛЛМ-ови изашли, али без великог успеха. Еволуирајући АИ пејза zamisli da pitaš, Уместо да пронађете праву таблу или Екцел извештај сами да бисте добили одговор. Овај приступ обећава бржи, интуитивнији приступ информацијама за не-техничке кориснике без преоптерећења грађевинских графикона или писања кода.У прошлим компанијама у којима сам радио, видио сам превише пута пролиферацију различитих табла по групи корисника (ако не и по кориснику), понекад извлачећи различите бројеве једни од других. "Који конкурент је имао највишу цену прошлог квартала?" Наравно, појављује се нови скуп изазова: шта је са халуцинацијама?Ако не видимо основни број одговора, можемо ли бити 100% сигурни да је одговор тачан? У овом посту (и следећем у лабораторијској серији), ми ћемо изградити пројекат од краја до краја, где ћемо почети сцраппинг чланке у овом билтену, стављајући их у базу података погодне за коришћење АИ, преузимање овог знања, а затим објављивање веб апликације која може да користи обогаћену верзију ГПТ модела. Побољшање знања ЛЛМ Интегрисање прилагођених података (као што је ваш скраћени скуп података) у ЛЛМ може се углавном урадити на два начина: Модел или коришћење , и свака од ових метода има предности и недостатке. хајде да видимо како се разликују и који приступ би могао бити најбољи за наш случај употребе. fine-tuning Retrieval-Augmented Generation (RAG) Fine-Tuning vs. Retrieval-Augmented генерација значи обучавање базе ЛЛМ на додатним подацима тако да апсорбује нова знања. У суштини, узимате претходно обучени модел и наставите да га обучавате на вашој домени специфичном скупу података, прилагођавајући своје тегове да бисте уградили то знање. На пример, ако сте скрапили збирку техничких чланака, могли бисте фино прилагодити ЛЛМ на тим чланцима. Fine-tuning se često radi tako što se modelu pruža veliki skup parova pitanja i odgovora ili tekstovnih odeljaka iz vaših podataka tako da nauči da odgovara sa tim informacijama kada su relevantne. – знање постаје део његових параметара.Следећи пут када упитате модел, он може да нацрта ове укусне информације без потребе за спољном помоћи. Fine-tuning intrinsically knows augmented from the inside користи другачији приступ: модел остаје непромењен, али му дајемо приступ спољној бази знања (обично преко претраге вектора). За бумере попут мене, размислите о томе као да убаците ЦД у Нео главу у Матрицу да бисте научили нове вештине и кренули. У нашем случају, база знања може бити збирка скраћених веб чланака који се чувају у специјализованој бази података. РАГ је као испит отворене књиге за ЛЛМ - у вријеме упита погледа на релевантну "страницу" података и користи је за формулисање одговора, уместо да се ослања само на своју интерну меморију. Retrieval-Augmented Generation (RAG) retrieve relevant documents Као што можете замислити, једна кључна разлика је тамо где се додатно знање задржава: са финим подешавањем, знање је уграђено (тежине модела се ажурирају). Са РАГ-ом, знање остаје Fine-tuning je sličan podučavanju modela novim činjenicama trajno, dok je RAG kao opremljanje modela dinamičnom bibliotekom koju može da upućuje na letenje. in the model itself external Оба приступа имају различите предности и недостатке: Fine-Tuning: Once fine-tuned, the model can respond faster and more integratedly to new knowledge. It doesn't need lengthy prompts with documents each time. A well-fine-tuned model typically outperforms the base model on domain-specific questions because it has a deeper understanding of that niche terminology and content. Pros: Fine-tuning can be resource-intensive and time-consuming – you need sufficient training data and computing power (or budget if using a service). It also makes the model static concerning that training snapshot. If your scraped data changes or new information comes in, you’d have to fine-tune again to update the model. There’s also a risk of the model or overriding some of its original knowledge if not carefully managed. Importantly, fine-tuning means your data becomes part of the model’s parameters, which could be a privacy concern if the model weights are exposed or if using a third-party service to fine-tune (your data is uploaded for training). Last but not least, once the knowledge is embedded in the model, you cannot cite any article used to improve it. Cons: forgetting Retrieval-Augmented Generation (RAG): No need to modify the LLM itself – you leave the base model as-is and simply provide relevant context at query time. This makes updating or expanding the knowledge base easy: add or remove documents in your external index, and the model will use the latest data. It’s very flexible and (which can be more secure). RAG can reduce hallucinations by grounding answers in real sources – essentially, the model has the “receipts” to back up its answer. It also typically requires less upfront work than full fine-tuning; most effort goes into setting up the retrieval system. Pros: keeps your proprietary data external RAG introduces more moving parts – you need a system for embedding and indexing documents and retrieving them at runtime. At query time, you pay the cost in latency and token length for feeding documents into the model’s prompt. If the retrieved documents aren’t relevant (due to a bad query or vector mismatch), the answer will suffer. The LLM is also limited by its input size; if the documents plus question exceeds the model’s context window, you might have to truncate or select fewer documents. Additionally, the raw text of documents might influence the model's style, which could lead to less coherent or conversational answers unless you prompt it to refine the wording. Cons: Укратко, фино подешавање помаже у фокусираном разумевању, док РАГ омогућава приступ знању у реалном времену.За наш случај употребе интегрисања стално ажурираних скраћених података, РАГ чини се бољим приступом: можете континуирано извлачити нове веб податке и одмах га користити, а не периодично обучавати цео модел. Пре него што наставите, вреди напоменути да фино подешавање и РАГ нису међусобно искључују; могу се међусобно допуњавати. На пример, можете фино подесити модел како бисте прилагодили свој тон или способност да пратите инструкције (или додате знање које је мало и статично), и још увек користите РАГ да му дате приступ већој бази знања која се често ажурира. Коришћење локалног модела у односу на спољни АПИ Druga razmatranja su за свог АИ асистента: локални (отворени изворни) модел који покрећете сами или хостовани модел преко АПИ-а (као што је ОпенАИ ГПТ-3.5 / ГПТ-4 или други). what LLM to use – Модели као што су ЛЛАМА 2, Мистрал или Фалцон могу се покренути на сопственим серверима. Ваши скраћени подаци никада не напуштају вашу околину, што је важно ако садржи осетљиве информације. Можете их слободно прилагодити својим подацима или модификовати како раде. По трошковима, покретање локалног модела може бити јефтиније за велике количине упита (без API накнада), али морате улагати у хардвер или облачну инфраструктуру да бисте га хостовали. Недостатак је да многи отворени модели не могу да одговарају перформансама најновијих ГПТ-а. Можда ћете морати да користите веће или више специјализованих модела да бисте добили упоредиву перформансе, што може бити компликовано за управљање. имају високо домен специфичан скуп података и стручност, локални модел може бити фино прилагођен да се одликује у том домену, што га чини снажним решењем за "приватни ГПТ". Local Open-Source LLMs control and privacy до – Коришћење АПИ-а као што је ОпенАИ ГПТ-4 значи да не морате да бринете о покретању модела; само шаљете своје позиве на њихову услугу и добијете завршетак. Ово је веома погодно и обично вам даје приступ најсавременијем квалитету модела без проблема са инфраструктуром. За наш сценарио, можете користити РАГ једноставно препуштањем примљених докумената на ваш позив и тражећи од АПИ-а да одговори. Недостаци се овде односе на прилагођавање и приватност. Нису сви модели доступни за фин-тунинг ( Такође сте подложни правилима провајдера (на пример, они могу имати филтере садржаја који могу спречити неке упите везане за гребање). Са тачке гледишта приватности, шаљете своје податке (упит и преузети контекст) трећој страни, тако да не бих предложио овај приступ за осетљиве или ауторске податке. External API LLMs (e.g. OpenAI’s) ОпенАИ, на пример, омогућава вам да то урадите на ГПТ4-о и ГПТ4-мини ОпенАИ, на пример, омогућава вам да то урадите на ГПТ4-о и ГПТ4-мини Генерално, ако ваш случај употребе укључује високо осетљиве податке или захтева потпуну контролу, препоручује се локални ЛЛМ упркос додатном напору. Ако је ваш приоритет најбоља могућа језичка способност и брза подешавања, хостирани модел као што је ОпенАИ би могао бити бољи избор. У имплементацији овог поста, ми ћемо илустровати коришћење ОпенАИ-овог ГПТ АПИ-а за једноставност и квалитет, али систем за претраживање који смо изградили могао би се једноставно хранити у модел отвореног кода као што је Ллама2 преко ХуггингФаце или ЛангЦхаин библиотека. Механизам за претраживање (векторска база података + претрага сличности) остаје исти; само Узимајући у обзир ове одлуке, интегришемо моје скраћене чланке у АИ асистента. користићемо приступ РАГ са моделом ОпенАИ, који се добро усклађује са континуирано ажурираним веб подацима и избегава потребу за скупим радовима фино подешавања. Сцраппинг ТВСЦ са Фирецравл је веб скрапинг мотор изложен као РЕСТ АПИ и СДК. Специјално је дизајниран да претвори веб странице у (у форматима као што су чист текст или ознака), руковање свим тешким подизањем, као што су претраживање линкова, рендерирање ЈаваСцрипт-а, итд. Велика предност Фирецравл-а је да је са једним АПИ позивом могуће огребати читав сајт. Firecrawl LLM-ready data Firecrawl Firecrawl За блог Веб Сцрапинг Цлуб, користићемо своју мапу сајта да бисмо открили све URL-ове чланка. (Блог је хостован на Субстацк-у, који пружа КСМЛ мапу сајта са листом свих постова.) Прво, инсталирамо Фирецравл инсталирањем свог Питхон СДК-а и аутентификацијом помоћу АПИ кључа (под претпоставком да сте се пријавили и добили кључ): from firecrawl import FirecrawlApp import os os.environ["FIRECRAWL_API_KEY"] = "YOURKEY" # or load from .env app = FirecrawlApp() # Define the sitemap URL (we can loop this for multiple years if needed) map_result = app.map_url('https://substack.thewebscraping.club/sitemap.xml', params={ 'includeSubdomains': True }) print(map_result) for article in map_result['links']: if '/p/' in article: print(article) response = app.scrape_url(url=article, params={'formats': [ 'markdown' ]}) Са само неколико редова кода, наши чланци су већ у формату Markdown. Избор векторске базе података за RAG А је кључна компонента имплементације РАГ-а. Она чува уграђења ваших докумената (векторске репрезентације) и омогућава брзо претраживање сличности да бисте добили релевантне документе за одређено уграђивање упита. Многе опције су доступне, укључујући библиотеке отвореног кода и управљане услуге у облаку, али за нашу имплементацију користићемо . vector database Pinecone je a За разлику од база података отвореног кода које захтевају самохостинг, Пинецоне је решење рођено у облаку, што значи да не морамо да бринемо о управљању инфраструктуром. Пинеконе fully managed vector database Пинеконе Преузети Pinecone Први кораци су, наравно, пријављивање на Пинецоне и добијање АПИ_КЕИ и окружења са табла. pip install pinecone На крају, онда можемо да се повежемо са Пинецоне-ом у нашем сценарију from pinecone import Pinecone, ServerlessSpec pc = pinecone.Pinecone( api_key="YOUR API KEY" ) Vrednost okruženja dolazi iz Pinecone web konzole kada kreirate API ključ. Креирање пинецоне индекса Уместо да буде у обичном тексту, то је у векторском формату (у основи низ бројева), што омогућава ЛЛМ да разуме који унос у индексу је вероватније добар одговор на упит који ЛЛМ прави. у а као , поред векторских података, имамо и метаподаци: метаподаци су Складиштени поред сваког вектора (уграђивање) да би повратак био значајнији. vector database Pinecone, , or ChromaDB тежине extra information ChromaDB ChromaDB тежине тежине dok Представља користи се за претрагу сличности, даје структуриране информације о томе шта вектор представља. Док ћемо у векторским подацима убацити ознаку чланака, у метаподацима ћемо користити неке информације које желимо да ЛЛМ подели са нама, као што су аутор блога који је коришћен за одговор, наслов и линк на пост. vectors numerical embeddings metadata filtering, categorization, and interpretability index_name = "article-index" if not pc.has_index(index_name): index_model = pc.create_index_for_model( name=index_name, cloud="aws", region="us-east-1", embed={ "model":"llama-text-embed-v2", "field_map":{"text": "chunk_text"} } ) #pc.describe_index(index_name) #to get the host index=pc.Index(host='YOURINDEXENDPOINT') ..... article_data = [ {"id": f"article-{i}", "text": page["markdown"], "url": page["metadata"]["url"], "title": page["metadata"]["title"], "author": page["metadata"]["author"][0]} for i, page in enumerate(scrape_results['data']) ] #print(article_data) # Generate embeddings using LLaMA v2 for article in article_data: # Estrai il testo dell'articolo text = article["text"] #print(text) # Single article insert to avoid failures embedding = pc.inference.embed( model="llama-text-embed-v2", inputs=[text], parameters={"input_type": "passage"} ) # Prepare data for Pinecone upsert vector_data = { "id": article["id"], # Unique article ID "values": embedding[0]["values"], # Embedding vector "metadata": { "url": article["url"], # Store article URL "content": text[:300], # Store first 500 chars as a preview/snippet "title": article["title"][:100], "author": article["author"][:50] } } #print(vector_data) # Upsert the single article into Pinecone index.upsert(vectors=[vector_data], namespace="articles") print(f"✅ Upserted: {article['id']} ({article['title']})") # Optional: Add a short delay to prevent API rate limits (adjust as needed) time.sleep(1) Као што можете видети из кода, у основи итерирамо сваки чланак који је раније скраћен и додати га на ново креирани индекс под називом . article-index Ако желите да играте више са Пинецоне постоји an extensive documentation on their website. Огромна документација на њиховој веб страници. Али сада сам убацио све чланке на индекс, можемо ли извући информације које су нам потребне? Креирао сам основни скрипт под називом query.py да тестирам резултате претрага на индексу. Када је постављено питање „Можете ли, молим вас, да наведете неке чланке о заобилажењу Касаде?“, упит враћа следеће чланке: {'matches': [{'id': 'article-0', 'metadata': {'author': 'Pierluigi Vinciguerra', ..., 'title': 'THE LAB #76: Bypassing Kasada With Open ' 'Source Tools In 2025', 'url': 'https://substack.thewebscraping.club/p/bypassing-kasada-2025-open-source'}, 'score': 0.419812053, 'values': []}, {'id': 'article-129', 'metadata': {'author': 'Pierluigi Vinciguerra', ..., 'title': 'How to by-pass Kasada bot mitigation?', 'url': 'https://substack.thewebscraping.club/p/how-to-by-pass-kasada-bot-mitigation'}, 'score': 0.418432325, 'values': []}, {'id': 'article-227', 'metadata': {'author': 'Pierluigi Vinciguerra', ..., 'title': 'Scraping Kasada protected websites', 'url': 'https://substack.thewebscraping.club/p/scraping-kasada-protected-websites'}, 'score': 0.378159761, 'values': []}], 'namespace': 'articles', 'usage': {'read_units': 6}} Није лоше!Сва три чланка су била управо о теми! За данас је довољно, у следећој епизоди ћемо видети како повезати овај ДБ са ГПТ4 и затим креирати једноставан кориснички интерфејс за писање позива и добити податке које су вам потребне. Чланак је део серије "Лаб" од стране Пиерлуиги Винцигуерра. Погледајте његову подстацк страницу за више знања о Веб Сцраппинг-у. Чланак је део серије "Лаб" од стране Пиерлуиги Винцигуерра. Погледајте његову подстацк страницу за више знања о Веб Сцраппинг-у. „Лабораторија“