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.
Sebelum kita meneruskan, mari kita ringkaskan ringkasan penting daripada Bahagian 1:
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.
LlamaIndex menawarkan pelbagai jenis indeks, setiap satu disesuaikan dengan kes penggunaan yang berbeza. Mari terokai empat jenis utama:
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)
Kebaikan:
Keburukan:
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)
Jenis indeks ini cemerlang dalam carian semantik dan kebolehskalaan, menjadikannya sesuai untuk set data yang besar.
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)
Indeks pokok amat berkesan untuk data dengan hierarki semula jadi, seperti struktur organisasi atau taksonomi.
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)
Jenis indeks ini sesuai untuk senario yang memerlukan carian pantas berdasarkan kata kunci tertentu.
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])
Percubaan dengan strategi penggumpalan yang berbeza untuk mencari keseimbangan optimum antara pemeliharaan konteks dan prestasi pertanyaan.
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)
Percubaan dengan model Ollama yang berbeza dan laraskan parameter untuk mengoptimumkan kualiti pembenaman untuk kes penggunaan khusus anda.
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)
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)
Dalam bahagian kedua siri LlamaIndex dan Ollama kami, kami meneroka teknik pengindeksan lanjutan, termasuk:
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!