Descoperă cum să dezvolți un chatbot de întrebări și răspunsuri pentru domeniul medical folosind tehnologii open-source. Acest tutorial te ghidează prin procesarea documentelor PDF, generarea de embedding-uri și integrarea contextului cu ajutorul unui sistem RAG pentru a oferi răspunsuri precise și autoritare.
Crearea unui Chatbot de Întrebări și Răspunsuri Medicale folosind LLM-ul Open-Source BioMistral, LangChain, Stocarea Vectorială Chroma și RAG: Ghid Pas cu Pas
În acest tutorial, vom construi un chatbot puternic, bazat pe documente PDF, pentru întrebări și răspunsuri în domeniul medical sau al sănătății. Vom folosi LLM-ul open-source BioMistral și capacitățile flexibile de orchestrare a datelor ale LangChain pentru a procesa documentele PDF în segmente de text gestionabile. Apoi, vom codifica aceste segmente folosind Hugging Face embeddings pentru a capta relații semantice profunde și le vom stoca într-o bază de date vectorială Chroma pentru o recuperare eficientă. În final, utilizând un sistem de Generare Augmentată prin Recuperare (RAG), vom integra contextul recuperat direct în răspunsurile chatbot-ului, asigurând răspunsuri clare și autoritare pentru utilizatori. Această abordare ne permite să parcurgem rapid volume mari de PDF-uri medicale, oferind informații relevante, precise și ușor de înțeles.
Instalați și configurați pachetele Python necesare pentru procesarea documentelor, generarea embedding-urilor, LLM-uri locale și fluxuri de lucru avansate bazate pe recuperare cu LlamaCpp:
!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, 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')
În acest pas, instalăm și configurăm pachetele necesare, încărcăm PDF-urile folosind uneltele din comunitatea LangChain și montăm Google Drive pentru acces la fișiere.
Obțineți și setați în siguranță cheia API de la Hugging Face:
from google.colab import userdata
import os
from getpass import getpass
HF_API_KEY = userdata.get("HF_API_KEY")
os.environ["HF_API_KEY"] = HF_API_KEY
Această metodă asigură că datele sensibile rămân protejate.
Încărcați PDF-urile dintr-un director specific și extrageți textul din acestea:
loader = PyPDFDirectoryLoader('/content/drive/My Drive/Data')
docs = loader.load()
Fragmentați fiecare document în segmente mai mici:
text_splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=50)
chunks = text_splitter.split_documents(docs)
Creați un obiect de embedding-uri folosind modelul BAAI/bge-base-en-v1.5:
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-base-en-v1.5")
Construiți un magazin vectorial Chroma din segmentele de text și efectuați o căutare de similaritate:
vectorstore = Chroma.from_documents(chunks, embeddings)
query = "cine este expus riscului de boli de inimă"
search = vectorstore.similarity_search(query)
to_markdown(search[0].page_content)
Transformați magazinul vectorial într-un recuperator pentru a extrage eficient cele mai relevante documente:
retriever = vectorstore.as_retriever(search_kwargs={'k': 5})
retriever.get_relevant_documents(query)
Configurați un LLM local BioMistral folosind LlamaCpp și setați parametrii de generare:
llm = LlamaCpp(
model_path="/content/drive/MyDrive/Model/BioMistral-7B.Q4_K_M.gguf",
temperature=0.3,
max_tokens=2048,
top_p=1
)
Creați un prompt personalizat și configurați un pipeline RAG folosind LangChain:
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
from langchain.prompts import ChatPromptTemplate
template = """
<|context|>
Ești un asistent AI care urmează instrucțiunile cu strictețe.
Te rog să fii sincer și să oferi răspunsuri directe.
</s>
<|user|>
{query}
</s>
<|assistant|>
"""
prompt = ChatPromptTemplate.from_template(template)
rag_chain = (
{'context': retriever, 'query': RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
Invocați lanțul RAG cu întrebarea unui utilizator:
response = rag_chain.invoke("De ce ar trebui să-mi pese de sănătatea inimii?")
to_markdown(response)
Prin integrarea BioMistral cu LlamaCpp și valorificarea flexibilității oferite de LangChain, am creat un chatbot medical RAG cu o conștientizare robustă a contextului. Această abordare simplifică procesul de extragere a informațiilor din volume mari de PDF-uri, oferind răspunsuri clare, concise și precise, formate în Markdown. Designul poate fi extins și adaptat pentru diverse domenii, asigurând o recuperare precisă a cunoștințelor din documente variate.
Your email address will not be published. Required fields are marked *