cari
RumahPeranti teknologiAICara Membina Sistem Rag QA Agentik Menggunakan Rangka Kerja Haystack

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

        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

        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."
            ),
        ]

        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")

        anda boleh memvisualisasikan saluran paip

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

        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")
        )
        

        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)

        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 }}?
        """
        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"])

        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
        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
        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."
            ),
        ]
        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")
        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        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")
        )
        
        image_param = {
            "format": "img",
            "type": "png",
            "theme": "forest",
            "bgColor": "f2f3f4",
        }
        pipe.show(params=image_param)
        template = """
        Given only the following information, answer the question.
        Ignore your own knowledge.
        
        Context:
        {% for document in documents %}
            {{ document.content }}
        {% endfor %}
        
        Question: {{ query }}?
        """
        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"])

        ENTERT_PATH di mana anda ingin menyimpan embedding anda.

        jalur fail pdf

        $conda create --name agenticlm python=3.12
        
        $conda activate agenticlm
        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

        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

        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

        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

        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."
            ),
        ]

        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")

        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)
        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")
        )
        
        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)
        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 }}?
        """
        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

        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
        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."
            ),
        ]
        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")
        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)

        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")
        )
        
        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)

        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 }}?
        """

        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"])

        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

        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

        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."
            ),
        ]

        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")

        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)

        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
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
Ketika penggunaan AI, syarikat beralih dari SEO ke GEOKetika penggunaan AI, syarikat beralih dari SEO ke GEOMay 05, 2025 am 11:09 AM

Dengan letupan aplikasi AI, perusahaan beralih dari pengoptimuman enjin carian tradisional (SEO) kepada pengoptimuman enjin generatif (GEO). Google mengetuai peralihan. Ciri "AI Gambaran Keseluruhan" telah berkhidmat lebih dari satu bilion pengguna, memberikan jawapan penuh sebelum pengguna mengklik pada pautan. [^2] Peserta lain juga meningkat dengan pesat. Chatgpt, Microsoft Copilot dan kebingungan mencipta kategori "enjin jawapan" baru yang sepenuhnya memintas hasil carian tradisional. Sekiranya perniagaan anda tidak muncul dalam jawapan yang dihasilkan oleh AI ini, pelanggan berpotensi tidak dapat menemui anda-walaupun anda berpangkat tinggi dalam hasil carian tradisional. Dari SEO ke GEO - apa sebenarnya maksudnya? Selama beberapa dekad

Pertaruhan besar di mana laluan ini akan mendorong AI hari ini untuk menjadi AGI yang berhargaPertaruhan besar di mana laluan ini akan mendorong AI hari ini untuk menjadi AGI yang berhargaMay 05, 2025 am 11:08 AM

Mari kita meneroka jalan yang berpotensi untuk kecerdasan umum buatan (AGI). Analisis ini adalah sebahagian daripada lajur Forbes saya yang berterusan mengenai kemajuan AI, menyelidiki kerumitan mencapai AGI dan Superintelligence Buatan (ASI). (Lihat Seni Berkaitan

Adakah anda melatih chatbot anda, atau sebaliknya?Adakah anda melatih chatbot anda, atau sebaliknya?May 05, 2025 am 11:07 AM

Interaksi Komputer Manusia: Tarian Adaptasi yang halus Berinteraksi dengan chatbot AI adalah seperti mengambil bahagian dalam tarian pengaruh bersama yang halus. Soalan, respons, dan keutamaan anda secara beransur -ansur membentuk sistem untuk memenuhi keperluan anda dengan lebih baik. Model bahasa moden menyesuaikan diri dengan keutamaan pengguna melalui mekanisme maklum balas yang jelas dan pengiktirafan corak tersirat. Mereka mempelajari gaya komunikasi anda, ingat pilihan anda, dan secara beransur -ansur menyesuaikan respons mereka agar sesuai dengan harapan anda. Namun, ketika kami melatih rakan kongsi digital kami, sesuatu yang sama pentingnya berlaku dalam arah sebaliknya. Interaksi kami dengan sistem ini secara halus membentuk semula corak komunikasi kita sendiri, proses pemikiran, dan juga jangkaan perbualan interpersonal. Interaksi kami dengan sistem AI telah mula membentuk semula jangkaan interaksi interpersonal kami. Kami menyesuaikan diri dengan tindak balas segera,

California Taps AI ke Permit Pemulihan Wildfire CepatCalifornia Taps AI ke Permit Pemulihan Wildfire CepatMay 04, 2025 am 11:10 AM

AI menyelaraskan pemulihan kebakaran hutan yang membenarkan Firma teknologi Australia Archistar's AI Software, menggunakan pembelajaran mesin dan penglihatan komputer, mengautomasikan penilaian rancangan bangunan untuk mematuhi peraturan tempatan. Kepentingan pra-pengesahan ini

Apa yang kita boleh belajar dari kerajaan digital berkuasa AI EstoniaApa yang kita boleh belajar dari kerajaan digital berkuasa AI EstoniaMay 04, 2025 am 11:09 AM

Kerajaan Digital Estonia: Model untuk AS? AS berjuang dengan ketidakcekapan birokrasi, tetapi Estonia menawarkan alternatif yang menarik. Negara kecil ini mempunyai hampir 100% kerajaan yang berpusatkan rakyat yang dikuasai oleh AI. Ini bukan

Perancangan perkahwinan melalui ai generatifPerancangan perkahwinan melalui ai generatifMay 04, 2025 am 11:08 AM

Merancang perkahwinan adalah tugas yang monumental, selalunya menggembirakan walaupun pasangan yang paling teratur. Artikel ini, sebahagian daripada siri Forbes yang berterusan mengenai kesan AI (lihat pautan di sini), meneroka bagaimana AI generatif dapat merevolusikan perancangan perkahwinan. Perkahwinan pl

Apakah ejen AI pertahanan digital?Apakah ejen AI pertahanan digital?May 04, 2025 am 11:07 AM

Perniagaan semakin memanfaatkan ejen AI untuk jualan, sementara kerajaan menggunakannya untuk pelbagai tugas yang ditetapkan. Walau bagaimanapun, penyokong pengguna menyerlahkan keperluan bagi individu untuk memiliki ejen AI mereka sendiri sebagai pertahanan terhadap yang sering disasarkan

Panduan Pemimpin Perniagaan untuk Pengoptimuman Enjin Generatif (GEO)Panduan Pemimpin Perniagaan untuk Pengoptimuman Enjin Generatif (GEO)May 03, 2025 am 11:14 AM

Google mengetuai peralihan ini. Ciri "AI Gambaran Keseluruhan" sudah melayani lebih daripada satu bilion pengguna, memberikan jawapan lengkap sebelum ada yang mengklik pautan. [^2] Pemain lain juga mendapat tanah dengan cepat. Chatgpt, microsoft copilot, dan pe

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.