Rumah pembangunan bahagian belakang Tutorial Python Teknik Pengindeksan Lanjutan dengan LlamaIndex dan Ollama: Bahagian 2

Teknik Pengindeksan Lanjutan dengan LlamaIndex dan Ollama: Bahagian 2

Aug 14, 2024 pm 10:34 PM

Advanced Indexing Techniques with LlamaIndex and Ollama: Part 2

Teknik Pengindeksan Lanjutan dengan LlamaIndex dan Ollama: Bahagian 2

Kod boleh didapati di sini: GitHub - jamesbmour/blog_tutorials:

Selamat datang kembali ke penyelaman mendalam kami ke dalam LlamaIndex dan Ollama! Dalam Bahagian 1, kami membincangkan perkara penting untuk menyediakan dan menggunakan alatan berkuasa ini untuk mendapatkan maklumat yang cekap. Kini, tiba masanya untuk meneroka teknik pengindeksan lanjutan yang akan meningkatkan keupayaan pemprosesan dan pertanyaan dokumen anda ke peringkat seterusnya.

1. Pengenalan

Sebelum kita meneruskan, mari kita ringkaskan ringkasan penting daripada Bahagian 1:

  • Menyediakan LlamaIndex dan Ollama
  • Mencipta indeks asas
  • Melakukan pertanyaan mudah

Dalam bahagian ini, kita akan menyelami jenis indeks yang berbeza, mempelajari cara menyesuaikan tetapan indeks, mengurus berbilang dokumen dan meneroka teknik pertanyaan lanjutan. Pada akhirnya, anda akan mempunyai pemahaman yang mantap tentang cara memanfaatkan LlamaIndex dan Ollama untuk tugas mendapatkan maklumat yang kompleks.

Jika anda belum menyediakan persekitaran anda lagi, pastikan anda merujuk kembali Bahagian 1 untuk mendapatkan arahan terperinci tentang memasang dan mengkonfigurasi LlamaIndex dan Ollama.

2. Meneroka Jenis Indeks Berbeza

LlamaIndex menawarkan pelbagai jenis indeks, setiap satu disesuaikan dengan kes penggunaan yang berbeza. Mari terokai empat jenis utama:

2.1 Senarai Indeks

Indeks Senarai ialah bentuk pengindeksan yang paling mudah dalam LlamaIndex. Ia merupakan senarai tersusun bagi potongan teks, sesuai untuk kes penggunaan yang mudah.

from llama_index.core import ListIndex, SimpleDirectoryReader, VectorStoreIndex
from dotenv import load_dotenv
from llama_index.llms.ollama import  Ollama
from llama_index.core import Settings
from IPython.display import Markdown, display
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext
from llama_index.embeddings.ollama import OllamaEmbedding
import chromadb
from IPython.display import HTML
# make markdown display text color green for all cells
# Apply green color to all Markdown output
def display_green_markdown(text):
    green_style = """
    <style>
    .green-output {
        color: green;
    }
    </style>
    """
    green_markdown = f'<div class="green-output">{text}</div>'
    display(HTML(green_style + green_markdown))


# set the llm to ollama
Settings.llm = Ollama(model='phi3', base_url='http://localhost:11434',temperature=0.1)

load_dotenv()

documents = SimpleDirectoryReader('data').load_data()
index = ListIndex.from_documents(documents)

query_engine = index.as_query_engine()
response = query_engine.query("What is llama index used for?")

display_green_markdown(response)
Salin selepas log masuk

Kebaikan:

  • Mudah dan pantas dibuat
  • Paling sesuai untuk set dokumen kecil

Keburukan:

  • Kurang cekap dengan set data yang besar
  • Pemahaman semantik terhad

2.2 Indeks Kedai Vektor

Indeks Kedai Vektor memanfaatkan pembenaman untuk mencipta perwakilan semantik dokumen anda, membolehkan carian yang lebih canggih.

# Create Chroma client
chroma_client = chromadb.EphemeralClient()

# Define collection name
collection_name = "quickstart"

# Check if the collection already exists
existing_collections = chroma_client.list_collections()

if collection_name in [collection.name for collection in existing_collections]:
    chroma_collection = chroma_client.get_collection(collection_name)
    print(f"Using existing collection '{collection_name}'.")
else:
    chroma_collection = chroma_client.create_collection(collection_name)
    print(f"Created new collection '{collection_name}'.")

# Set up embedding model
embed_model = OllamaEmbedding(
    model_name="snowflake-arctic-embed",
    base_url="http://localhost:11434",
    ollama_additional_kwargs={"prostatic": 0},
)

# Load documents
documents = SimpleDirectoryReader("./data/paul_graham/").load_data()

# Set up ChromaVectorStore and load in data
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context, embed_model=embed_model
)

# Create query engine and perform query
query_engine = index.as_query_engine()
response = query_engine.query("What is llama index best suited for?")
display_green_markdown(response)

Salin selepas log masuk

Jenis indeks ini cemerlang dalam carian semantik dan kebolehskalaan, menjadikannya sesuai untuk set data yang besar.

2.3 Indeks Pokok

Indeks Pokok menyusun maklumat secara hierarki, yang bermanfaat untuk data berstruktur.

