Rumah > Peranti teknologi > AI > Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack

Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-03-03 18:35:10
asal
648 orang telah melayarinya

Bayangkan anda sedang membina sokongan pelanggan AI yang perlu menjawab soalan mengenai produk anda. Kadang -kadang ia perlu menarik maklumat dari dokumentasi anda, sementara masa lain ia perlu mencari web untuk kemas kini terkini. Sistem RAG Agentic berguna dalam jenis aplikasi AI yang kompleks. Fikirkan mereka sebagai pembantu penyelidik pintar yang bukan sahaja mengetahui dokumentasi dalaman anda tetapi juga membuat keputusan untuk mencari web. Dalam panduan ini, kami akan melalui proses membina sistem RAG QA yang agentik menggunakan kerangka haystack.

Objektif Pembelajaran

  • Ketahui apa yang agensi dan memahami bagaimana ia berbeza dari sistem kain.
  • Biasakan Rangka Kerja Haystack untuk Aplikasi LLM Agentic.
  • memahami proses bangunan segera dari templat dan belajar bagaimana untuk bergabung dengan arahan yang berlainan.
  • Ketahui cara membuat embedding menggunakan Chromadb di haystack.
  • Ketahui cara menubuhkan sistem pembangunan tempatan yang lengkap daripada membenamkan ke generasi.
Artikel ini diterbitkan sebagai sebahagian daripada Blogathon Sains Data

Jadual Kandungan Apa itu Agentic LLM? Komponen Blok Pipeline > Paip Pengindeksan

