Šiame vadove mes sukursime galingą, PDF pagrįstą klausimų, atsakingų pokalbių programą, pritaikytą medicininiam ar su sveikatai susijusiu turiniu. Mes panaudosime atvirojo kodo „BioMistral LLM“ ir „Langchain“ lanksčias duomenų orkestravimo galimybes apdoroti PDF dokumentus į valdomus teksto gabaliukus. Tada mes užkoduosime šiuos gabaliukus, naudodamiesi apkabinamais veido įterpimais, užfiksuodami gilius semantinius ryšius ir saugodami juos „Chroma Vector“ duomenų bazėje, kad būtų galima gauti didelį efektyvumą. Galiausiai, naudodamiesi gavimo rinkliavos (RAG) sistema, mes integruosime gautą kontekstą tiesiai į mūsų „Chatbot“ atsakymus, užtikrindami aiškius, autoritetingus atsakymus vartotojams. Šis požiūris leidžia mums greitai išsijoti per didelius medicininių PDFS kiekius, suteikdami turtingą kontekstą, tikslią ir lengvai suprantamą įžvalgą.
Įrankių nustatymas
!pip install langchain sentence-transformers chromadb llama-cpp-python langchain_community pypdf
from langchain_community.document_loaders import PyPDFDirectoryLoader
from langchain.text_splitter import CharacterTextSplitter,RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS, Chroma
from langchain_community.llms import LlamaCpp
from langchain.chains import RetrievalQA, LLMChain
import pathlib
import textwrap
from IPython.display import display
from IPython.display import Markdown
def to_markdown(text):
text = text.replace('•', ' *')
return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
from google.colab import drive
drive.mount('/content/drive')
Pirmiausia diegiame ir sukonfigūravome „Python“ paketus dokumentų apdorojimui, įterpimo generavimui, vietinėms LLM ir išplėstinėms paieškos darbo eigoms su „Lamacpp“. Mes panaudojame „Langchain_Community“, skirtą PDF įkėlimui ir teksto padalijimui, nustatome „Retrievarqa“ ir „LLMChain“ klausimams atsakymams ir apima „To_markdown“ naudingumą ir „Google“ disko montavimą.
API rakto prieigos nustatymas
from google.colab import userdata
# Or use `os.getenv('HUGGINGFACEHUB_API_TOKEN')` to fetch an environment variable.
import os
from getpass import getpass
HF_API_KEY = userdata.get("HF_API_KEY")
os.environ("HF_API_KEY") = "HF_API_KEY"
Čia saugiai pateikiame ir nustatome apkabinamą veido API raktą kaip aplinkos kintamąjį „Google Colab“. Jis taip pat gali panaudoti „HuggingFaceHub_API_TOKEN“ aplinkos kintamąjį, kad būtų išvengta tiesiogiai atskleisti jautrius kredencialus jūsų kode.
PDFS įkėlimas ir ištraukimas iš katalogo
loader = PyPDFDirectoryLoader('/content/drive/My Drive/Data')
docs = loader.load()
Norėdami nuskaityti nurodytą PDFS aplanką, mes naudojame „PypdFDirectoryLoader“, ištraukite jų tekstą į dokumentų sąrašą ir nustatome pagrindus užduotims, tokioms kaip atsakymas į klausimus, apibendrinimą ar raktinių žodžių ištraukimą.
Įkeltus teksto dokumentus padalijimas į valdomus gabaliukus
text_splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=50)
chunks = text_splitter.split_documents(docs)
Šiame kodo fragmente „RecursiveChaCtertextSplitter“ taikomas tam, kad kiekvienas dokumentas suskaidytų dokumentuose į mažesnius, labiau valdomus segmentus.
Inicijuoti apkabinimo veidą
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-base-en-v1.5")
Naudodamiesi „HuggingFaceEmbeddings“, mes sukuriame objektą, naudodami „Baai/BGE-Base-EN-V1.5“ modelį. Tai keičia tekstą skaitmeniniais vektoriais.
Sukurti vektorinę parduotuvę ir atlikti panašumo paiešką
vectorstore = Chroma.from_documents(chunks, embeddings)
query = "who is at risk of heart disease"
search = vectorstore.similarity_search(query)
to_markdown(search(0).page_content)
Pirmiausia iš teksto gabaliukų ir nurodyto įterpimo modelio sukuriame „Chroma Vector Store“ (chroma.from_documents). Toliau jūs sukuriate užklausą, kurioje klausiama „Kam gresia širdies ligų rizika“ ir atlikite panašumo paiešką prieš saugomus įterpimus. Viršutinis rezultatas (paieška (0) .page_content) tada konvertuojamas į „Markdown“, kad būtų galima ekranuoti.
Retriverio ir pateikimo atitinkamų dokumentų kūrimas
retriever = vectorstore.as_retriever(
search_kwargs={'k': 5}
)
retriever.get_relevant_documents(query)
Mes konvertuojame „Chroma Vector Store“ į retriverį („Vectorstore.as_retriever“), kuri efektyviai pateikia atitinkamiausius dokumentus tam tikroje užklausoje.
Inicijuoti „Biomistral-7b“ modelį su LLAMACPP
llm = LlamaCpp(
model_path= "/content/drive/MyDrive/Model/BioMistral-7B.Q4_K_M.gguf",
temperature=0.3,
max_tokens=2048,
top_p=1)
Mes nustatėme atvirojo kodo vietinį „BioMistral LLM“, naudodami „LlamACPP“, rodydami į iš anksto atsisiųstą modelio failą. Mes taip pat sukonfigūruojame generavimo parametrus, tokius kaip temperatūra, MAX_TOKENS ir TOP_P, kurie kontroliuoja atsitiktinumą, pagamintus maksimalius žetonus ir branduolio atrankos strategiją.
Nustatykite paieškos rinkliavos (RAG) grandinę su pasirinktine eilute
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
from langchain.prompts import ChatPromptTemplate
template = """
<|context|>
You are an AI assistant that follows instruction extremely well.
Please be truthful and give direct answers
</s>
<|user|>
{query}
</s>
<|assistant|>
"""
prompt = ChatPromptTemplate.from_template(template)
rag_chain = (
{'context': retriever, 'query': RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
Naudodami aukščiau pateiktą, mes nustatėme RAG vamzdyną naudodami „Langchain“ karkasą. Tai sukuria pasirinktinį raginimą su instrukcijomis ir vietos žymekliais, apima konteksto retriverį ir pasitelkia kalbos modelį atsakymams generuoti. Srautas yra apibrėžiamas kaip operacijų serija („RunnablePassthrough“ tiesioginio užklausų tvarkymui, „ChatPromptemplate“, skirta greitam konstrukcijai, LLM, skirtas reaguoti į reagavimą, ir galiausiai „StroutputParser“, kad gautų švarią teksto eilutę).
Pasinaudokite skudurų grandine, kad atsakytumėte į su sveikata susijusią užklausą
response = rag_chain.invoke("Why should I care about my heart health?")
to_markdown(response)
Dabar mes vadiname anksčiau sukonstruotą skudurų grandinę su vartotojo užklausa. Jis perduoda užklausą retriveriui, gauna svarbų kontekstą iš dokumentų kolekcijos ir pateikia tą kontekstą į LLM, kad būtų sugeneruotas glaustas, tikslus atsakymas.
Apibendrinant, integruodami „BioMistral“ per „LlamacPP“ ir pasinaudodami Langchaino lankstumu, mes galime sukurti medicininės-RAG pokalbių programą su konteksto supratimu. Nuo gabeninio indeksavimo iki besiūlių RAG vamzdynų, jis supaprastina didelių PDF duomenų kiekių iškasimo procesą atitinkamoms įžvalgoms. Vartotojai gauna aiškius ir lengvai skaitomus atsakymus, suformuodami galutinius atsakymus „Markdown“. Šis dizainas gali būti išplėstas arba pritaikytas įvairioms sritims, užtikrinant mastelį ir tikslumą žinių gavimo srityje įvairiuose dokumentuose.
Naudokite „Colab“ užrašų knygelė čia. Be to, nepamirškite sekti mūsų „Twitter“ ir prisijunkite prie mūsų „Telegram“ kanalas ir „LinkedIn GrOUP. Nepamirškite prisijungti prie mūsų 75K+ ml subreddit.
🚨 Susipažinkite su „Intellagent“: atvirojo kodo daugialypės terpės sistema, skirta įvertinti sudėtingą pokalbio AI sistemą (Paaukštintas)
Asif Razzaq yra „MarkTechPost Media Inc“ generalinis direktorius. Kaip vizionierius verslininkas ir inžinierius, ASIF yra įsipareigojęs išnaudoti dirbtinio intelekto potencialą socialiniam gėrybei. Naujausias jo siekis yra dirbtinio intelekto žiniasklaidos platformos „MarkTechPost“, kuri išsiskiria išsamia mašininio mokymosi ir giliųjų mokymosi naujienų aprašymu, paleidimas, kuris yra techniškai pagrįstas ir lengvai suprantamas plačiai auditorijai. Platforma gali pasigirti daugiau nei 2 milijonai mėnesinių peržiūrų, parodydama jos populiarumą tarp auditorijos.
✅ (rekomenduojama) Prisijunkite prie mūsų telegramos kanalo