
LlamaIndex v0.7 ã®ããã¿ãšã«ã¹ã¿ãã€ãº
以äžã®èšäºãé¢çœãã£ãã®ã§ã軜ããŸãšããŸããã
1. ã¯ããã«
ãLlamaIndexãã¯ãã«ã¹ã¿ã ããŒã¿ã䜿çšããŠLLMãå©çšããã¢ããªã±ãŒã·ã§ã³ (Q&Aããã£ãããããããšãŒãžã§ã³ããªã©) ãæ§ç¯ããããã®ããã±ãŒãžã§ãã
ãã®èšäºã§ã¯ã次ã®äºæã玹ä»ããŸãã
ã»LLMãšã«ã¹ã¿ã ããŒã¿ãçµã¿åãããããã®ãRAGã(Retrieval Augmented Generation) ãã©ãã€ã
ã»ç¬èªã®RAGãã€ãã©ã€ã³ãæ§æããããã®LlamaIndexã®äž»ãªæŠå¿µãšã¢ãžã¥ãŒã«
2. RAG (Retrieval Augmented Generation)
ãRAGã(Retrieval Augmented Generation : æ€çŽ¢æ¡åŒµçæ) ã¯ãã«ã¹ã¿ã ããŒã¿ã§LLMãæ¡åŒµããããã®ãã©ãã€ã ã§ãã éåžžãæ¬¡ã®2段éã§æ§æãããŸãã
ã»ã€ã³ããã¯ã¹äœæ : ç¥èããŒã¹ã®æºå
ã»ã¯ãšãª : ç¥èããŒã¹ããé¢é£ããã³ã³ããã¹ããååŸããŠãLLMã®è³ªåå¿çããµããŒã

ãLlamaIndexãã¯ãäž¡æ¹ã®æé ãéåžžã«ç°¡åã«ããããã®éèŠãªããŒã«ããããæäŸããŸãã
3. ã€ã³ããã¯ã¹äœæ
ãLlamaIndexãã¯ããããŒã¿ã³ãã¯ã¿ããšãã€ã³ããã¯ã¹ãã䜿çšããŠç¥èããŒã¹ãæºåããã®ã«åœ¹ç«ã¡ãŸãã

ã»ããŒã¿ã³ãã¯ã¿ : ãããŒã¿ã³ãã¯ã¿ã (ãªãŒããŒ) ã¯ãããŸããŸãªãããŒã¿ãœãŒã¹ããããããã¥ã¡ã³ãã (ããã¹ãããã³ã¡ã¿ããŒã¿) ã«åã蟌ã¿ãŸãã
ã»ããã¥ã¡ã³ã / ããŒã : ãããã¥ã¡ã³ããã¯ãPDFãAPI åºåãããŒã¿ããŒã¹ãªã©ããããããããŒã¿ãœãŒã¹ãã®æ±çšã³ã³ããã§ãããããŒãã㯠ãLlamaIndexãå ã®ããŒã¿ã®åäœã§ããããœãŒã¹ããã¥ã¡ã³ãã®ããã£ã³ã¯ãã衚ããŸããããã¯ãã¡ã¿ããŒã¿ãšä»ã®ããŒããšã®é¢ä¿ãå«ãè±å¯ãªè¡šçŸã§ãããæ£ç¢ºãã€è¡šçŸåè±ããªæ€çŽ¢æäœãå¯èœã«ããŸãã
ã»ããŒã¿ã€ã³ããã¯ã¹ : ããŒã¿ãåã蟌ãã ãããLlamaIndexãã䜿çšããŠãããŒã¿ãç°¡åã«ååŸã§ãã圢åŒã«ã€ã³ããã¯ã¹ä»ãã§ããŸãã å éšã§ã¯ããLlamaIndexãã¯çã®ããã¥ã¡ã³ããè§£æããŠäžé衚çŸã«ãããã¯ãã«ã®åã蟌ã¿ãèšç®ããã¡ã¿ããŒã¿ãæšè«ããŸããæãäžè¬çã«äœ¿çšãããã€ã³ããã¯ã¹ã¯ãVectorStoreIndexãã§ãã
4. ã¯ãšãª
ãã¯ãšãªãã§ã¯ãRAGãã€ãã©ã€ã³ã¯ãŠãŒã¶ãŒã¯ãšãªããæãé¢é£æ§ã®é«ãã³ã³ããã¹ããååŸãããããã¯ãšãªãšãšãã«LLM ã«æž¡ããŠå¿çãäœæããŸãã ããã«ãããå ã®åŠç¿ããŒã¿ã«ã¯ãªãææ°ã®ç¥èãLLMã«äžããããŸã (ãã«ã·ããŒã·ã§ã³ã軜æžãããŸã)ããã¯ãšãªãã®äž»ãªèª²é¡ã¯ãç¥èããŒã¹ã®æ€çŽ¢ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ (LLMãç°ãªãèŠçŽ ãçµã¿åãããŠå調åäœããããã»ã¹)ãæšè«ã§ãã
ãLlamaIndexãã¯ãQ&A (ã¯ãšãªãšã³ãžã³)ããã£ããããã (ãã£ãããšã³ãžã³)ããŸãã¯ãšãŒãžã§ã³ãã®äžéšãšããŠRAGãã€ãã©ã€ã³ãæ§ç¯ããã³çµ±åããã®ã«åœ¹ç«ã€æ§æå¯èœãªã¢ãžã¥ãŒã«ãæäŸããŸãããããã®æ§æèŠçŽ ã¯ãã©ã³ãã³ã°èšå®ãåæ ããããã«ã«ã¹ã¿ãã€ãºããããæ§é åãããæ¹æ³ã§è€æ°ã®ç¥èããŒã¹ãæšè«ããããã«æ§æãããã§ããŸãã