Melaksanakan router

    Buat templat prompt
    • Melaksanakan Pipeline Query
    • Lukiskan Pipeline Grafik
  • Apa itu llm yang agentik?
    • LLM Agentic adalah sistem AI yang boleh membuat keputusan secara autonomi dan mengambil tindakan berdasarkan pemahamannya tentang tugas itu. Tidak seperti LLM tradisional yang terutamanya menjana respons teks, LLM yang agentik boleh melakukan lebih banyak lagi.
    • Ia boleh berfikir, merancang, dan bertindak dengan input manusia yang minimum. Ia menilai pengetahuannya, mengiktiraf apabila memerlukan lebih banyak maklumat atau alat luaran.
    Agentic LLMS
  • Jangan bergantung pada data statik atau pengetahuan yang diindeks, sebaliknya, mereka memutuskan sumber yang harus dipercayai dan bagaimana untuk mengumpulkan pandangan terbaik.
    • Sistem jenis ini juga boleh memilih alat yang sesuai untuk pekerjaan itu. Ia boleh membuat keputusan apabila perlu mengambil dokumen, menjalankan pengiraan, atau mengautomasikan tugas. Apa yang membezakannya adalah keupayaannya untuk memecahkan masalah yang rumit ke dalam langkah -langkah dan melaksanakannya secara bebas yang menjadikannya bernilai untuk penyelidikan, analisis, dan automasi aliran kerja.
    • Rag vs Agentic Rag

      sistem kain tradisional mengikuti proses linear. Apabila pertanyaan diterima, sistem pertama mengenal pasti unsur -unsur utama dalam permintaan. Ia kemudian mencari asas pengetahuan, mengimbas maklumat yang relevan yang dapat membantu merancang tindak balas yang tepat. Sebaik sahaja maklumat atau data yang berkaitan diambil, sistem memprosesnya untuk menghasilkan tindak balas yang bermakna dan kontekstual yang relevan.

      anda dapat memahami proses dengan mudah oleh rajah di bawah.

      Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack Sekarang, sistem kain ragak meningkatkan proses ini dengan:

      Menilai keperluan pertanyaan
      • memutuskan antara pelbagai sumber pengetahuan
      • berpotensi menggabungkan maklumat dari sumber yang berbeza
      • membuat keputusan autonomi mengenai strategi tindak balas
      • Menyediakan respons yang disusun sumber
      • Perbezaan utama terletak pada keupayaan sistem untuk membuat keputusan pintar tentang cara mengendalikan pertanyaan, dan bukannya mengikuti corak generasi pengambilan tetap.

      Memahami Komponen Rangka Kerja Haystack

      Haystack adalah rangka kerja sumber terbuka untuk membina aplikasi AI, aplikasi LLM, saluran paip RAG, dan sistem carian. Ia

      menawarkan rangka kerja yang kuat dan fleksibel untuk membina aplikasi LLM. Ia membolehkan anda mengintegrasikan model dari pelbagai platform seperti Huggingface, Openai, Cohere, Mistral, dan Ollama tempatan. Anda juga boleh menggunakan model pada perkhidmatan awan seperti SageMaker AWS, Bedrock, Azure, dan GCP.

      Haystack menyediakan kedai dokumen yang mantap untuk pengurusan data yang cekap. Ia juga dilengkapi dengan satu set alat yang komprehensif untuk penilaian, pemantauan, dan integrasi data yang memastikan prestasi lancar di semua lapisan aplikasi anda. Ia juga mempunyai kerjasama komuniti yang kuat yang menjadikan integrasi perkhidmatan baru dari pelbagai penyedia perkhidmatan secara berkala.

      Apa yang boleh anda bina menggunakan haystack?

      mudah untuk memajukan kain pada data anda, menggunakan teknik pengambilan dan generasi yang mantap. Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack

      chatbot dan ejen menggunakan model genai terkini seperti GPT-4, Llama3.2, DeepSeek-R1.

      Sistem pertanyaan multimodal generatif pada jenis campuran (imej, teks, audio, dan jadual) asas pengetahuan.
      • Pengekstrakan maklumat dari dokumen atau membina graf pengetahuan.
      • Blok Bangunan Haystack
      • Haystack mempunyai dua konsep utama untuk membina sistem Genai LLM yang berfungsi sepenuhnya - komponen dan saluran paip. Mari kita fahami mereka dengan contoh mudah kain pada watak anime Jepun
      • Komponen

        Komponen adalah blok bangunan teras haystack. Mereka boleh melaksanakan tugas seperti penyimpanan dokumen, pengambilan dokumen, penjanaan teks, dan embedding. Haystack mempunyai banyak komponen yang boleh anda gunakan secara langsung selepas pemasangan, ia juga menyediakan API untuk membuat komponen anda sendiri dengan menulis kelas python.

        Terdapat koleksi integrasi dari syarikat rakan kongsi dan masyarakat.

        Pasang perpustakaan dan tetapkan ollama

        $ pip install haystack-ai ollama-haystack
        
        # On you system download Ollama and install LLM
        
        ollama pull llama3.2:3b
        
        ollama pull nomic-embed-text
        
        
        # And then start ollama server
        ollama serve
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Import beberapa komponen

        from haystack import Document, Pipeline
        from haystack.components.builders.prompt_builder import PromptBuilder
        from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
        from haystack.document_stores.in_memory import InMemoryDocumentStore
        from haystack_integrations.components.generators.ollama import OllamaGenerator
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Buat dokumen dan kedai dokumen

        document_store = InMemoryDocumentStore()
        documents = [
            Document(
                content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage."
            ),
            Document(
                content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece."
            ),
            Document(
                content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell."
            ),
            Document(
                content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names."
            ),
            Document(
                content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind."
            ),
        ]
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Pipeline

        saluran paip adalah tulang belakang kerangka Haystack. Mereka menentukan aliran data antara komponen yang berbeza. Pipelin pada dasarnya adalah graf acyclic yang diarahkan (DAG). Komponen tunggal dengan pelbagai output boleh menyambung ke komponen tunggal lain dengan pelbagai input.

        anda boleh menentukan saluran paip dengan

        pipe = Pipeline()
        
        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        pipe.connect("retriever", "prompt_builder.documents")
        pipe.connect("prompt_builder", "llm")
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        anda boleh memvisualisasikan saluran paip

        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Pipeline menyediakan:

        • Pengurusan aliran kerja modular
        • susunan komponen fleksibel
        • debugging dan pemantauan mudah
        • Arsitektur pemprosesan berskala

        nod

        nod adalah unit pemprosesan asas yang boleh disambungkan dalam saluran paip nod ini adalah komponen yang melakukan tugas tertentu.

        Contoh nod dari saluran paip di atas

        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        graf sambungan

        Connectiongraph menentukan bagaimana komponen berinteraksi.

        Dari saluran paip di atas, anda boleh memvisualisasikan graf sambungan.

        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        graf sambungan saluran paip anime

        Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack

        Struktur graf ini:

          mentakrifkan aliran data antara komponen
        • Menguruskan hubungan input/output
        • membolehkan pemprosesan selari di mana mungkin
        • Mewujudkan laluan pemprosesan yang fleksibel.
        Sekarang kita boleh menanyakan asas pengetahuan anime kita menggunakan prompt.

        Buat template prompt

        template = """
        Given only the following information, answer the question.
        Ignore your own knowledge.
        
        Context:
        {% for document in documents %}
            {{ document.content }}
        {% endfor %}
        
        Question: {{ query }}?
        """
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Prompt ini akan memberikan jawapan yang mengambil maklumat dari pangkalan dokumen.

        pertanyaan menggunakan prompt dan retriever

        query = "How Goku eliminate people?"
        response = pipe.run({"prompt_builder": {"query": query}, "retriever": {"query": query}})
        print(response["llm"]["replies"])
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Response:

        Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack RAG ini mudah tetapi konseptual berharga kepada pendatang baru. Sekarang kita telah memahami kebanyakan konsep kerangka haystack, kita dapat menyelam ke dalam projek utama kita. Sekiranya ada perkara baru, saya akan menerangkan sepanjang jalan.

        Projek Rag Soalan-Jawab untuk Fizik Menengah Tinggi

        kami akan membina soalan berasaskan buku Fizik NCERT RAG untuk pelajar menengah yang lebih tinggi. Ia akan memberikan jawapan kepada pertanyaan dengan mengambil maklumat dari buku NCERT, dan jika maklumat itu tidak ada, ia akan mencari web untuk mendapatkan maklumat itu. Untuk ini, saya akan menggunakan:

          Local Llama3.2: 3b atau llama3.2: 1b
        • chromadb untuk penyimpanan embedding
        • Model Teks Nomic Embed untuk Embedding Tempatan
        • DuckDuckGo Carian untuk carian web atau carian tavily (pilihan)
        Saya menggunakan sistem yang bebas dan benar -benar setempat.

        menyediakan persekitaran pemaju

        kami akan menyediakan conda env python 3.12

        $ pip install haystack-ai ollama-haystack
        
        # On you system download Ollama and install LLM
        
        ollama pull llama3.2:3b
        
        ollama pull nomic-embed-text
        
        
        # And then start ollama server
        ollama serve
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Pasang pakej yang diperlukan

        from haystack import Document, Pipeline
        from haystack.components.builders.prompt_builder import PromptBuilder
        from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
        from haystack.document_stores.in_memory import InMemoryDocumentStore
        from haystack_integrations.components.generators.ollama import OllamaGenerator
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Sekarang buat direktori projek bernama

        qagent .

        document_store = InMemoryDocumentStore()
        documents = [
            Document(
                content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage."
            ),
            Document(
                content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece."
            ),
            Document(
                content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell."
            ),
            Document(
                content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names."
            ),
            Document(
                content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind."
            ),
        ]
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Anda boleh menggunakan fail python biasa untuk projek atau buku nota Jupyter untuk projek itu tidak penting. Saya akan menggunakan fail python biasa.

        Buat fail

        main.py pada root projek.

        Mengimport perpustakaan yang diperlukan

          pakej sistem
        • Komponen Haystack Core
        • ChromAdb untuk Komponen Embedding
        • komponen ollama untuk kesimpulan tempatan
        • dan duckduckgo untuk carian web
        pipe = Pipeline()
        
        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        pipe.connect("retriever", "prompt_builder.documents")
        pipe.connect("prompt_builder", "llm")
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        template = """
        Given only the following information, answer the question.
        Ignore your own knowledge.
        
        Context:
        {% for document in documents %}
            {{ document.content }}
        {% endfor %}
        
        Question: {{ query }}?
        """
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Membuat kedai dokumen

        Dokumen Kedai adalah yang paling penting di sini kami akan menyimpan embedding kami untuk mendapatkan semula, kami menggunakan

        Chromadb untuk kedai embedding, dan seperti yang anda lihat dalam contoh yang lebih awal, kami menggunakan InMemoryDocumentStore untuk mendapatkan semula yang cepat dan akan menjadi lebih baik, sistem.

        Penyelesaiannya adalah pangkalan data vektor seperti pinecode, weaviate, postgres vector db, atau chromadb. Saya menggunakan Chromadb kerana percuma, sumber terbuka, mudah digunakan, dan teguh.

        query = "How Goku eliminate people?"
        response = pipe.run({"prompt_builder": {"query": query}, "retriever": {"query": query}})
        print(response["llm"]["replies"])
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        ENTERT_PATH di mana anda ingin menyimpan embedding anda.

        jalur fail pdf

        $conda create --name agenticlm python=3.12
        
        $conda activate agenticlm
        Salin selepas log masuk
        ia akan membuat senarai fail dari folder data yang terdiri daripada fail PDF kami.

        Dokumen Preprocessing Components

        Kami akan menggunakan preprocessor dokumen terbina dalam Haystack seperti Cleaner, Splitter, dan File Converter, dan kemudian menggunakan seorang penulis untuk menulis data ke dalam kedai.

        Cleaner: Ia akan membersihkan ruang tambahan, garis berulang, garis kosong, dan lain -lain dari dokumen.

        $pip install haystack-ai ollama-haystack pypdf
        
        $pip install chroma-haystack duckduckgo-api-haystack
        Salin selepas log masuk

        Splitter: Ia akan memecah dokumen dalam pelbagai cara seperti kata -kata, ayat, para, halaman.

        $md qagent # create dir
        
        $cd qagent # change to dir
        
        $ code .   # open folder in vscode
        Salin selepas log masuk

        File Converter: Ia akan menggunakan PYPDF untuk menukar PDF ke dokumen.

        $ pip install haystack-ai ollama-haystack
        
        # On you system download Ollama and install LLM
        
        ollama pull llama3.2:3b
        
        ollama pull nomic-embed-text
        
        
        # And then start ollama server
        ollama serve
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        penulis: Ia akan menyimpan dokumen di mana anda ingin menyimpan dokumen dan untuk dokumen pendua, ia akan menimpa dengan sebelumnya.

        from haystack import Document, Pipeline
        from haystack.components.builders.prompt_builder import PromptBuilder
        from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
        from haystack.document_stores.in_memory import InMemoryDocumentStore
        from haystack_integrations.components.generators.ollama import OllamaGenerator
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        sekarang tetapkan embedder untuk pengindeksan dokumen.

        Embedder: Nomic Embed Text

        kami akan menggunakan penyembuhan teks-teks nomik yang sangat berkesan dan bebas inhuggingface dan ollama.

        Sebelum anda menjalankan saluran paip pengindeksan anda buka terminal anda dan taipkan di bawah untuk menarik model-teks-teks dan Llama3.2: 3B dari kedai model Ollama

        document_store = InMemoryDocumentStore()
        documents = [
            Document(
                content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage."
            ),
            Document(
                content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece."
            ),
            Document(
                content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell."
            ),
            Document(
                content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names."
            ),
            Document(
                content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind."
            ),
        ]
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        dan mulakan ollama dengan menaip arahan ollama berkhidmat di terminal anda

        kini komponen embedder

        pipe = Pipeline()
        
        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        pipe.connect("retriever", "prompt_builder.documents")
        pipe.connect("prompt_builder", "llm")
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        kami menggunakan komponen untuk membenamkan dokumen, tetapi jika anda ingin membenamkan rentetan teks maka anda perlu menggunakan ollamatextembedder.

        Membuat Pipeline Pengindeksan

        Seperti contoh Rag Toy sebelumnya, kita akan mulakan dengan memulakan kelas saluran paip.

        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Sekarang kita akan menambah komponen ke saluran paip kita satu demi satu

        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Menambah komponen ke saluran paip tidak peduli dengan perintah jadi, anda boleh menambah komponen dalam apa -apa perintah. Tetapi menghubungkan adalah yang penting.

        Menghubungkan komponen ke graf saluran paip

        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        di sini, pesanan perkara, kerana bagaimana anda menyambungkan komponen memberitahu saluran paip bagaimana data akan mengalir melalui saluran paip. Ia seperti, tidak penting di mana perintah atau dari mana anda membeli barang paip anda tetapi bagaimana untuk meletakkannya bersama -sama akan memutuskan sama ada anda mendapat air anda atau tidak.

        Penukar menukarkan PDF dan menghantarnya untuk membersihkan untuk membersihkan. Kemudian pembersih menghantar dokumen yang dibersihkan ke splitter untuk chunking. Ketulan -ketulan itu kemudiannya akan ditanam untuk vektorisasi, dan yang terakhir tertanam akan menyerahkan embeddings ini kepada penulis untuk penyimpanan.

        faham! Ok, izinkan saya memberi anda graf visual pengindeksan supaya anda dapat memeriksa aliran data.

        Lukis saluran paip pengindeksan

        template = """
        Given only the following information, answer the question.
        Ignore your own knowledge.
        
        Context:
        {% for document in documents %}
            {{ document.content }}
        {% endfor %}
        
        Question: {{ query }}?
        """
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Ya, anda boleh membuat graf duyung yang bagus dari saluran paip haystack dengan mudah. ​​

        Grafik Paip Pengindeksan

        Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack Saya menganggap sekarang anda telah memahami sepenuhnya idea di sebalik saluran paip jerami. Bersyukurlah kepada anda tukang paip.

        Melaksanakan penghala

        Sekarang, kita perlu membuat penghala untuk mengarahkan data melalui jalan yang berbeza. Dalam kes ini, kami akan menggunakan penghala bersyarat yang akan melakukan kerja penghalaan kami pada keadaan tertentu.

        Penghala bersyarat akan menilai syarat berdasarkan output komponen. Ia akan mengarahkan aliran data melalui cawangan saluran paip yang berbeza yang membolehkan membuat keputusan dinamik. Ia juga akan mempunyai strategi sandaran yang mantap.

        $ pip install haystack-ai ollama-haystack
        
        # On you system download Ollama and install LLM
        
        ollama pull llama3.2:3b
        
        ollama pull nomic-embed-text
        
        
        # And then start ollama server
        ollama serve
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Apabila sistem mendapat balasan no_answer dari konteks penyimpanan embedding, maka ia akan pergi ke alat carian web untuk mengumpul data yang relevan dari internet.

        Untuk carian web, kami akan menggunakan API DuckDuckgo atau Tavily, di sini saya telah menggunakan DuckDuckGo.

        from haystack import Document, Pipeline
        from haystack.components.builders.prompt_builder import PromptBuilder
        from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
        from haystack.document_stores.in_memory import InMemoryDocumentStore
        from haystack_integrations.components.generators.ollama import OllamaGenerator
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        OK, kebanyakan pengangkat berat telah dilakukan. Sekarang, masa untuk kejuruteraan segera

        Buat templat prompt

        kami akan menggunakan komponen haystack promptbuilder untuk membina arahan dari templat

        Pertama, kami akan membuat prompt untuk qa

        document_store = InMemoryDocumentStore()
        documents = [
            Document(
                content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage."
            ),
            Document(
                content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece."
            ),
            Document(
                content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell."
            ),
            Document(
                content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names."
            ),
            Document(
                content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind."
            ),
        ]
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Ia akan mengambil konteks dari dokumen dan cuba menjawab soalan. Tetapi jika ia tidak menemui konteks yang relevan dalam dokumen, ia akan membalas no_answer.

        Sekarang, dalam proses kedua selepas mendapat No_answer dari LLM, sistem akan menggunakan alat carian web untuk mengumpulkan konteks dari Internet.

        template prompt duckduckgo

        pipe = Pipeline()
        
        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        pipe.connect("retriever", "prompt_builder.documents")
        pipe.connect("prompt_builder", "llm")
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        ia akan memudahkan sistem untuk pergi ke carian web dan cuba menjawab pertanyaan.

        3

        kami akan menggunakan haystack prompt joiner untuk menyertai cawangan -cawangan yang dipenuhi bersama.

        Melaksanakan saluran paip pertanyaan
        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Pipeline pertanyaan akan membenamkan sumber -sumber kontekstual yang mengumpul pertanyaan dari embeddings dan menjawab pertanyaan kami menggunakan alat carian LLM atau web.

        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        ia sama dengan saluran paip pengindeksan.

        Memulakan saluran paip

        Menambah komponen ke saluran paip pertanyaan

        di sini, untuk generasi LLM kita menggunakan komponen ollamagenerator untuk menjana jawapan menggunakan llama3.2: 3b atau 1b atau apa sahaja yang anda suka dengan alat yang memanggil.
        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        menyambungkan semua komponen bersama untuk aliran pertanyaan dan penjanaan jawapan

        template = """
        Given only the following information, answer the question.
        Ignore your own knowledge.
        
        Context:
        {% for document in documents %}
            {{ document.content }}
        {% endfor %}
        
        Question: {{ query }}?
        """
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Ringkasan sambungan di atas:

        penyembuhan dari text_embedder yang dihantar ke embedding pertanyaan retriever.
        query = "How Goku eliminate people?"
        response = pipe.run({"prompt_builder": {"query": query}, "retriever": {"query": query}})
        print(response["llm"]["replies"])
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Retriever menghantar data ke dokumen prompt_builder.

          pembina prompt pergi ke gabungan segera untuk bergabung dengan arahan lain.
        1. Joiner prompt meluluskan data ke LLM untuk generasi.
        2. Jawapan -balasan LLM pergi ke router untuk memeriksa sama ada jawapannya mempunyai
        3. no_answer
        4. atau tidak.
        5. carian web menghantar data ke carian carian web sebagai pertanyaan.
        6. Dokumen carian web Hantar data ke dokumen carian web.
        7. Prompt carian web menghantar data ke gabungan segera. dan penyokong segera akan menghantar data ke LLM untuk penjanaan jawapan.
        8. mengapa tidak melihat sendiri?
        9. lukis graf paip pertanyaan
        10. Grafik pertanyaan

        Saya tahu ia adalah graf yang besar tetapi ia akan menunjukkan kepada anda apa yang berlaku di bawah perut binatang.

        sekarang sudah tiba masanya untuk menikmati buah kerja keras kami.

        Buat fungsi untuk pertanyaan mudah. ​​

        $ pip install haystack-ai ollama-haystack
        
        # On you system download Ollama and install LLM
        
        ollama pull llama3.2:3b
        
        ollama pull nomic-embed-text
        
        
        # And then start ollama server
        ollama serve
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        ia adalah fungsi mudah yang mudah untuk penjanaan jawapan.

        sekarang jalankan skrip utama anda untuk mengindeks buku fizik ncert

        from haystack import Document, Pipeline
        from haystack.components.builders.prompt_builder import PromptBuilder
        from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
        from haystack.document_stores.in_memory import InMemoryDocumentStore
        from haystack_integrations.components.generators.ollama import OllamaGenerator
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Ini adalah pekerjaan satu kali, selepas pengindeksan anda mesti mengulas pada baris ini jika tidak, ia akan mula mengindeks semula buku.

        dan bahagian bawah fail kami menulis kod pemacu kami untuk pertanyaan

        document_store = InMemoryDocumentStore()
        documents = [
            Document(
                content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage."
            ),
            Document(
                content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece."
            ),
            Document(
                content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell."
            ),
            Document(
                content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names."
            ),
            Document(
                content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind."
            ),
        ]
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        MCQ mengenai Resistivity dari Pengetahuan Buku

        Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack

        soalan lain yang tidak ada dalam buku

        pipe = Pipeline()
        
        pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
        pipe.add_component("prompt_builder", PromptBuilder(template=template))
        pipe.add_component(
            "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434")
        )
        pipe.connect("retriever", "prompt_builder.documents")
        pipe.connect("prompt_builder", "llm")
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        output

        Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack mari kita cuba soalan lain.

        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk
        Salin selepas log masuk

        Jadi, ia berfungsi! Kita boleh menggunakan lebih banyak data, buku, atau PDF untuk membenamkan yang akan menghasilkan lebih banyak jawapan kontekstual. Juga, LLMs seperti GPT-4O, Claude Anthropic, atau LLM awan lain akan melakukan pekerjaan yang lebih baik. Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack

        Kesimpulan

        Sistem Rag Agentik kami menunjukkan fleksibiliti dan keteguhan kerangka haystack dengan kuasa menggabungkan komponen dan saluran paip. RAG ini boleh dibuat siap pengeluaran dengan menggunakan platform perkhidmatan web dan juga menggunakan LLM yang lebih baik seperti OpenAI, dan Nthropic. Anda boleh membina UI menggunakan SPA web berasaskan streamlit atau reaksi untuk pengalaman pengguna yang lebih baik.

        anda boleh mencari semua kod yang digunakan dalam artikel, di sini.

        Takeaways Key

        Sistem Rag Agentik memberikan lebih banyak respons pintar dan fleksibel daripada kain tradisional.

          Senibina saluran paip Haystack membolehkan aliran kerja kompleks, modular.
        • router membolehkan membuat keputusan dinamik dalam penjanaan tindak balas.
        • Grafik Sambungan menyediakan interaksi komponen yang fleksibel dan boleh dipelihara.
        • Integrasi pelbagai sumber pengetahuan meningkatkan kualiti tindak balas.
        • Media yang ditunjukkan dalam artikel ini tidak dimiliki oleh Analytics Vidhya dan digunakan pada budi bicara penulis
        .

        Soalan Lazim

        Q1. Bagaimanakah sistem mengendalikan pertanyaan yang tidak diketahui?

        a. Sistem ini menggunakan komponen routernya untuk secara automatik jatuh ke carian web apabila pengetahuan tempatan tidak mencukupi, memastikan liputan komprehensif. Q2. Apakah kelebihan yang ditawarkan oleh seni bina saluran paip?

        a. Senibina saluran paip membolehkan pembangunan modular, ujian mudah, dan susunan komponen yang fleksibel, menjadikan sistem ini dapat dipelihara dan diperluas. Q3. Bagaimanakah graf sambungan meningkatkan fungsi sistem?

        a. Grafik sambungan membolehkan aliran data kompleks dan pemprosesan selari, meningkatkan kecekapan sistem dan fleksibiliti dalam mengendalikan pelbagai jenis pertanyaan.

        Q4. Bolehkah saya menggunakan API LLM yang lain? a. Ya, sangat mudah hanya memasang pakej integrasi yang diperlukan untuk API LLM masing -masing seperti Gemini, Anthropic, dan Groq, dan menggunakannya dengan kekunci API anda.

Atas ialah kandungan terperinci Cara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan