Ireo maodely amin'ny fiteny lehibe ankehitriny dia mahazo fampahalalana tsy mitsaha-mitombo. Na izany aza, mbola misy angon-drakitra tsy miankina be dia be izay tsy azon'ireo modely ireo. Izany no mahatonga ny iray amin'ireo fampiharana malaza indrindra amin'ny LLM eo amin'ny sehatry ny orinasa dia ny taranaka ampitomboina ny famerenana—RAG raha fintinina. amin'ny , sehatra famakafakana angon-drakitra ampiasain'ny AI, dia nahazo hevitra sarobidy momba ny fananganana rafitra RAG mahomby. Amin'ity lesona ity dia hizara ny sasany amin'ireo fianaranay izahay ary hampiseho aminao ny fomba hamoronana rafitra RAG anao manokana. Vizly Hianatra ny fomba fampiasana LangChain ianao, ilay rafitra malaza indrindra amin'ny fananganana rafitra RAG, mba hananganana rafitra RAG tsotra. Amin'ny fiafaran'ny lesona dia hanana chatbot isika (miaraka amin'ny interface Streamlit sy ny rehetra) izay RAG amin'ny alàlan'ny angon-drakitra manokana mba hanomezana valiny amin'ireo fanontaniana. Inona ny RAG? Mba hanazavana ny atao hoe RAG, andeha isika handinika ohatra tsotra. Mpianatra iray tao amin'ny oniversite iray taona voalohany, Chandler, dia mieritreritra ny handalo kilasy vitsivitsy saingy te-hiantoka fa tsy mandika ny politikan'ny fidirana eny amin'ny oniversite izy. Tahaka ny amin'izao andro izao, mametraka fanontaniana izy. amin'ny ChatGPT Mazava ho azy fa tsy afaka mamaly izany ny ChatGPT. Tsy moana ny chatbot — tsy afaka miditra amin'ny antontan-taratasin'ny oniversiten'i Chandler fotsiny. Noho izany, i Chandler dia nahita ny antontan-taratasy momba ny politika ary nahita fa famakiana ara-teknika lava be izay tsy tiany hivezivezy. Manome ny antontan-taratasy manontolo amin'ny ChatGPT kosa izy ary mametraka ny fanontaniana indray. Amin'ity indray mitoraka ity dia azony ny valiny. Tranga iray momba ny taranaka ampitomboina ny famerenana indray izany. Ny valin'ny modelin'ny fiteny (taranaka) dia ampitomboina (ampitomboina) amin'ny alalan'ny teny manodidina nalaina avy amin'ny loharano iray tsy anisan'ny fanofanana tany am-boalohany. Ny dikan-teny scalable amin'ny rafitra RAG dia afaka mamaly ny fanontanian'ny mpianatra amin'ny alàlan'ny fikarohana ny antontan-taratasin'ny anjerimanontolo, amin'ny fitadiavana ireo mifandraika amin'izany, ary amin'ny fakana ireo lahatsoratra izay mety ahitana ny valiny. Amin'ny ankapobeny, ao amin'ny rafitra RAG dia maka vaovao avy amin'ny loharanom-baovao tsy miankina ianao ary mamahana azy amin'ny maodely fiteny iray, ahafahan'ny modely manome valiny mifanaraka amin'ny teny manodidina. Anisan'ny fampiharana RAG Ny rafitra toy izany, na dia tsotra aza, dia hanana singa mihetsika maro. Alohan'ny hananganana iray ny tenantsika dia mila mandinika ny maha-izy azy sy ny fomba iarahan'izy ireo isika. Docs Ny singa voalohany dia antontan-taratasy na fitambarana antontan-taratasy. Mifototra amin'ny karazana rafitra RAG amboarinay, ny antontan-taratasy dia mety ho rakitra lahatsoratra, PDF, pejin-tranonkala (RAG amin'ny angona tsy voarindra) na grafika, SQL, na angona NoSQL (RAG amin'ny angon-drakitra voarafitra). Izy ireo dia ampiasaina hampidirana karazana data isan-karazany ao amin'ny rafitra. Mpitondra antontan-taratasy dia manatanteraka kilasy an-jatony antsoina hoe mba hamaky angon-drakitra avy amin'ny loharanom-baovao isan-karazany toy ny PDF, Slack, Notion, Google Drive, sy ny sisa. LangChain mpanafatra antontan-taratasy Ny kilasin'ny mpanafatra antontan-taratasy tsirairay dia miavaka, saingy mitovy ny fomba fiasa . Ohatra, ity no fomba ahafahanao mampiditra antontan-taratasy PDF sy pejy web amin'ny LangChain: .load() from langchain_community.document_loaders import PyPDFLoader, WebBaseLoader # pip install langchain-community pdf_loader = PyPDFLoader("framework_docs.pdf") web_loader = WebBaseLoader( "https://python.langchain.com/v0.2/docs/concepts/#document-loaders" ) pdf_docs = pdf_loader.load() web_docs = web_loader.load() Ny kilasin'ny PyPDFLoader dia mitantana rakitra PDF amin'ny alàlan'ny fonosana PyPDF2 eo ambanin'ny saron-tava, fa ny WebBaseLoader kosa dia manaisotra ny votoatin'ny pejin-tranonkala nomena. dia misy antontan-taratasy efatra, iray isaky ny pejy: pdf_docs >>> len(pdf_docs) 4 Raha tsy misy afa-tsy iray ihany : web_docs >>> print(web_docs[0].page_content[125:300].strip()) You can view the v0.1 docs here.IntegrationsAPI referenceLatestLegacyMorePeopleContributingCookbooks3rd party tutorialsYouTubearXivv0.2v0.2v0.1🦜️🔗LangSmithLangSmith DocsLangCh Ireo zavatra antontan-taratasy ireo dia omena amin'ny fampidirana modely mba hahatakarana ny dikan'ny semantika ao ambadiky ny lahatsoratra. Ho an'ny antsipiriany momba ny karazana entana entana hafa, LangChain dia manolotra a . pejy manokana momba ny fomba Mpizara lahatsoratra Raha vantany vao nampiditra ny antontan-taratasinao ianao, dia zava-dehibe ny manasaraka azy ireo ho ampahany kely kokoa sy azo fehezina amin'ny lahatsoratra. Ireto ny antony lehibe indrindra: Maro ny modely fametahana (bebe kokoa amin'izy ireo any aoriana) no manana fetra ambony indrindra. Ny famerenana dia marina kokoa rehefa manana ampahany kely kokoa ianao. Ny modely amin'ny fiteny dia omena ny contexte marina. LangChain dia manolotra karazana mpizara lahatsoratra maro eo ambanin'ny fonony langchain_text_splitters, ary samy hafa izy ireo arakaraka ny karazana antontan-taratasy. Ity ny fomba fampiasana hanasaraka ny lahatsoratra tsotra mifototra amin'ny lisitry ny mpanasaraka sy ny habeny: RecursiveCharacterTextSplitter !pip install langchain_text_splitters from langchain_text_splitters import RecursiveCharacterTextSplitter # Example text text = """ RAG systems combine the power of large language models with external knowledge sources. This allows them to provide up-to-date and context-specific information. The process involves several steps including document loading, text splitting, and embedding. """ # Create a text splitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=50, chunk_overlap=10, length_function=len, separators=["\n\n", "\n", " ", ""], ) # Split the text chunks = text_splitter.split_text(text) # Print the chunks for i, chunk in enumerate(chunks): print(f"Chunk {i + 1}: {chunk}") Output: Chunk 1: RAG systems combine the power of large language Chunk 2: language models with external knowledge sources. Chunk 3: This allows them to provide up-to-date and Chunk 4: and context-specific information. Chunk 5: The process involves several steps including Chunk 6: including document loading, text splitting, and Chunk 7: and embedding. Ity splitter ity dia maro karazana ary miasa tsara amin'ny tranga fampiasana maro. Izy io dia mamorona ny tapany tsirairay miaraka amin'ny fanisan'ny tarehintsoratra manakaiky ny araka izay azo atao. Izy io dia afaka mifamadika miverimberina eo amin'ny fanasarahana hisaraka mba hitazonana ny isan'ny toetra. chunk_size Amin'ity ohatra etsy ambony ity, ny mpizara anay dia manandrana mizara amin'ny tsipika vaovao aloha, avy eo amin'ny habaka tokana, ary farany eo anelanelan'ny endri-tsoratra rehetra mba hahatratrarana ny haben'ny sombiny. Misy mpizara maro hafa ao anaty fonosana . Ireto ny sasany: langchain_text_splitters HTMLSectionSplitter PythonCodeTexSplitter RecursiveJsonSplitter sy ny sisa. Ny sasany amin'ireo mpizara dia mamorona sombintsombiny manan-danja amin'ny fampiasana modely mpanova eo ambanin'ny kapa. Ny mpizara lahatsoratra havanana dia misy fiantraikany lehibe amin'ny fanatanterahana ny rafitra RAG. Raha mila fanazavana manokana momba ny fomba fampiasana splitter lahatsoratra dia jereo ny mifandraika . toro-lalana eto Fametrahana modely Raha vao mizara ho lahatsoratra ny antontan-taratasy dia mila asiana kaody ao amin'ny sarin'ny isany, izay fepetra takiana amin'ny maodely kajy rehetra miasa miaraka amin'ny angona lahatsoratra. Ao amin'ny tontolon'ny RAG, ity encoding ity dia antsoina hoe ary atao amin'ny alàlan'ny . Mamorona fanehoana vetaveta amin'ny lahatsoratra iray izay mirakitra ny dikan'ny semantika izy ireo. Amin'ny fanolorana lahatsoratra amin'izany fomba izany dia azonao atao ny manao asa matematika amin'izy ireo, toy ny fikarohana ny angon-drakitra antontan-taratasy ho an'ny lahatsoratra mitovitovy amin'ny dikany na fitadiavana valiny amin'ny fanontanian'ny mpampiasa. embedding embedding models LangChain dia manohana ny mpamatsy modely lehibe rehetra, toy ny OpenAI, Cohere, HuggingFace, sy ny sisa. Izy ireo dia ampiharina amin'ny kilasy ary manome fomba roa: ny iray amin'ny fametahana antontan-taratasy ary ny iray amin'ny fametrahana fanontaniana (fampandrenesana). Embedding Ity misy kaody ohatra iray izay mampiditra ny sombin-tsoratra noforoninay tamin'ny fizarana teo aloha tamin'ny fampiasana OpenAI: from langchain_openai import OpenAIEmbeddings # Initialize the OpenAI embeddings embeddings = OpenAIEmbeddings() # Embed the chunks embedded_chunks = embeddings.embed_documents(chunks) # Print the first embedded chunk to see its structure print(f"Shape of the first embedded chunk: {len(embedded_chunks[0])}") print(f"First few values of the first embedded chunk: {embedded_chunks[0][:5]}") Output: Shape of the first embedded chunk: 1536 First few values of the first embedded chunk: [-0.020282309502363205, -0.0015041005099192262, 0.004193042870610952, 0.00229285703971982, 0.007068077567964792] Ny vokatra etsy ambony dia mampiseho fa ny maodely fametahana dia mamorona virtoaly mirefy 1536 ho an'ny ampahany rehetra ao amin'ny antontan-taratasintsika. Mba hampidirana fanontaniana tokana dia azonao ampiasaina ny fomba : embed_query() query = "What is RAG?" query_embedding = embeddings.embed_query(query) print(f"Shape of the query embedding: {len(query_embedding)}") print(f"First few values of the query embedding: {query_embedding[:5]}") Output: Shape of the query embedding: 1536 First few values of the query embedding: [-0.012426204979419708, -0.016619959846138954, 0.007880032062530518, -0.0170428603887558, 0.011404196731746197] Vector stores Amin'ny rindranasa RAG midadasika izay ahafahanao manana antontan-taratasy gigabytes, dia hiafara amin'ny sombin-tsoratra gazillion ianao ary noho izany, vectors. Tsy misy ilana azy ireo raha tsy afaka mitahiry azy ireo amim-pahatokiana ianao. Izany no mahatonga mirongatra ankehitriny. Ankoatra ny fitehirizana ny embeddings anao, ny angon-drakitra vector dia mikarakara ny fanaovana fikarohana véctor ho anao. Ireo angon-drakitra ireo dia optimized mba hahitana haingana ireo vectors mitovitovy indrindra rehefa omena vector fanontaniana, izay tena ilaina amin'ny fakana vaovao mifandraika amin'ny rafitra RAG. ny fivarotana vector na angon-drakitra Ity misy sombin-kaody izay mampiditra ny votoatin'ny pejin-tranonkala iray ary mitahiry ireo vectors ao anaty angon-drakitra vector Chroma ( izay mandeha tanteraka amin'ny milinanao): Chroma dia vahaolana angon-drakitra vector open source !pip install chromadb langchain_chroma from langchain_community.document_loaders import WebBaseLoader from langchain_text_splitters import RecursiveCharacterTextSplitter # Load the web page loader = WebBaseLoader("https://python.langchain.com/v0.2/docs/tutorials/rag/") docs = loader.load() # Split the documents into chunks text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) chunks = text_splitter.split_documents(docs) Voalohany, mameno ny pejy miaraka amin'ny isika ary mamorona ny sombintsika. Avy eo, azontsika atao ny mampita mivantana ireo sombin-javatra amin'ny fomba an'ny miaraka amin'ny modely fametahanay safidy: WebBaseLoader from_documents Chroma from langchain_openai import OpenAIEmbeddings from langchain_chroma import Chroma db = Chroma.from_documents(chunks, OpenAIEmbeddings()) Ny zavatra rehetra momba ny angon-drakitra vetaveta ao amin'ny LangChain dia mampiseho fomba izay manaiky tady fangatahana: similarity_search query = "What is indexing in the context of RAG?" docs = db.similarity_search(query) print(docs[1].page_content) Output: If you are interested for RAG over structured data, check out our tutorial on doing question/answering over SQL data.ConceptsA typical RAG application has two main components:Indexing: a pipeline for ingesting data from a source and indexing it. This usually happens offline.Retrieval and generation: the actual RAG chain, which takes the user query at run time and retrieves the relevant data from the index, then passes that to the model.The most common full sequence from raw data to answer looks like:IndexingLoad: First we need to load our data. This is done with Document Loaders.Split: Text splitters break large Documents into smaller chunks. This is useful both for indexing data and for passing it in to a model, since large chunks are harder to search over and won't fit in a model's finite context window.Store: We need somewhere to store and index our splits, so that they can later be searched over. This is often done using a VectorStore and Embeddings model.Retrieval and Ny vokatry ny dia lisitr'ireo antontan-taratasy izay azo inoana fa misy ny fampahalalana angatahinay amin'ny fanontaniana. similarity_search Raha mila fanazavana manokana momba ny fampiasana ny fivarotana vector dia jereo ny mifandraika . toro-lalana eto Retrievers Na dia manohana ny famerenana amin'ny endrika fikarohana mitovy aza ny fivarotana vector rehetra, ny LangChain dia mametraka interface tsara izay mamerina ireo antontan-taratasy nomena fanontaniana tsy voarindra. Mila mamerina na maka antontan-taratasy fotsiny ny retriever fa tsy mitahiry azy. Retriever Toy izao ny fomba ahafahanao mamadika fivarotana vector ho retriever ao amin'ny LangChain: # Convert the vector store to a retriever chroma_retriever = db.as_retriever() docs = chroma_retriever.invoke("What is indexing in the context of RAG?") >>> len(docs) 4 Azo atao ny mametra ny isan'ny antontan-taratasy mifandraika amin'ny top amin'ny fampiasana : k search_kwargs chroma_retriever = db.as_retriever(search_kwargs={"k": 1}) docs = chroma_retriever.invoke("What is indexing in the context of RAG?") >>> len(docs) 1 Azonao atao ny mampita masontsivana hafa mifandraika amin'ny fikarohana mankany amin'ny search_kwargs. Mianara bebe kokoa momba ny fampiasana retriever avy amin'ny . tari-dalana manokana Dingana-by-dingana Workflow amin'ny fananganana RAG App ao amin'ny LangChain Ankehitriny rehefa nandrakotra ireo singa manan-danja amin'ny rafitra RAG isika dia hanangana iray ny tenantsika. Hitondra anao amin'ny fampiharana tsikelikely ny RAG chatbot natao manokana ho an'ny antontan-taratasy sy fampianarana kaody aho. Ho hitanao fa tena ilaina izany rehefa mila fanampiana kaody AI ho an'ny rafitra vaovao na endri-javatra vaovao amin'ny rafitra efa misy izay tsy mbola ao anatin'ny fototry ny fahalalana an'ny LLM ankehitriny. 0. Famoronana ny rafitry ny tetikasa Voalohany, fenoy ny lahatahiry miasa miaraka amin'ity rafitra tetikasa manaraka ity: rag-chatbot/ ├── .gitignore ├── requirements.txt ├── README.md ├── app.py ├── src/ │ ├── __init__.py │ ├── document_processor.py │ └── rag_chain.py └── .streamlit/ └── config.toml Ireto ny baiko: $ touch .gitignore requirements.txt README.md app.py $ mkdir src .streamlit $ touch src/{.env,__init__.py,document_processor.py,rag_chain.py} $ touch .streamlit/{.env,config.toml} 1. Fametrahana ny tontolo iainana Amin'ity dingana ity dia mamorona tontolo Conda vaovao ianao ary manetsika azy: $ conda create -n rag_tutorial python=3.9 -y $ conda activate rag_tutorial Avy eo, sokafy ny rakitra ary apetaho ireto fiankinana manaraka ireto: requirements.txt langchain==0.2.14 langchain_community==0.2.12 langchain_core==0.2.35 langchain_openai==0.1.22 python-dotenv==1.0.1 streamlit==1.37.1 faiss-cpu pypdf ary hametraka azy ireo: $ pip install -r requirements.txt Ary koa, mamorona rakitra hanafina rakitra amin'ny git indexing: .gitignore # .gitignore venv/ __pycache__/ .env *.pdf *.png *.jpg *.jpeg *.gif *.svg 2. Mametraka mpanentana antontan-taratasy Avy eo, sokafy ny rakitra ary apetaho ireo sombin-kaody ho avy. src/document_processor.py Ny fanafarana ilaina: import logging from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.text_splitter import Language from langchain_community.document_loaders import PyPDFLoader from langchain_community.document_loaders.parsers.pdf import ( extract_from_images_with_rapidocr, ) from langchain.schema import Document Fanazavana ny fanafarana: : Manasaraka lahatsoratra ho ampahany kely kokoa miverimberina. RecursiveCharacterTextSplitter : Enum mba hamaritana fiteny fandaharana amin'ny fizarana lahatsoratra. Language : Mamindra sy maka lahatsoratra amin'ny rakitra PDF. PyPDFLoader : OCR miasa amin'ny fakana lahatsoratra amin'ny sary. extract_from_images_with_rapidocr : maneho antontan-taratasy misy atiny sy metadata. Document : Manome fampiasa logging ho an'ny debugging sy fampahalalana. logging Avy eo, asa iray amin'ny fanodinana PDF: def process_pdf(source): loader = PyPDFLoader(source) documents = loader.load() # Filter out scanned pages unscanned_documents = [doc for doc in documents if doc.page_content.strip() != ""] scanned_pages = len(documents) - len(unscanned_documents) if scanned_pages > 0: logging.info(f"Omitted {scanned_pages} scanned page(s) from the PDF.") if not unscanned_documents: raise ValueError( "All pages in the PDF appear to be scanned. Please use a PDF with text content." ) return split_documents(unscanned_documents) Toy izao ny fandehany: Mametraka ny PDF mampiasa izy io. PyPDFLoader Manasivana pejy notarafina izy io amin'ny fanesorana ireo antontan-taratasy misy votoaty foana. Izy io dia mitanisa ny isan'ny pejy voailika, raha misy. Raha jerena ny pejy rehetra (izany hoe, tsy misy atiny lahatsoratra), dia miteraka ValueError izany. Farany, mizara ireo antontan-taratasy sisa tsy voasoka ho ampahany kely kokoa amin'ny fampiasana ny asa split_documents. Ny fiasa dia mitantana ireo tranga izay mety ahitana PDF mifangaro lahatsoratra sy pejy voasokajy, miantoka fa ny pejy mifototra amin'ny lahatsoratra ihany no voakarakara bebe kokoa. Tena ilaina izany amin'ny asa famakafakana lahatsoratra izay tsy azo ampiasaina ny pejy voa-scan tsy misy OCR. Hofaritantsika ny fiasan'ny any aoriana. split_documents Manaraka izany dia manoratra fiasa izahay haka ny vaovao avy amin'ny sary (sarin'ny sombin-kaody sy/na pejin-tranonkala): def process_image(source): # Extract text from image using OCR with open(source, "rb") as image_file: image_bytes = image_file.read() extracted_text = extract_from_images_with_rapidocr([image_bytes]) documents = [Document(page_content=extracted_text, metadata={"source": source})] return split_documents(documents) Ity fiasa ity dia manodina rakitra sary amin'ny alàlan'ny fakana lahatsoratra amin'ny alàlan'ny OCR (Optical Character Recognition). Mamaky ny rakitra sary izy, mamadika azy ho bytes, ary avy eo dia mampiasa ny tranomboky RapidOCR hanesorana lahatsoratra avy amin'ny sary. Ny lahatsoratra nalaina avy eo dia fonosina ao anaty zavatra Document misy metadata misy ny lalan'ny rakitra loharano. Farany, ny asa dia mizara ny antontan-taratasy ho kely kokoa amin'ny fampiasana ny function, izay faritanay manaraka: split_documents def split_documents(documents): # Split documents into smaller chunks for processing text_splitter = RecursiveCharacterTextSplitter.from_language( language=Language.PYTHON, chunk_size=1000, chunk_overlap=200 ) return text_splitter.split_documents(documents) Ny fiasa dia mampiasa ny kilasy RecursiveCharacterTextSplitter miaraka amin'ny syntax an'i Python mba hizarana lahatsoratra ho sombin-tsoratra 1000 sy tarehintsoratra 200 mifanindry. Ny asa farany ataonay dia manambatra ny PDF sy ny parser sary ho iray: def process_document(source): # Determine file type and process accordingly if source.lower().endswith(".pdf"): return process_pdf(source) elif source.lower().endswith((".png", ".jpg", ".jpeg")): return process_image(source) else: raise ValueError(f"Unsupported file type: {source}") Ity asa farany ity dia hampiasain'ny Streamlit UI midina andalana mba hamoronana, hampidirana ary hitahiry sombiny avy amin'ireo antontan-taratasy nomena ary hampita azy ireo any amin'ny singa RAG amin'ny rafitray. 3. Fametrahana RAG Ankehitriny, sokafy ny rakitra ary apetaho ireo sombin-kaody ho avy. src/rag_chain.py Voalohany, manafatra modules ilaina: import os from dotenv import load_dotenv from langchain.prompts import PromptTemplate from langchain_community.vectorstores import FAISS from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough from langchain_openai import ChatOpenAI, OpenAIEmbeddings # Load the API key from env variables load_dotenv() api_key = os.getenv("OPENAI_API_KEY") Ity misy fanazavana momba ny fanafarana: • : Fifandraisana amin'ny rafitra miasa • : Enta-mavesatra ny tontolo iainana • singa : os dotenv langchain : Famoronana haingana haingana PromptTemplate : Fivarotana vector maivana ho an'ny antontan-taratasy FAISS : Manova ny zavatra hafatra LLM ho lasa vokatra tady StrOutputParser : Mamorona rojo azo fehezina RunnablePassthrough , : Fifandraisana modely OpenAI ChatOpenAI OpenAIEmbeddings Manaraka, mamorona ny bitsika ho an'ny rafitra RAG izahay: RAG_PROMPT_TEMPLATE = """ You are a helpful coding assistant that can answer questions about the provided context. The context is usually a PDF document or an image (screenshot) of a code file. Augment your answers with code snippets from the context if necessary. If you don't know the answer, say you don't know. Context: {context} Question: {question} """ PROMPT = PromptTemplate.from_template(RAG_PROMPT_TEMPLATE) Ny rafitra RAG dia iray amin'ireo antony lehibe amin'ny fahombiazany. Ny dikan-tsika dia tsotra fa hahavita ny asa matetika. Amin'ny fampiharana, mandany fotoana betsaka amin'ny famerenana sy fanatsarana ny bitsika ianao. Raha tsikaritrareo dia mampiasa kilasy izahay amin'ny fananganana ny bitsika. Ity fananganana ity dia ahafahantsika miditra amin'ny fomba mavitrika ny contexte nalaina avy amin'ny antontan-taratasy sy ny fanontanian'ny mpampiasa ho bitsika farany. PromptTemplate Raha miresaka momba ny antontan-taratasy isika dia mila fiasa hamolavola azy ireo alohan'ny handefasana azy ireo ho contexte ao amin'ny bitsika rafitra: def format_docs(docs): return "\n\n".join(doc.page_content for doc in docs) Izy io dia fiasa tsotra izay mampifandray ny votoatin'ny pejy misy ireo antontan-taratasy nalaina. Farany, mamorona fiasa izay hampivelatra ny rojo RAG izahay: def create_rag_chain(chunks): embeddings = OpenAIEmbeddings(api_key=api_key) doc_search = FAISS.from_documents(chunks, embeddings) retriever = doc_search.as_retriever( search_type="similarity", search_kwargs={"k": 5} ) llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0) rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} | PROMPT | llm | StrOutputParser() ) return rag_chain Ny asa dia manaiky sombin-taratasy, izay homen'ny asa ao anaty script. process_document document_processor.py Ny fiasa dia manomboka amin'ny famaritana ny modely fampidirana sy ny fitehirizana ny antontan-taratasy ao amin'ny fivarotana vector FAISS. Avy eo, avadika ho interface retriever miaraka amin'ny fikarohana fitoviana izay mamerina ireo antontan-taratasy dimy ambony mifanaraka amin'ny fanontanian'ny mpampiasa. Ho an'ny maodely fiteny dia hampiasa izahay fa afaka mampiasa modely hafa toa ny GPT-4o ianao arakaraka ny teti-bola sy ny filanao. gpt-4o-mini Avy eo, hatambatra ireo singa rehetra ireo amin'ny fampiasana LangChain Expression Language (LCEL). Ny singa voalohany amin'ny rojo dia rakibolana misy sy ho fanalahidy. Ny soatoavin'ireo fanalahidy ireo dia omen'ny retriever namboarin'ny asa fandrafetana anay sy ny , tsirairay avy. Ny kilasy farany dia miasa toy ny toerana misy ny fanontanian'ny mpampiasa. context question RunnablePassthrough() Ampidirina ao amin'ny bitsikan'ny rafitray ny rakibolana avy eo; Ny bitsika dia omena amin'ny LLM, izay miteraka kilasy hafatra mivoaka. Ny kilasin'ny hafatra dia omena amin'ny parser famoahana tady izay mamerina valin-teny tsotra. 4. Mamorona UI Streamlit Amin'ity fizarana ity dia hanangana ny UI eto ambany izahay ho an'ny fampiharana anay: Izy io dia interface tsara sy kely indrindra miaraka amin'ny saha fampidirana roa - ny iray ho an'ny antontan-taratasy, ny iray ho an'ny fametrahana fanontaniana momba ny antontan-taratasy. Ao amin'ny sisiny havia, angatahina ny mpampiasa hampiditra ny fanalahidin'ny API. Mba hananganana ny interface, sokafy ny script amin'ny ambaratonga ambony indrindra amin'ny lahatahiry miasa ary apetaho ity code manaraka ity: app.py import streamlit as st import os from dotenv import load_dotenv from src.document_processor import process_document from src.rag_chain import create_rag_chain # Load environment variables load_dotenv() st.set_page_config(page_title="RAG Chatbot", page_icon="🤖") st.title("RAG Chatbot") # Initialize session state if "rag_chain" not in st.session_state: st.session_state.rag_chain = None # Sidebar for API key input with st.sidebar: api_key = st.text_input("Enter your OpenAI API Key", type="password") if api_key: os.environ["OPENAI_API_KEY"] = api_key # File uploader uploaded_file = st.file_uploader("Choose a file", type=["pdf", "png", "jpg", "jpeg"]) if uploaded_file is not None: if st.button("Process File"): if api_key: with st.spinner("Processing file..."): # Save the uploaded file temporarily with open(uploaded_file.name, "wb") as f: f.write(uploaded_file.getbuffer()) try: # Process the document chunks = process_document(uploaded_file.name) # Create RAG chain st.session_state.rag_chain = create_rag_chain(chunks) st.success("File processed successfully!") except ValueError as e: st.error(str(e)) finally: # Remove the temporary file os.remove(uploaded_file.name) else: st.error("Please provide your OpenAI API key.") # Query input query = st.text_input("Ask a question about the uploaded document") if st.button("Ask"): if st.session_state.rag_chain and query: with st.spinner("Generating answer..."): result = st.session_state.rag_chain.invoke(query) st.subheader("Answer:") st.write(result) elif not st.session_state.rag_chain: st.error("Please upload and process a file first.") else: st.error("Please enter a question.") Na dia tsipika 65 monja aza ny halavany, dia mampihatra ireto fiasa manaraka ireto izy: Fampidirana fanalahidin'ny API: Mamela ny mpampiasa hampiditra ny fanalahidin'ny OpenAI API azo antoka. Fampidirana rakitra: Manohana ny fandefasana rakitra PDF, PNG, JPG, ary JPEG. Fanodinana ny antontan-taratasy: Manamboatra ny rakitra nampidirina ary mamorona sombin-tsoratra. Famoronana rojo RAG: Manangana rojom-pamokarana azo ampitomboina amin'ny alàlan'ny sombin-taratasy voavoatra. Fikarakarana fanontaniana: Manaiky ny fanontanian'ny mpampiasa momba ny antontan-taratasy nampidirina. Famoahana valiny: Mampiasa ny rojo RAG hamokatra valiny mifototra amin'ny antontan-taratasy sy ny fanontanian'ny mpampiasa. Fikarakarana hadisoana: Manome hafatra diso mety ho an'ny fanalahidin'ny API tsy hita, rakitra tsy voavoatra, na fanontaniana foana. Tamberin'ny mpampiasa: Mampiseho spinners mandritra ny fanodinana sy hafatra fahombiazana/diso mba hampahafantarana ny mpampiasa. Fitantanana fanjakana: Mampiasa ny toetry ny fotoam-pivorian'i Streamlit hitazomana ny rojo RAG manerana ny fifandraisana. 5. Mampiasa toy ny chatbot Streamlit Dingana iray sisa no tavela — ny fametrahana ny fampiharana Streamlit. Misy safidy maro eto fa ny fomba mora indrindra dia ny fampiasana Streamlit Cloud, izay maimaim-poana sy mora apetraka. Voalohany, sokafy ny script ary apetaho ireto fanitsiana manaraka ireto: .streamlit/config.toml [theme] primaryColor = "#F63366" backgroundColor = "#FFFFFF" secondaryBackgroundColor = "#F0F2F6" textColor = "#262730" font = "sans serif" Fanitsiana lohahevitra avy amin'ny safidin'ny tena manokana ireo. Avy eo, soraty ny rakitra README.md (azonao atao ny mandika ny votoatiny avy amin'ity ). rakitra nampiantranoana ity ao amin'ny GitHub Farany, mandehana any ary mamorona tahiry vaovao. Adikao ny rohiny ary avereno any amin'ny lahatahiry miasa: GitHub.com $ git init $ git add . $ git commit -m "Initial commit" $ git remote add origin https://github.com/YourUsername/YourRepo.git $ git push --set-upstream origin master Ny baiko etsy ambony dia manomboka ny Git, mamorona commit voalohany ary manosika ny zava-drehetra ho any amin'ny tahiry (aza adino ny manolo ny rohy repo amin'ny anao). Ankehitriny, tsy maintsy misoratra anarana amin'ny kaonty maimaim-poana ao amin'ny ianao. Ampifandraiso ny kaontinao GitHub ary safidio ny tahiry misy ny fampiharanao. Streamlit Cloud Avy eo, amboary ny firafitry ny app: Apetraho ny dikan-teny Python (oh: 3.9) Apetraho amin'ny ny làlan'ny rakitra lehibe app.py Ampio izay tsiambaratelo ilaina (toy ) ao amin'ny kiran'ny fampiharana OPENAI_API_KEY Farany, tsindrio ny "Deploy"! Tsy maintsy miasa ao anatin'ny minitra vitsy ny fampiharana. Ny fampiharana novokariko ho an'ity fampianarana ity dia azo jerena ato amin'ity . Andramo izany! rohy ity Famaranana Ity lesona ity dia mijery ny fifangaroana mahery vaika amin'ny Retrieval-Augmented Generation (RAG) sy Streamlit izay mamorona rafitra famaliana fanontaniana mifototra amin'ny antontan-taratasy. Mitaky ny mpamaky amin'ny dingana rehetra izany, manomboka amin'ny fametrahana tontolo iainana sy ny fanodinana antontan-taratasy ka hatramin'ny fananganana rojo RAG ary ny fametrahana fampiharana tranonkala mahafinaritra. Hevi-dehibe dia ahitana: RAG ho an'ny maodely fiteny marani-tsaina kokoa (amin'ny dikan'ny fahalalana ivelany). Ny rojo RAG dia azo amboarina amin'ny alàlan'ny LangChain, ny maodelin'i OpenAI, ary ny fampidirana vondron'olona fahatelo. Ny fampiharana dia azo atao interactive amin'ny alàlan'ny Streamlit ary apetraka ho an'ny besinimaro. Ity tetikasa ity no fototry ny fampiharana izay mandroso kokoa. Azo itarina amin'ny fomba lehibe izy io, toy ny fampidirana karazana antontan-taratasy maro, fanatsarana ny fahamarinan'ny famerenana, ary ny endri-javatra toy ny famintinana ny antontan-taratasy. Na izany aza, ny tena ataony dia ny fanehoana ny herin'ireo teknolojia ireo, tsirairay na mitambatra.