4-1. ãã«ãã£ã³ã°ãããã¯
ã»ãªããªã㌠: ããªããªããŒãã¯ãã¯ãšãªãäžããããæã«ç¥èããŒã¹ (ã€ã³ããã¯ã¹) ããé¢é£ããã³ã³ããã¹ããå¹ççã«ååŸããæ¹æ³ãå®çŸ©ããŸãã å ·äœçãªæ€çŽ¢ããžãã¯ã¯ã€ã³ããã¯ã¹ããšã«ç°ãªããæãäžè¬çãªã®ã¯ãã¯ãã«ã€ã³ããã¯ã¹ã«å¯Ÿããé«å¯åºŠæ€çŽ¢ã§ãã
ã»ããŒããã¹ãããã»ããµ : ãããŒããã¹ãããã»ããµãã¯ããŒãã®ã»ãããåã蟌ã¿ããããã«å€æããã£ã«ã¿ãªã³ã°ãåã©ã³ã¯ä»ãããžãã¯ãé©çšããŸãã
ã»ã¬ã¹ãã³ã¹ã·ã³ã»ãµã€ã¶ãŒ : ãã¬ã¹ãã³ã¹ã·ã³ã»ãµã€ã¶ãŒãã¯ããŠãŒã¶ãŒ ã¯ãšãªãšååŸãããããã¹ããã£ã³ã¯ã®æå®ãããã»ããã䜿çšããŠãLLM ããã®ã¬ã¹ãã³ã¹ãçæããŸãã
4-2. ãã€ãã©ã€ã³
ã»ã¯ãšãªãšã³ãžã³ : ãã¯ãšãªãšã³ãžã³ãã¯ãããŒã¿ã«å¯ŸããŠè³ªåã§ããããã«ãããšã³ãããŒãšã³ãã®ãã€ãã©ã€ã³ã§ããèªç¶èšèªã¯ãšãªãåãåããååŸããŠLLMã«æž¡ããåç §ã³ã³ããã¹ããšãšãã«ã¬ã¹ãã³ã¹ãè¿ããŸãã
ã»ãã£ãããšã³ãžã³ : ããã£ãããšã³ãžã³ãã¯ãããŒã¿ãšäŒè©±ããããã®ãšã³ãããŒãšã³ãã®ãã€ãã©ã€ã³ã§ããåäžã®è³ªåãšåçã§ã¯ãªããè€æ°ã®ããåãã«ãªããŸãã
ã»ãšãŒãžã§ã³ã : ããšãŒãžã§ã³ããã¯ãäžé£ã®ããŒã«ãä»ããŠäžçãšå¯Ÿè©±ãããèªååãããæææ±ºå®è ã§ãã ãšãŒãžã§ã³ãã¯ãã¯ãšãªãšã³ãžã³ããã£ãã ãšã³ãžã³ãšåãæ¹æ³ã§äœ¿çšã§ããŸãã äž»ãªéãã¯ããšãŒãžã§ã³ããäºåã«æ±ºå®ãããããžãã¯ã«åŸãã®ã§ã¯ãªããæé©ãªè¡åã®ã·ãŒã±ã³ã¹ãåçã«æ±ºå®ããããšã§ãã ããã«ãããããè€éãªã¿ã¹ã¯ã«åãçµãããã®ãããªãæè»æ§ãåŸãããŸãã
5. ã«ã¹ã¿ãã€ãºãã¥ãŒããªã¢ã«
ãstarter exampleããããŒã¹ã«ã«ã¹ã¿ãã€ãºæ¹æ³ã玹ä»ããŸãã
from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)5-1. ããã¥ã¡ã³ããå°ããªãã£ã³ã¯ã«åå²ããŠè§£æããã
ãServiceContextãã®Â chunk_size ã§ãã£ã³ã¯ãµã€ãºãæå®ã§ããŸãã
from llama_index import ServiceContext
service_context = ServiceContext.from_defaults(chunk_size=1000)from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(
documents,
service_context=service_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)5-2. å¥ã®ãã¯ãã«ã¹ãã¢ã䜿çšããã
ãStorageContextãã®Â vector_store ã§ãã¯ãã«ã¹ãã¢ãæå®ã§ããŸãã
import chromadb
from llama_index.vector_stores import ChromaVectorStore
from llama_index import StorageContext
chroma_client = chromadb.Client()
chroma_collection = chroma_client.create_collection("quickstart")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)5-3. ã¯ãšãªæã«ããå€ãã®ã³ã³ããã¹ããååŸããã
index.as_query_engine() ã® similarity_top_k ã§ãååŸããã³ã³ããã¹ãã®åæ° (ããã©ã«ãã¯2) ãæå®ã§ããŸãã
from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("What did the author do growing up?")
print(response)5-4. å¥ã®LLMã䜿çšããã
ãServiceContextãã® llm ã§LLMãæå®ã§ããŸãã
from llama_index import ServiceContext
from llama_index.llms import PaLM
service_context = ServiceContext.from_defaults(llm=PaLM())from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(service_context=service_context)
response = query_engine.query("What did the author do growing up?")
print(response)5-5. å¥ã®ã¬ã¹ãã³ã¹ã¢ãŒãã䜿çšããã
index.as_query_engine() ã® response_mode ã§ã¬ã¹ãã³ã¹ã¢ãŒããæå®ã§ããŸãã
from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(response_mode='tree_summarize')
response = query_engine.query("What did the author do growing up?")
print(response)response_mode ã¯ã次ã®ãšããã
ã»default : ååŸããååçãé çªã«èª¿ã¹ãŠåçããcreate & refineããããŒãæ¯ã«å¥ã ã®LLMã³ãŒã«ãè¡ãããã詳现ãªçãã«é©ããŠããã
ã»compact : LLMåŒã³åºãã®ãã³ã«ãããã³ããã®æå€§ãµã€ãºã«åãŸãã ãã®ããŒãã®ããã¹ããã£ã³ã¯ãè©°ã蟌ãã§ãããã³ããããcompactãã«ããã1ã€ã®ããã³ããã«è©°ã蟌ãã«ã¯ãã£ã³ã¯ãå€ãããå Žåã¯ãè€æ°ã®ããã³ãããéããŠçãããcreate & refineãã
ã»tree_summarize : ããŒããªããžã§ã¯ãã®ã»ãããšã¯ãšãªãäžããããå Žåãååž°çã«ããªãŒãæ§ç¯ããã«ãŒãããŒããã¬ã¹ãã³ã¹ãšããŠè¿ããèŠçŽã«é©ããŠããã
ã»no_text : LLMã«éä¿¡ãããã§ãããããŒãããã§ããããããã«retrieverã®ã¿ãå®è¡ããã®åŸãresponse.source_nodesããã§ãã¯ããããšã§æ€æ»ã§ããã
ã»accumulate : ãªãŒããªããžã§ã¯ãã®ã»ãããšã¯ãšãªãäžããããå ŽåãåããŒãããã¹ãã»ãã£ã³ã¯ã«ã¯ãšãªãé©çšããã¬ã¹ãã³ã¹ãé åã«èç©ããããã¹ãŠã®ã¬ã¹ãã³ã¹ãé£çµããæååãè¿ããåããã¹ãã»ãã£ã³ã¯ã«å¯ŸããŠåãã¯ãšãªãåå¥ã«å®è¡ããå¿ èŠãããå Žåã«é©ããŠããã
5-6. ã¬ã¹ãã³ã¹ãã¹ããªãŒãã³ã°ããŠè¿ããã
index.as_query_engine() ã® streaming ã§ã¬ã¹ãã³ã¹ãã¹ããªãŒãã³ã°ã§è¿ãããšãã§ããŸãã
from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(streaming=True)
response = query_engine.query("What did the author do growing up?")
response.print_response_stream()5-7. Q&A ã§ã¯ãªããã£ãããããã䜿ããã
index.as_chat_engine() ã§ãã£ããããããšããŠå©çšã§ããŸãã
from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_chat_engine()
response = query_engine.chat("What did the author do growing up?")
print(response)
response = query_engine.chat("Oh interesting, tell me more.")
print(response)