from llama_index.core import TreeIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader('data').load_data()
tree_index = TreeIndex.from_documents(documents)
query_engine = tree_index.as_query_engine()
response = query_engine.query("Explain the tree index structure.")
display_green_markdown(response)
Salin selepas log masuk

Indeks pokok amat berkesan untuk data dengan hierarki semula jadi, seperti struktur organisasi atau taksonomi.

2.4 Indeks Jadual Kata Kunci

Indeks Jadual Kata Kunci dioptimumkan untuk mendapatkan semula berasaskan kata kunci yang cekap.

from llama_index.core import KeywordTableIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader('data/paul_graham').load_data()
keyword_index = KeywordTableIndex.from_documents(documents)
query_engine = keyword_index.as_query_engine()
response = query_engine.query("What is the keyword table index in llama index?")
display_green_markdown(response)
Salin selepas log masuk

Jenis indeks ini sesuai untuk senario yang memerlukan carian pantas berdasarkan kata kunci tertentu.

3. Menyesuaikan Tetapan Indeks

3.1 Strategi Chunking

Pecahan teks yang berkesan adalah penting untuk prestasi indeks. LlamaIndex menyediakan pelbagai kaedah chunking:

from llama_index.core.node_parser import SimpleNodeParser

parser = SimpleNodeParser.from_defaults(chunk_size=1024)

documents = SimpleDirectoryReader('data').load_data()
nodes = parser.get_nodes_from_documents(documents)
print(nodes[0])
Salin selepas log masuk

Percubaan dengan strategi penggumpalan yang berbeza untuk mencari keseimbangan optimum antara pemeliharaan konteks dan prestasi pertanyaan.

3.2 Membenamkan Model

LlamaIndex menyokong pelbagai model benam. Begini cara anda boleh menggunakan Ollama untuk benam:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.ollama import OllamaEmbedding

embed_model = OllamaEmbedding(
    model_name="snowflake-arctic-embed",
    base_url="http://localhost:11434",
    ollama_additional_kwargs={"mirostat": 0},
)
index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)
query_engine = index.as_query_engine()
response = query_engine.query("What is an embedding model used for in LlamaIndex?")
display_green_markdown(response)
Salin selepas log masuk

Percubaan dengan model Ollama yang berbeza dan laraskan parameter untuk mengoptimumkan kualiti pembenaman untuk kes penggunaan khusus anda.

4. Mengendalikan Berbilang Dokumen

4.1 Mencipta Indeks Berbilang Dokumen

LlamaIndex memudahkan proses mencipta indeks daripada pelbagai dokumen pelbagai jenis:

txt_docs = SimpleDirectoryReader('data/paul_graham').load_data()
web_docs = SimpleDirectoryReader('web_pages').load_data()
data = txt_docs  + web_docs
all_docs = txt_docs  + web_docs
index = VectorStoreIndex.from_documents(all_docs)

query_engine = index.as_query_engine()
response = query_engine.query("How do you create a multi-document index in LlamaIndex?")
display_green_markdown(response)
Salin selepas log masuk

4.2 Pertanyaan Merentas Dokumen

Untuk membuat pertanyaan dengan berkesan merentas berbilang dokumen, anda boleh melaksanakan pemarkahan perkaitan dan mengurus sempadan konteks:

from llama_index.core import QueryBundle
from llama_index.core.query_engine import RetrieverQueryEngine

retriever = index.as_retriever(similarity_top_k=5)
query_engine = RetrieverQueryEngine.from_args(retriever, response_mode="compact")
query = QueryBundle("How do you query across multiple documents?")
response = query_engine.query(query)
display_green_markdown(response)
Salin selepas log masuk

5. Kesimpulan dan Langkah Seterusnya

Dalam bahagian kedua siri LlamaIndex dan Ollama kami, kami meneroka teknik pengindeksan lanjutan, termasuk:

  • Jenis indeks yang berbeza dan kes penggunaannya
  • Menyesuaikan tetapan indeks untuk prestasi optimum
  • Mengendalikan berbilang dokumen dan pertanyaan silang dokumen

Jika anda ingin menyokong saya atau membelikan saya bir, sila sertai Patreon jamesbmour saya

Atas ialah kandungan terperinci Teknik Pengindeksan Lanjutan dengan LlamaIndex dan Ollama: Bahagian 2. 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

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

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Apr 02, 2025 am 07:15 AM

Cara mengelakkan dikesan semasa menggunakan fiddlerevery di mana untuk bacaan lelaki-dalam-pertengahan apabila anda menggunakan fiddlerevery di mana ...

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Apr 01, 2025 pm 11:15 PM

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Apr 01, 2025 pm 10:51 PM

Bagaimanakah Uvicorn terus mendengar permintaan HTTP? Uvicorn adalah pelayan web ringan berdasarkan ASGI. Salah satu fungsi terasnya ialah mendengar permintaan HTTP dan teruskan ...

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Apr 02, 2025 am 07:18 AM

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

Bagaimana untuk mendapatkan data berita yang melangkaui mekanisme anti-crawler Investing.com? Bagaimana untuk mendapatkan data berita yang melangkaui mekanisme anti-crawler Investing.com? Apr 02, 2025 am 07:03 AM

Memahami Strategi Anti-Crawling of Investing.com Ramai orang sering cuba merangkak data berita dari Investing.com (https://cn.investing.com/news/latest-news) ...

See all articles