ã2026幎çãRAGã®å§ãæ¹ â LLMã«èªç€ŸããŒã¿ã掻çšãããå®å šã¬ã€ã
- RAGïŒæ€çŽ¢æ¡åŒµçæïŒã®ä»çµã¿ãšãŠãŒã¹ã±ãŒã¹
- ãã¯ãã«ããŒã¿ããŒã¹ã®åºæ¬æŠå¿µ
- LangChainãLlamaIndexã§ã®åºæ¬å®è£
- ããã³ãããšã³ãžãã¢ãªã³ã°ã®åºç€
RAGã®åºæ¬ã¢ãŒããã¯ãã£
[ããã¥ã¡ã³ã] â [ãã£ã³ã¯åå²] â [åã蟌ã¿çæ] â [ãã¯ãã«DBä¿å]
â
[ãŠãŒã¶ãŒè³ªå] â [質åã®åã蟌ã¿] â [é¡äŒŒæ€çŽ¢] â [é¢é£ãã£ã³ã¯ååŸ]
â
[LLMãžã®å
¥åïŒè³ªå + é¢é£ãã£ã³ã¯] â [åççæ]
ã»ããã¢ããæé
pip install langchain langchain-openai langchain-community chromadb openai
ã¯ãããŠã®RAGå®è£ ïŒLangChain + ChromaDBïŒ
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
# ããã¥ã¡ã³ãã®èªã¿èŸŒã¿ãšãã£ã³ã¯åå²
loader = TextLoader("document.txt", encoding="utf-8")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# ãã¯ãã«DBã«ä¿å
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)
# RAGãã§ãŒã³ã®æ§ç¯
llm = ChatOpenAI(model="gpt-4o-mini")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
)
# 質åãšåç
result = qa_chain.invoke({"query": "ããã¥ã¡ã³ãã®äž»èŠãªãã€ã³ãã¯äœã§ããïŒ"})
print(result["result"])
ããããè©°ãŸããã€ã³ã
Q: åçã®ç²ŸåºŠãäœã
â ãã£ã³ã¯ãµã€ãºãšãªãŒããŒã©ããã調æŽããŠã¿ãŸãããã500æåã»50æåãªãŒããŒã©ãããäžè¬çãªåºçºç¹ã§ããæ€çŽ¢ä»¶æ°ïŒkã®å€ïŒãå¢ããããšãæå¹ã§ãããã³ã³ããã¹ãé·ã®äžéã«æ³šæãå¿
èŠã§ãã
Q: ç¡é¢ä¿ãªæ å ±ãæ··å ¥ããïŒãã«ã·ããŒã·ã§ã³ïŒ â ããã³ããã«ãæäŸãããã³ã³ããã¹ãã«åºã¥ããŠã®ã¿åçããã³ã³ããã¹ãã«æ å ±ããªãå Žåã¯ãããããŸããããšçããŠãã ããããšæèšããŸãããã
Q: APIã³ã¹ããé«ããªã
â gpt-4o-mini ãªã©ã®è»œéã¢ãã«ã䜿ãããããŒã«ã«LLMïŒOllamaçïŒãæ€èšããŠãã ãããåã蟌ã¿çæã«ã¯æ¯èŒçå®äŸ¡ãª text-embedding-3-small ã䜿ããŸãã
æè¿ãRAGãã£ãŠããèããã ãã©ãã©ãããä»çµã¿ãªã®ïŒ
RAGã¯ãRetrieval-Augmented GenerationïŒæ€çŽ¢æ¡åŒµçæïŒãã®ç¥ã§ãLLMãåçãããšãã«å€éšã®ããŒã¿ãæ€çŽ¢ããŠåç §ããä»çµã¿ã ããããšãã°ChatGPTã¯åŠç¿ããŒã¿ã«ãªã瀟å ããã¥ã¢ã«ã®å 容ã¯çããããªããããRAGã䜿ãã°ã質åã«é¢é£ãã瀟å ããã¥ã¡ã³ããèªåã§æ¢ããŠããŠããããå ã«LLMãåçãçæããŠããããã ã
ãªãã»ã©ïŒã§ãæ®éã®æ€çŽ¢ãšã¯äœãéãã®ïŒ
æ®éã®ããŒã¯ãŒãæ€çŽ¢ã¯å®å šäžèŽãéšåäžèŽã§æ¢ããã©ãRAGã§ã¯ããã¯ãã«åã蟌ã¿ïŒEmbeddingïŒããšããæè¡ã䜿ããã ãæç« ãæ°çŸæ¬¡å ã®ãã¯ãã«ïŒæ°å€ã®é åïŒã«å€æããŠãæå³ãè¿ãæç« ãèŠã€ãåºãããã ãããæçµŠã®ç³è«æ¹æ³ããšãäŒæã®åãæ¹ãã¿ããã«ãèšèãéã£ãŠãæå³ãè¿ããã°ããããããã ã
ããã§ç°¡åãªRAGãäœéšããŠã¿ãŠãããpip install langchain chromadb sentence-transformersãã§ã€ã³ã¹ããŒã«ããŠãChromaDBã«çãããã¹ããç»é²âé¡äŒŒæ€çŽ¢ããŠã¿ãã ãã§ãã¯ãã«æ€çŽ¢ã®æèŠãã€ãããããOpenAI APIããŒããªãå Žåã¯ãsentence-transformersã®ããŒã«ã«åã蟌ã¿ã¢ãã«ã§ã詊ãããïŒ
ãã¯ãã«ã£ãŠããšã¯ããããä¿åããããŒã¿ããŒã¹ãç¹å¥ãªãã®ãå¿ èŠãªã®ããªïŒ
ãã®ãšããïŒããã¯ãã«DBããšåŒã°ããå°çšã®ããŒã¿ããŒã¹ã䜿ããã代衚çãªãã®ã ãšãã¯ã©ãŠãåã®ãPineconeããããŒã«ã«ã§æè»œã«äœ¿ãããChromaããæ¢åã®PostgreSQLã«æ¡åŒµãå ¥ãããpgvectorããªã©ããããã2026幎çŸåšã ãšããŸã詊ããªãChromaãäžçªããŒãã«ãäœãããªãæ¬çªéçšãèŠæ®ãããªãPineconeãpgvectorãããããã ãã
ããã¥ã¡ã³ãããã®ãŸãŸãã¯ãã«ã«ããã®ïŒé·ãææžã ãšå€§å€ããã ãïŒ
ãã質åã ãïŒé·ãææžã¯ãã®ãŸãŸã ãšããŸãæ€çŽ¢ã§ããªããããããã£ã³ã¯åå²ããšãã£ãŠé©åãªé·ãã«åºåããã ãã ããã200ã500ããŒã¯ã³ããããç®å®ã§ã段èœãèŠåºãåäœã§åãã®ãã³ãã ãããã£ã³ã¯ã倧ãããããšæ€çŽ¢ç²ŸåºŠãèœã¡ãããå°ãããããšæèã倱ãããããã®ãã©ã³ã¹ãRAGã®ç²ŸåºŠã倧ããå·Šå³ãããã€ã³ããªãã ã
å®éã«æ§ç¯ãããšãã¯ã©ããã£ãŠäœãã®ïŒã³ãŒããå šéšèªåã§æžãã®ããªïŒ
LangChainãLlamaIndexãšãã£ããã¬ãŒã ã¯ãŒã¯ã䜿ãã°ãããªãç°¡åã«æ§ç¯ã§ããããLangChainã¯æ±çšçãªLLMã¢ããªéçºãã¬ãŒã ã¯ãŒã¯ã§ãRAG以å€ã«ããšãŒãžã§ã³ãããã§ãŒã³ãçµãããLlamaIndexã¯RAGã«ç¹åããŠããŠãããã¥ã¡ã³ãã®èªã¿èŸŒã¿ãããã£ã³ã¯åå²ããã¯ãã«åãæ€çŽ¢ãŸã§æ°è¡ã§æžãããã ãåããŠãªãLlamaIndexã®æ¹ãã·ã³ãã«ã§ããããã ãã
RAGã䜿ãã°LLMã®ãã«ã·ããŒã·ã§ã³ïŒåã®åçïŒã¯ãªããªãã®ïŒ
æ®å¿µãªããå®å šã«ã¯ãªããªããªããã ããã ããå€§å¹ ã«æžããããšã¯ã§ããããã³ãã¯3ã€ãã£ãŠããŸãæ€çŽ¢çµæã®é¢é£åºŠã¹ã³ã¢ãäœãå Žåã¯ãæ å ±ãèŠã€ãããŸããããšè¿ãããã«ããããšã次ã«ãããã³ããã§ãæäŸãããæ å ±ã®ã¿ãå ã«åçããŠããšæç€ºããããšãæåŸã«ãåçã«åŒçšå ã®ãã£ã³ã¯ãæç€ºãããããšããã®3ã€ãçµã¿åããããšãä¿¡é Œæ§ãããªãäžãããã
æ§ç¯ããåŸãã¡ãããšåããŠããã©ããã¯ã©ããã£ãŠç¢ºèªããã®ïŒ
RAGã®è©äŸ¡ã«ã¯ãRAGASããšãããã¬ãŒã ã¯ãŒã¯ã䟿å©ã ããFaithfulnessïŒåçãæ€çŽ¢çµæã«å¿ å®ãïŒãAnswer RelevancyïŒè³ªåã«å¯ŸããŠç確ãïŒãContext PrecisionïŒæ£ããæèãååŸã§ããŠãããïŒãšãã£ãææšã§èªåè©äŸ¡ããŠããããã ãããšã¯å®éã®ãŠãŒã¶ãŒã®è³ªåãšæåŸ ããåçã®ãã¢ãçšæããŠã宿çã«ãã¹ãããã®ã倧äºã ãã
ãŸãšãããšããŸãäœããå§ããã°ããã®ããªïŒ
ããããã®ã¹ãããã¯ããã ãããŸãPythonãšLlamaIndexãã€ã³ã¹ããŒã«ããŠãæå ã®PDFãããã¹ããèªã¿èŸŒãŸããããã¯ãã«DBã¯ãŸãChromaã§ååãLLMã¯OpenAI APIãæè»œã ãã©ãã³ã¹ã管çã«ã¯æ°ãã€ããŠããå°ããå§ããŠããã£ãã¡ãããšèªç€ŸããŒã¿ããçããŠãããïŒããšããäœéšãåŸããããã£ã³ã¯æŠç¥ã®æé©åãpgvectorãžã®ç§»è¡ãRAGASã§ã®è©äŸ¡ã段éçã«é²ããã®ããã¹ãã ãã2026幎ã¯RAGã®ããŒã«ãã§ãŒã³ãããªãæçããŠãããããå§ããã«ã¯çµ¶å¥œã®ã¿ã€ãã³ã°ã ãã