import%20marimo%0A%0A__generated_with%20%3D%20%220.20.4%22%0Aapp%20%3D%20marimo.App()%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20os%0A%20%20%20%20import%20uuid%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20torch%0A%20%20%20%20from%20fast_plaid.search%20import%20FastPlaid%0A%20%20%20%20from%20langchain_chroma%20import%20Chroma%0A%20%20%20%20from%20langchain_community.document_loaders%20import%20WebBaseLoader%0A%20%20%20%20from%20langchain_core.documents%20import%20Document%0A%20%20%20%20from%20langchain_core.output_parsers%20import%20StrOutputParser%0A%20%20%20%20from%20langchain_core.prompts%20import%20ChatPromptTemplate%0A%20%20%20%20from%20langchain_core.retrievers%20import%20BaseRetriever%0A%20%20%20%20from%20langchain_core.runnables%20import%20RunnablePassthrough%0A%20%20%20%20from%20langchain_openai%20import%20ChatOpenAI%2C%20OpenAIEmbeddings%0A%20%20%20%20from%20langchain_text_splitters%20import%20RecursiveCharacterTextSplitter%0A%20%20%20%20from%20pydantic%20import%20ConfigDict%0A%20%20%20%20from%20sentence_transformers%20import%20MultiVectorEncoder%0A%0A%20%20%20%20OPENROUTER_BASE_URL%20%3D%20%22https%3A%2F%2Fopenrouter.ai%2Fapi%2Fv1%22%0A%20%20%20%20COLBERT_INDEX_DIR%20%3D%20%22.colbert-index%22%0A%20%20%20%20DEFAULT_CHAT_MODEL%20%3D%20os.environ.get(%22MODEL%22%2C%20%22openai%2Fgpt-5-nano%22)%0A%20%20%20%20DEFAULT_EMBEDDING_MODEL%20%3D%20os.environ.get(%0A%20%20%20%20%20%20%20%20%22EMBEDDING_MODEL%22%2C%20%22openai%2Ftext-embedding-3-small%22%0A%20%20%20%20)%0A%20%20%20%20DEFAULT_CHAT_TIKTOKEN_MODEL%20%3D%20os.environ.get(%22TIKTOKEN_CHAT_MODEL%22%2C%20%22gpt-4o-mini%22)%0A%20%20%20%20DEFAULT_EMBEDDING_TIKTOKEN_MODEL%20%3D%20os.environ.get(%0A%20%20%20%20%20%20%20%20%22TIKTOKEN_EMBEDDING_MODEL%22%2C%20%22text-embedding-3-small%22%0A%20%20%20%20)%0A%0A%20%20%20%20def%20colbert_device()%3A%0A%20%20%20%20%20%20%20%20return%20%22cuda%22%20if%20torch.cuda.is_available()%20else%20%22cpu%22%0A%0A%20%20%20%20def%20format_colbert_docs(docs)%3A%0A%20%20%20%20%20%20%20%20return%20%22%5Cn%5Cn%22.join(doc.page_content%20for%20doc%20in%20docs)%0A%0A%20%20%20%20def%20load_rag_prompt()%3A%0A%20%20%20%20%20%20%20%20%22%22%22Local%20copy%20of%20the%20LangChain%20Hub%20prompt%20%60rlm%2Frag-prompt%60.%0A%0A%20%20%20%20%20%20%20%20The%20original%20notebooks%20pulled%20this%20at%20runtime%20with%0A%20%20%20%20%20%20%20%20%60hub.pull(%22rlm%2Frag-prompt%22)%60.%20It%20is%20reproduced%20here%20so%20the%20notebook%0A%20%20%20%20%20%20%20%20does%20not%20depend%20on%20the%20Hub%20being%20reachable%2C%20and%20so%20the%20exact%20wording%0A%20%20%20%20%20%20%20%20is%20visible.%20See%20https%3A%2F%2Fsmith.langchain.com%2Fhub%2Frlm%2Frag-prompt%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20return%20ChatPromptTemplate.from_messages(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22system%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22You%20are%20an%20assistant%20for%20question-answering%20tasks.%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Use%20the%20following%20pieces%20of%20retrieved%20context%20to%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22answer%20the%20question.%20If%20you%20don't%20know%20the%20answer%2C%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22just%20say%20that%20you%20don't%20know.%20Use%20three%20sentences%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22maximum%20and%20keep%20the%20answer%20concise.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%22human%22%2C%20%22Question%3A%20%7Bquestion%7D%5CnContext%3A%20%7Bcontext%7D%5CnAnswer%3A%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20def%20make_chat_model()%3A%0A%20%20%20%20%20%20%20%20return%20ChatOpenAI(%0A%20%20%20%20%20%20%20%20%20%20%20%20model_name%3DDEFAULT_CHAT_MODEL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20openai_api_base%3DOPENROUTER_BASE_URL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20openai_api_key%3Dos.environ.get(%22OPENROUTER_API_KEY%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20temperature%3D0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tiktoken_model_name%3DDEFAULT_CHAT_TIKTOKEN_MODEL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20max_retries%3D0%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20def%20make_embeddings()%3A%0A%20%20%20%20%20%20%20%20return%20OpenAIEmbeddings(%0A%20%20%20%20%20%20%20%20%20%20%20%20model%3DDEFAULT_EMBEDDING_MODEL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20openai_api_base%3DOPENROUTER_BASE_URL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20openai_api_key%3Dos.environ.get(%22OPENROUTER_API_KEY%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tiktoken_model_name%3DDEFAULT_EMBEDDING_TIKTOKEN_MODEL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20check_embedding_ctx_length%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tiktoken_enabled%3DFalse%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20class%20SimpleMultiVectorRetriever%3A%0A%20%20%20%20%20%20%20%20def%20__init__(self%2C%20vectorstore%2C%20id_key%3A%20str)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.vectorstore%20%3D%20vectorstore%0A%20%20%20%20%20%20%20%20%20%20%20%20self.id_key%20%3D%20id_key%0A%20%20%20%20%20%20%20%20%20%20%20%20self._docstore%20%3D%20%7B%7D%0A%0A%20%20%20%20%20%20%20%20def%20set_parent_documents(self%2C%20docs_by_id)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self._docstore%20%3D%20dict(docs_by_id)%0A%0A%20%20%20%20%20%20%20%20def%20invoke(self%2C%20query%3A%20str%2C%20k%3A%20int%20%3D%204)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20child_docs%20%3D%20self.vectorstore.similarity_search(query%2C%20k%3Dk)%0A%20%20%20%20%20%20%20%20%20%20%20%20parent_docs%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20seen_ids%20%3D%20set()%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20child_doc%20in%20child_docs%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc_id%20%3D%20child_doc.metadata.get(self.id_key)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20doc_id%20in%20seen_ids%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20parent_doc%20%3D%20self._docstore.get(doc_id)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20parent_doc%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20seen_ids.add(doc_id)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20parent_docs.append(parent_doc)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20parent_docs%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20RAG%E3%82%92%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E4%BD%9C%E6%88%90%0A%0A%20%20%20%20!%5B%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E4%BD%9C%E6%88%90%E3%81%AE%E6%A6%82%E8%A6%81%5D(.%2Fimgs%2Findexing_overview.png)%0A%0A%20%20%20%20%23%23%20%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB%EF%BC%9A%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%A7%E3%81%AF%E3%80%81%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%EF%BC%8F%E5%88%86%E5%89%B2%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%AF%E8%A9%B3%E3%81%97%E3%81%8F%E6%89%B1%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E8%A9%B3%E3%81%97%E3%81%8F%E5%AD%A6%E3%81%B6%E3%81%AB%E3%81%AF%E3%80%81Greg%20Kamradt%E3%81%AB%E3%82%88%E3%82%8B%E6%AC%A1%E3%81%AE%E5%8B%95%E7%94%BB%E3%81%8C%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D8OJC21T2SL4%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%E5%85%B1%E9%80%9A%E9%83%A8%E5%93%81%0A%0A%20%20%20%20%E5%86%92%E9%A0%AD%E3%81%AE%20%60with%20app.setup%60%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%EF%BC%88marimo%E4%B8%8A%E3%81%A7%E3%81%AF%E6%8A%98%E3%82%8A%E3%81%9F%E3%81%9F%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%EF%BC%89%E3%81%A7%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AE%E5%85%B1%E9%80%9A%E9%83%A8%E5%93%81%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%83%91%E3%83%BC%E3%83%8812%E3%81%A7%E3%81%AF%E8%A6%81%E7%B4%84%E3%82%92%E4%BD%BF%E3%81%86%E8%A4%87%E6%95%B0%E8%A1%A8%E7%8F%BE%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%80%81%E3%83%91%E3%83%BC%E3%83%8814%E3%81%A7%E3%81%AFColBERT%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E9%80%9A%E5%B8%B8%E3%81%AERAG%E7%94%A8%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%81%AB%E5%8A%A0%E3%81%88%E3%81%A6ColBERT%E7%94%A8%E3%81%AE%E6%95%B4%E5%BD%A2%E9%96%A2%E6%95%B0%E3%82%84%E8%87%AA%E4%BD%9C%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%82%82%E7%94%A8%E6%84%8F%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60make_chat_model()%60%EF%BC%9A%E5%9B%9E%E7%AD%94%E7%94%9F%E6%88%90%E7%94%A8%E3%81%AE%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%A2%E3%83%87%E3%83%AB%E3%80%82OpenRouter%E7%B5%8C%E7%94%B1%E3%81%A7%20%60openai%2Fgpt-5-nano%60%EF%BC%88%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%20%60MODEL%60%20%E3%81%A7%E5%A4%89%E6%9B%B4%E5%8F%AF%EF%BC%89%E3%82%92%E5%91%BC%E3%81%B3%E3%81%BE%E3%81%99%E3%80%82%E5%87%BA%E5%8A%9B%E3%82%92%E5%AE%89%E5%AE%9A%E3%81%95%E3%81%9B%E3%82%8B%E3%81%9F%E3%82%81%20%60temperature%3D0%60%20%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%80%81%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AF%E5%A4%B1%E6%95%97%E3%82%92%E3%81%99%E3%81%90%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%20%60max_retries%3D0%60%20%E3%81%AB%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60make_embeddings()%60%EF%BC%9A%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%80%82%E6%97%A2%E5%AE%9A%E3%81%AF%20%60openai%2Ftext-embedding-3-small%60%20%E3%81%A7%E3%81%99%E3%80%82OpenRouter%E3%81%AFOpenAI%E4%BA%92%E6%8F%9B%E3%81%A7%E3%81%99%E3%81%8C%E3%83%88%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%82%B6%E6%83%85%E5%A0%B1%E3%82%92%E8%BF%94%E3%81%95%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E5%81%B4%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%92%E7%84%A1%E5%8A%B9%E5%8C%96%EF%BC%88%60check_embedding_ctx_length%3DFalse%60%20%2F%20%60tiktoken_enabled%3DFalse%60%EF%BC%89%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60load_rag_prompt()%60%EF%BC%9ALangChain%20Hub%E3%81%AE%20%60rlm%2Frag-prompt%60%20%E3%81%A8%E5%90%8C%E3%81%98%E5%86%85%E5%AE%B9%E3%81%AE%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%80%82%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%E3%81%AF%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AB%20%60hub.pull()%60%20%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81%E5%A4%96%E9%83%A8%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%B8%E3%81%AE%E4%BE%9D%E5%AD%98%E3%82%92%E9%81%BF%E3%81%91%E3%80%81%E3%81%8B%E3%81%A4%E6%96%87%E9%9D%A2%E3%82%92%E3%81%9D%E3%81%AE%E5%A0%B4%E3%81%A7%E8%AA%AD%E3%82%81%E3%82%8B%E3%82%88%E3%81%86%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%B8%E5%86%99%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60format_colbert_docs(docs)%60%EF%BC%9A%60Document%60%20%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E3%80%81%E6%9C%AC%E6%96%87%E3%82%92%E7%A9%BA%E8%A1%8C2%E3%81%A4%E3%81%A7%E3%81%A4%E3%81%AA%E3%81%84%E3%81%A01%E3%81%A4%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82ColBERT%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AE%20%60%7Bcontext%7D%60%20%E3%81%B8%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60colbert_device()%60%EF%BC%9ACUDA%E3%81%8C%E4%BD%BF%E3%81%88%E3%82%8B%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%AF%20%60cuda%60%E3%80%81%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%20%60cpu%60%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82ColBERT%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8PLAID%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E6%8C%87%E5%AE%9A%E3%81%AB%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60COLBERT_INDEX_DIR%20%3D%20%22.colbert-index%22%60%EF%BC%9A%E3%83%91%E3%83%BC%E3%83%8814%E3%81%A7%E4%BD%9C%E3%82%8BPLAID%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E4%BF%9D%E5%AD%98%E5%85%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A7%E3%81%99%E3%80%82Chroma%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%A2%E3%83%AADB%E3%81%A8%E9%81%95%E3%81%84%E3%80%81%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E4%B8%8A%E3%81%AB%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60SimpleMultiVectorRetriever%60%20%E3%81%AF%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E5%9B%BA%E6%9C%89%E3%81%AE%E7%B0%A1%E6%98%93%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A7%E3%81%99%E3%80%82%E8%A6%81%E7%B4%84%E3%81%A0%E3%81%91%E3%82%92%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%81%AB%E3%81%97%E3%81%A4%E3%81%A4%E3%80%81%E5%9B%9E%E7%AD%94%E7%94%9F%E6%88%90%E3%81%AB%E3%81%AF%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E5%85%83%E6%96%87%E6%9B%B8%E3%82%92%E8%BF%94%E3%81%99%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%E8%A6%81%E7%B4%84%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9F%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%E3%81%A8%E3%80%81%E8%A6%81%E7%B4%84%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E5%86%85%E3%81%A7%E5%85%83%E6%96%87%E6%9B%B8ID%E3%82%92%E8%A1%A8%E3%81%99%E3%82%AD%E3%83%BC%E5%90%8D%EF%BC%88%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%20%60doc_id%60%EF%BC%89%0A%20%20%20%20-%20%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B%E7%8A%B6%E6%85%8B%EF%BC%9A%E8%A6%81%E7%B4%84%E7%94%A8%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%E3%81%A8%E3%80%81%60doc_id%60%20%E3%81%8B%E3%82%89%E5%85%83%E6%96%87%E6%9B%B8%20%60Document%60%20%E3%82%92%E5%BC%95%E3%81%8F%E3%83%A1%E3%83%A2%E3%83%AA%E4%B8%8A%E3%81%AE%E8%BE%9E%E6%9B%B8%20%60_docstore%60%0A%20%20%20%20-%20%E7%99%BB%E9%8C%B2%EF%BC%9A%60set_parent_documents()%60%20%E3%81%A7%20%60doc_id%60%20%E3%81%A8%E5%85%83%E6%96%87%E6%9B%B8%E3%81%AE%E5%AF%BE%E5%BF%9C%E8%A1%A8%E3%82%92%20%60_docstore%60%20%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E6%A4%9C%E7%B4%A2%EF%BC%9A%60invoke(query%2C%20k%3D4)%60%20%E3%81%AF%E8%A6%81%E7%B4%84%E3%82%92%E9%A1%9E%E4%BC%BC%E5%BA%A6%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%E3%83%92%E3%83%83%E3%83%88%E3%81%97%E3%81%9F%E8%A6%81%E7%B4%84%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8B%E3%82%89%20%60doc_id%60%20%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97%E3%80%81%E9%87%8D%E8%A4%87%E3%82%92%E9%99%A4%E3%81%8D%E3%81%AA%E3%81%8C%E3%82%89%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E5%85%83%E6%96%87%E6%9B%B8%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%91%E3%83%BC%E3%83%8812%EF%BC%9A%E8%A4%87%E6%95%B0%E8%A1%A8%E7%8F%BE%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E4%BD%9C%E6%88%90%0A%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E3%81%AB%E9%81%A9%E3%81%97%E3%81%9F%E7%9F%AD%E3%81%84%E8%A6%81%E7%B4%84%E3%82%92%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%8C%96%E3%81%97%E3%80%81%E3%83%92%E3%83%83%E3%83%88%E3%81%97%E3%81%9F%E8%A6%81%E7%B4%84%E3%81%8B%E3%82%89%E6%83%85%E5%A0%B1%E9%87%8F%E3%81%AE%E5%A4%9A%E3%81%84%E5%85%83%E6%96%87%E6%9B%B8%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%A4%9C%E7%B4%A2%E7%94%A8%E8%A1%A8%E7%8F%BE%E3%81%A8%E5%9B%9E%E7%AD%94%E7%94%A8%E6%96%87%E6%9B%B8%E3%82%92%E5%88%86%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%E6%A4%9C%E7%B4%A2%E7%B2%BE%E5%BA%A6%E3%81%A8%E5%9B%9E%E7%AD%94%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E6%96%87%E8%84%88%E9%87%8F%E3%82%92%E4%B8%A1%E7%AB%8B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%87%A6%E7%90%86%E3%81%AE%E6%B5%81%E3%82%8C%EF%BC%9A%0A%0A%20%20%20%20%20!%5B%E8%A4%87%E6%95%B0%E8%A1%A8%E7%8F%BE%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E4%BD%9C%E6%88%90%E3%81%AE%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2Fmulti-representation_indexing.png)%0A%0A%20%20%20%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%EF%BC%9A%0A%0A%20%20%20%20https%3A%2F%2Fblog.langchain.dev%2Fsemi-structured-multi-modal-rag%2F%0A%0A%20%20%20%20https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fmodules%2Fdata_connection%2Fretrievers%2Fmulti_vector%0A%0A%20%20%20%20%E8%AB%96%E6%96%87%EF%BC%9A%0A%0A%20%20%20%20https%3A%2F%2Farxiv.org%2Fabs%2F2312.06648%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%80%81Lilian%20Weng%E3%81%AE%E3%83%96%E3%83%AD%E3%82%B0%E8%A8%98%E4%BA%8B2%E6%9C%AC%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%60WebBaseLoader%60%20%E3%81%AB%20%60bs_kwargs%60%20%E3%82%92%E6%B8%A1%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E4%BB%96%E3%83%91%E3%83%BC%E3%83%88%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%20%60SoupStrainer%60%20%E3%81%A7%E6%9C%AC%E6%96%87%E9%83%A8%E5%88%86%E3%81%A0%E3%81%91%E3%81%AB%E7%B5%9E%E3%82%89%E3%81%9A%E3%80%81%E3%83%9A%E3%83%BC%E3%82%B8%E5%85%A8%E4%BD%93%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E3%83%87%E3%83%BC%E3%82%BF%EF%BC%9A%5BLLM%20Powered%20Autonomous%20Agents%5D(https%3A%2F%2Flilianweng.github.io%2Fposts%2F2023-06-23-agent%2F)%20%E3%81%A8%20%5BThinking%20about%20High-Quality%20Human%20Data%5D(https%3A%2F%2Flilianweng.github.io%2Fposts%2F2024-02-05-human-data-quality%2F)%0A%20%20%20%20-%20%E5%89%8D%E5%87%A6%E7%90%86%EF%BC%9AHTML%E3%81%AE%E7%B5%9E%E3%82%8A%E8%BE%BC%E3%81%BF%E3%81%AA%E3%81%97%E3%80%82%60WebBaseLoader.load()%60%20%E3%81%8C%E8%BF%94%E3%81%99%E5%90%84%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%20%60Document%60%20%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60source_documents%60%20%3D%20%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A0%20%60Document%60%20%E3%83%AA%E3%82%B9%E3%83%88%EF%BC%88%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E4%BB%B6%E6%95%B0%E3%81%AF2%E4%BB%B6%EF%BC%89%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20agent_article_loader%20%3D%20WebBaseLoader(%0A%20%20%20%20%20%20%20%20%22https%3A%2F%2Flilianweng.github.io%2Fposts%2F2023-06-23-agent%2F%22%0A%20%20%20%20)%0A%20%20%20%20source_documents%20%3D%20agent_article_loader.load()%0A%0A%20%20%20%20data_quality_loader%20%3D%20WebBaseLoader(%0A%20%20%20%20%20%20%20%20%22https%3A%2F%2Flilianweng.github.io%2Fposts%2F2024-02-05-human-data-quality%2F%22%0A%20%20%20%20)%0A%20%20%20%20source_documents.extend(data_quality_loader.load())%0A%20%20%20%20len(source_documents)%0A%20%20%20%20return%20(source_documents%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%90%84%E6%96%87%E6%9B%B8%E3%81%AE%E5%85%A8%E6%96%87%E3%82%92LLM%E3%81%B8%E6%B8%A1%E3%81%97%E3%80%81%E6%A4%9C%E7%B4%A2%E7%94%A8%E3%81%AE%E7%9F%AD%E3%81%84%E8%A6%81%E7%B4%84%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%60batch()%60%20%E3%81%AF%E8%A4%87%E6%95%B0%E3%81%AE%20%60Document%60%20%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%B8%E6%B5%81%E3%81%99%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95%E3%81%A7%E3%80%81%60max_concurrency%3D5%60%20%E3%81%AB%E3%82%88%E3%82%8A%E5%90%8C%E6%99%82%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E6%95%B0%E3%82%92%E6%9C%80%E5%A4%A75%E4%BB%B6%E3%81%AB%E5%88%B6%E9%99%90%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%87%BA%E5%8A%9B%E3%81%AF%E5%85%83%E6%96%87%E6%9B%B8%E3%81%A8%E5%90%8C%E3%81%98%E9%A0%86%E5%BA%8F%E3%81%AE%E8%A6%81%E7%B4%84%E6%96%87%E5%AD%97%E5%88%97%E3%83%AA%E3%82%B9%E3%83%88%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60source_documents%60%EF%BC%88%E5%90%84%20%60Document%60%20%E3%81%AE%20%60page_content%60%20%E5%85%A8%E6%96%87%EF%BC%89%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60Summarize%20the%20following%20document%3A%60%20%E3%81%A8%E3%81%84%E3%81%86%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%80%81%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%A2%E3%83%87%E3%83%AB%E3%80%81%E6%96%87%E5%AD%97%E5%88%97%E5%87%BA%E5%8A%9B%E3%83%91%E3%83%BC%E3%82%B5%E3%83%BC%E3%82%92LCEL%E3%81%A7%E6%8E%A5%E7%B6%9A%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60document_summaries%60%20%3D%20%E5%90%84%E6%96%87%E6%9B%B8%E3%81%AE%E8%A6%81%E7%B4%84%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(source_documents)%3A%0A%20%20%20%20summarization_chain%20%3D%20(%0A%20%20%20%20%20%20%20%20%7B%22doc%22%3A%20lambda%20x%3A%20x.page_content%7D%0A%20%20%20%20%20%20%20%20%7C%20ChatPromptTemplate.from_template(%22Summarize%20the%20following%20document%3A%5Cn%5Cn%7Bdoc%7D%22)%0A%20%20%20%20%20%20%20%20%7C%20make_chat_model()%0A%20%20%20%20%20%20%20%20%7C%20StrOutputParser()%0A%20%20%20%20)%0A%0A%20%20%20%20document_summaries%20%3D%20summarization_chain.batch(%0A%20%20%20%20%20%20%20%20source_documents%2C%20%7B%22max_concurrency%22%3A%205%7D%0A%20%20%20%20)%0A%20%20%20%20return%20(document_summaries%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%85%83%E6%96%87%E6%9B%B8%E3%81%A8%E8%A6%81%E7%B4%84%E3%81%AE%E6%96%87%E5%AD%97%E6%95%B0%E3%82%92%E6%AF%94%E3%81%B9%E3%81%BE%E3%81%99%E3%80%82%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%82%92%E7%9F%AD%E3%81%84%E8%A6%81%E7%B4%84%E3%81%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%8C%E8%A8%98%E4%BA%8B%E5%85%A8%E4%BD%93%E3%81%AE%E8%A9%B1%E9%A1%8C%E3%81%AB%E8%96%84%E3%82%81%E3%82%89%E3%82%8C%E3%82%8B%E3%81%AE%E3%82%92%E9%98%B2%E3%81%92%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(document_summaries%2C%20source_documents)%3A%0A%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20(len(doc.page_content)%2C%20len(summary))%0A%20%20%20%20%20%20%20%20for%20doc%2C%20summary%20in%20zip(source_documents%2C%20document_summaries)%0A%20%20%20%20%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E8%A6%81%E7%B4%84%E3%81%A8%E5%85%83%E6%96%87%E6%9B%B8%E3%81%AE%E5%AF%BE%E5%BF%9C%E4%BB%98%E3%81%91%0A%0A%20%20%20%20%E5%90%84%E8%A6%81%E7%B4%84%E3%81%AB%E3%81%AF%E5%85%83%E6%96%87%E6%9B%B8%E3%81%A8%E5%85%B1%E9%80%9A%E3%81%AE%20%60doc_id%60%20%E3%82%92%E4%BB%98%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%E6%96%87%E6%9B%B81%E4%BB%B6%E3%81%94%E3%81%A8%E3%81%ABUUID%E3%82%921%E3%81%A4%E7%94%9F%E6%88%90%E3%81%97%E3%80%81%E8%A6%81%E7%B4%84%E5%81%B4%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E5%85%83%E6%96%87%E6%9B%B8%E5%81%B4%E3%81%AE%E5%AF%BE%E5%BF%9C%E8%A1%A8%E3%82%92%E7%B5%90%E3%81%B3%E3%81%A4%E3%81%91%E3%82%8B%E9%8D%B5%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%81%AF%E8%A6%81%E7%B4%84%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E3%83%92%E3%83%83%E3%83%88%E5%BE%8C%E3%81%AF%20%60doc_id%60%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%85%83%E6%96%87%E6%9B%B8%E3%82%92%E8%BF%94%E3%81%99%E3%81%9F%E3%82%81%E3%80%81%E5%9B%9E%E7%AD%94%E7%94%9F%E6%88%90%E3%81%A7%E3%81%AF%E7%9C%81%E7%95%A5%E5%89%8D%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60source_documents%60%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60id_key%20%3D%20%22doc_id%22%60%20%E3%82%92%E3%82%AD%E3%83%BC%E5%90%8D%E3%81%AB%E3%81%97%E3%80%81%60uuid.uuid4()%60%20%E3%81%A7%E5%90%84%E6%96%87%E6%9B%B8%E3%81%AEID%E3%82%92%E7%94%9F%E6%88%90%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60source_document_ids%60%20%3D%20%E5%85%83%E6%96%87%E6%9B%B8%E3%81%A8%E5%90%8C%E3%81%98%E9%A0%86%E5%BA%8F%E3%81%AEUUID%E6%96%87%E5%AD%97%E5%88%97%E3%83%AA%E3%82%B9%E3%83%88%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(source_documents)%3A%0A%20%20%20%20id_key%20%3D%20%22doc_id%22%0A%20%20%20%20source_document_ids%20%3D%20%5Bstr(uuid.uuid4())%20for%20_%20in%20source_documents%5D%0A%20%20%20%20return%20id_key%2C%20source_document_ids%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%A6%81%E7%B4%84%E3%82%92%20%60Document%60%20%E3%81%B8%E5%8C%85%E3%81%BF%E3%80%81%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%B8%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%20%60doc_id%60%20%E3%82%92%E6%8C%81%E3%81%9F%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(document_summaries%2C%20id_key%2C%20source_document_ids)%3A%0A%20%20%20%20summary_documents%20%3D%20%5B%0A%20%20%20%20%20%20%20%20Document(%0A%20%20%20%20%20%20%20%20%20%20%20%20page_content%3Dsummary%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20metadata%3D%7Bid_key%3A%20source_document_ids%5Bindex%5D%7D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20for%20index%2C%20summary%20in%20enumerate(document_summaries)%0A%20%20%20%20%5D%0A%20%20%20%20summary_documents%5B0%5D.metadata%0A%20%20%20%20return%20(summary_documents%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%A6%81%E7%B4%84%E3%82%92%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%E3%81%B8%E7%99%BB%E9%8C%B2%E3%81%97%E3%80%81%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AB%E3%81%AF%20%60doc_id%60%20%E3%81%8B%E3%82%89%E5%85%83%E6%96%87%E6%9B%B8%E3%82%92%E5%BC%95%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E5%AF%BE%E5%BF%9C%E8%A1%A8%E3%82%92%E6%B8%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E8%A6%81%E7%B4%84%E3%81%A0%E3%81%91%E3%82%92%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%8C%96%E3%81%97%E3%81%A6%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%E5%85%83%E6%96%87%E6%9B%B8%E3%81%AF%20%60SimpleMultiVectorRetriever%60%20%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E4%B8%8A%E3%81%AE%E8%BE%9E%E6%9B%B8%E3%81%AB%E7%BD%AE%E3%81%8F%E4%BA%8C%E5%B1%A4%E6%A7%8B%E6%88%90%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E3%83%87%E3%83%BC%E3%82%BF%EF%BC%9A%60summary_documents%60%EF%BC%882%E6%9C%AC%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E8%A6%81%E7%B4%84%E3%80%82%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%20%60doc_id%60%20%E3%82%92%E4%BF%9D%E6%8C%81%EF%BC%89%0A%20%20%20%20-%20%E5%89%8D%E5%87%A6%E7%90%86%EF%BC%9A%E8%BF%BD%E5%8A%A0%E3%81%AE%E5%88%86%E5%89%B2%E3%81%AA%E3%81%97%E3%80%82%E8%A6%81%E7%B4%84%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E5%AF%BE%E8%B1%A1%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20DB%EF%BC%9AChroma%E3%80%81%60collection_name%3D%22summaries%22%60%E3%80%82%60persist_directory%60%20%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81**%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%A2%E3%83%AA**%E3%81%A7%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60multi_vector_retriever%60%20%3D%20%E8%A6%81%E7%B4%84%E6%A4%9C%E7%B4%A2%E3%81%8B%E3%82%89%E5%85%83%E6%96%87%E6%9B%B8%E3%82%92%E8%BF%94%E3%81%99%20%60SimpleMultiVectorRetriever%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(id_key%2C%20source_document_ids%2C%20source_documents%2C%20summary_documents)%3A%0A%20%20%20%20summary_vectorstore%20%3D%20Chroma(%0A%20%20%20%20%20%20%20%20collection_name%3D%22summaries%22%2C%0A%20%20%20%20%20%20%20%20embedding_function%3Dmake_embeddings()%2C%0A%20%20%20%20)%0A%20%20%20%20summary_vectorstore.add_documents(summary_documents)%0A%0A%20%20%20%20multi_vector_retriever%20%3D%20SimpleMultiVectorRetriever(%0A%20%20%20%20%20%20%20%20vectorstore%3Dsummary_vectorstore%2C%20id_key%3Did_key%0A%20%20%20%20)%0A%20%20%20%20multi_vector_retriever.set_parent_documents(%0A%20%20%20%20%20%20%20%20zip(source_document_ids%2C%20source_documents)%0A%20%20%20%20)%0A%20%20%20%20return%20multi_vector_retriever%2C%20summary_vectorstore%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%BE%E3%81%9A%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%E3%82%92%E7%9B%B4%E6%8E%A5%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%E3%83%92%E3%83%83%E3%83%88%E3%81%97%E3%81%9F%E3%80%8C%E8%A6%81%E7%B4%84%E3%80%8D%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(summary_vectorstore)%3A%0A%20%20%20%20summary_query%20%3D%20%22Memory%20in%20agents%22%0A%20%20%20%20matching_summaries%20%3D%20summary_vectorstore.similarity_search(summary_query%2C%20k%3D1)%0A%20%20%20%20matching_summaries%5B0%5D%0A%20%20%20%20return%20(summary_query%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%90%8C%E3%81%98%E8%B3%AA%E5%95%8F%E3%82%92%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E7%B5%8C%E7%94%B1%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E8%A6%81%E7%B4%84%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%80%8C%E5%85%83%E6%96%87%E6%9B%B8%E3%80%8D%E3%81%8C%E8%BF%94%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(multi_vector_retriever%2C%20summary_query)%3A%0A%20%20%20%20retrieved_parent_documents%20%3D%20multi_vector_retriever.invoke(summary_query)%0A%20%20%20%20retrieved_parent_documents%5B0%5D.page_content%5B0%3A500%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%60SimpleMultiVectorRetriever%60%20%E3%81%AF%E3%80%81%E8%A6%81%E7%B4%84%E3%81%AB%E4%BB%98%E4%B8%8E%E3%81%97%E3%81%9F%20%60doc_id%60%20%E3%81%8B%E3%82%89%E5%85%83%E6%96%87%E6%9B%B8%E3%82%92%E5%BE%A9%E5%85%83%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E6%A8%99%E6%BA%96%E7%9A%84%E3%81%AA%E5%AE%9F%E8%A3%85%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81%5B%E8%A6%AA%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%5D(https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fmodules%2Fdata_connection%2Fretrievers%2Fparent_document_retriever)%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%91%E3%83%BC%E3%83%8813%EF%BC%9ARAPTOR%0A%0A%20%20%20%20RAPTOR%E3%81%AF%E6%96%87%E6%9B%B8%E3%82%92%E9%9A%8E%E5%B1%A4%E7%9A%84%E3%81%AB%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%BB%E8%A6%81%E7%B4%84%E3%81%97%E3%80%81%E7%B4%B0%E9%83%A8%E3%81%AE%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%A8%E4%B8%8A%E4%BD%8D%E3%81%AE%E8%A6%81%E7%B4%84%E3%82%92%E5%90%8C%E3%81%98%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%81%AB%E3%81%99%E3%82%8B%E6%89%8B%E6%B3%95%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%A7%E3%81%AF%E5%AE%9F%E8%A3%85%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%9B%E3%81%9A%E3%80%81%E6%A6%82%E5%BF%B5%E5%9B%B3%E3%81%A8%E5%8F%82%E8%80%83%E8%B3%87%E6%96%99%E3%81%AE%E3%81%BF%E3%82%92%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%87%A6%E7%90%86%E3%81%AE%E6%B5%81%E3%82%8C%EF%BC%9A%0A%0A%20%20%20%20!%5BRAPTOR%E3%81%AE%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2FRAPTOR.png)%0A%0A%20%20%20%20%E8%A9%B3%E7%B4%B0%E8%A7%A3%E8%AA%AC%E5%8B%95%E7%94%BB%EF%BC%9A%0A%0A%20%20%20%20https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DjbGchdTL7d0%0A%0A%20%20%20%20%E8%AB%96%E6%96%87%EF%BC%9A%0A%0A%20%20%20%20https%3A%2F%2Farxiv.org%2Fpdf%2F2401.18059.pdf%0A%0A%20%20%20%20%E5%AE%8C%E5%85%A8%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%9A%0A%0A%20%20%20%20https%3A%2F%2Fgithub.com%2Flangchain-ai%2Flangchain%2Fblob%2Fmaster%2Fcookbook%2FRAPTOR.ipynb%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%91%E3%83%BC%E3%83%8814%EF%BC%9AColBERT%0A%0A%20%20%20%20%E9%80%9A%E5%B8%B8%E3%81%AE%E5%AF%86%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E6%A4%9C%E7%B4%A2%E3%81%8C%E6%96%87%E6%9B%B8%E5%85%A8%E4%BD%93%E3%82%92%E4%B8%80%E3%81%A4%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AB%E5%9C%A7%E7%B8%AE%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AB%E5%AF%BE%E3%81%97%E3%80%81ColBERT%E3%81%AF%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A8%E6%96%87%E6%9B%B8%E3%81%AE%E5%90%84%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%88%A5%E3%80%85%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E4%BF%9D%E6%8C%81%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E5%90%84%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%96%87%E6%9B%B8%E5%81%B4%E3%81%A8%E3%81%AE%E6%9C%80%E5%A4%A7%E9%A1%9E%E4%BC%BC%E5%BA%A6%EF%BC%88MaxSim%EF%BC%89%E3%82%92%E6%B1%82%E3%82%81%E3%80%81%E3%81%9D%E3%81%AE%E5%90%88%E8%A8%88%E3%81%A7%E6%96%87%E6%9B%B8%E3%82%92%E9%A0%86%E4%BD%8D%E4%BB%98%E3%81%91%E3%81%99%E3%82%8B%E3%80%8CLate%20Interaction%E3%80%8D%E3%81%8C%E7%89%B9%E5%BE%B4%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20%E4%BD%BF%E7%94%A8%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E5%A4%89%E9%81%B7%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%91%E3%83%BC%E3%83%88%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%AF%E6%AC%A1%E3%81%AE%E7%B5%8C%E7%B7%AF%E3%81%A7%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%7C%20%E7%89%88%20%7C%20%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%20%7C%20%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%20%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%20%7C%20RAGatouille%20%7C%20RAGatouille%20%7C%0A%20%20%20%20%7C%20%E6%97%A7%E7%89%88%20%7C%20PyLate%20%60models.ColBERT%60%20%7C%20PyLate%20%60indexes.PLAID%60%20%7C%0A%20%20%20%20%7C%20%E7%8F%BE%E5%9C%A8%20%7C%20%60sentence-transformers%60%20%E3%81%AE%20%60MultiVectorEncoder%60%20%7C%20%60fast-plaid%60%20%E3%81%AE%20%60FastPlaid%60%20%7C%0A%0A%20%20%20%20PyLate%E3%81%AF%E5%86%85%E9%83%A8%E3%81%A7%20%60fast-plaid%60%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E3%81%9F%E3%82%81%E3%80%81%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%AF%E6%97%A7%E7%89%88%E3%81%A8%E5%90%8C%E3%81%98%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%9F%E3%81%AE%E3%81%AF%E3%80%81PyLate%E3%81%A8%E3%81%84%E3%81%86%E3%83%A9%E3%83%83%E3%83%91%E3%83%BC%E3%82%92%E5%A4%96%E3%81%97%E3%81%A6%20%60fast-plaid%60%20%E3%82%92%E7%9B%B4%E6%8E%A5%E5%91%BC%E3%81%B6%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F%E7%82%B9%E3%81%A8%E3%80%81%0A%20%20%20%20%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%E3%82%92%20%60sentence-transformers%60%20v6%20%E3%81%AE%20%60MultiVectorEncoder%60%20%E3%81%B8%E7%A7%BB%E3%81%97%E3%81%9F%E7%82%B9%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AB%E3%82%88%E3%82%8A%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8D%98%E4%BD%8D%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%A8MaxSim%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E7%9B%B4%E6%8E%A5%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%80%81%0A%20%20%20%20%E3%83%91%E3%83%BC%E3%83%8815%E3%81%AE%20%60CrossEncoder%60%20%E3%81%A8%E5%90%8C%E3%81%98%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AB%E6%8F%83%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%E8%A9%B3%E7%B4%B0%E3%81%AF%20%60docs%2Fcolbert-stack.md%60%20%E3%82%92%E5%8F%82%E7%85%A7%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%0A%20%20%20%20%E4%BD%BF%E7%94%A8%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AF%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%E3%81%AE%20%60colbert-ir%2Fcolbertv2.0%60%20%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%0A%20%20%20%20%60lightonai%2FGTE-ModernColBERT-v1%60%20%E3%81%A7%E3%81%99%E3%80%82%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A8%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%E3%81%A8%E7%9B%B4%E6%8E%A5%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%E5%88%9D%E5%9B%9E%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AF%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A8%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%20%60COLBERT_MODEL%60%20%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%81%9D%E3%81%AE%E5%80%A4%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%E6%9C%AA%E6%8C%87%E5%AE%9A%E3%81%AA%E3%82%89%20%60lightonai%2FGTE-ModernColBERT-v1%60%20%E3%82%92%E4%BD%BF%E3%81%86%E3%83%A2%E3%83%87%E3%83%AB%E5%90%8D%E3%81%A8%E3%81%97%E3%81%A6%20%60colbert_model_name%60%20%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20colbert_model_name%20%3D%20os.environ.get(%0A%20%20%20%20%20%20%20%20%22COLBERT_MODEL%22%2C%20%22lightonai%2FGTE-ModernColBERT-v1%22%0A%20%20%20%20)%0A%20%20%20%20return%20(colbert_model_name%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81%E8%8B%B1%E8%AA%9E%E7%89%88Wikipedia%E3%81%AE%E3%80%8CHayao_Miyazaki%E3%80%8D%E8%A8%98%E4%BA%8B%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60get_wikipedia_page()%60%20%E3%81%AFWikipedia%20API%E3%81%8B%E3%82%89%E3%83%9A%E3%83%BC%E3%82%B8%E6%9C%AC%E6%96%87%E3%82%92%E3%83%97%E3%83%AC%E3%83%BC%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%A7%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%99%E5%B0%8F%E3%81%95%E3%81%AA%E8%87%AA%E4%BD%9C%E9%96%A2%E6%95%B0%E3%81%A7%E3%80%81%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E6%96%87%E5%AD%97%E6%95%B0%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9AWikipedia%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%EF%BC%88%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%20%60%22Hayao_Miyazaki%22%60%EF%BC%89%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60https%3A%2F%2Fen.wikipedia.org%2Fw%2Fapi.php%60%20%E3%81%AB%20%60action%3Dquery%60%E3%80%81%60prop%3Dextracts%60%E3%80%81%60explaintext%3DTrue%60%20%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82Wikipedia%E3%81%AE%E4%BD%9C%E6%B3%95%E3%81%AB%E5%BE%93%E3%81%84%E3%80%81%60User-Agent%60%20%E3%83%98%E3%83%83%E3%83%80%E3%82%82%E4%BB%98%E3%81%91%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60miyazaki_article%60%20%3D%20%60page.get(%22extract%22)%60%20%E3%81%AE%E8%BF%94%E3%82%8A%E5%80%A4%E3%80%82%E5%AF%BE%E8%B1%A1%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A7%E3%81%AF%E8%A8%98%E4%BA%8B%E6%9C%AC%E6%96%87%E3%81%AE%E3%83%97%E3%83%AC%E3%83%BC%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E6%96%87%E5%AD%97%E5%88%97%EF%BC%88%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E6%95%B0%E5%80%A4%E3%81%AF%E6%96%87%E5%AD%97%E6%95%B0%EF%BC%89%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AA%E3%81%A9%E3%81%AF%20%60None%60%20%E3%81%AB%E3%81%AA%E3%82%8B%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20requests%0A%0A%20%20%20%20def%20get_wikipedia_page(title%3A%20str)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Retrieve%20the%20full%20text%20content%20of%20a%20Wikipedia%20page.%0A%0A%20%20%20%20%20%20%20%20%3Aparam%20title%3A%20str%20-%20Title%20of%20the%20Wikipedia%20page.%0A%20%20%20%20%20%20%20%20%3Areturn%3A%20str%20-%20Full%20text%20content%20of%20the%20page%20as%20raw%20string.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Wikipedia%20API%20endpoint%0A%20%20%20%20%20%20%20%20URL%20%3D%20%22https%3A%2F%2Fen.wikipedia.org%2Fw%2Fapi.php%22%0A%0A%20%20%20%20%20%20%20%20%23%20Parameters%20for%20the%20API%20request%0A%20%20%20%20%20%20%20%20params%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22action%22%3A%20%22query%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22format%22%3A%20%22json%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22titles%22%3A%20title%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22prop%22%3A%20%22extracts%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22explaintext%22%3A%20True%2C%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%23%20Custom%20User-Agent%20header%20to%20comply%20with%20Wikipedia's%20best%20practices%0A%20%20%20%20%20%20%20%20headers%20%3D%20%7B%22User-Agent%22%3A%20%22PyLate_tutorial%2F0.0.1%22%7D%0A%0A%20%20%20%20%20%20%20%20response%20%3D%20requests.get(URL%2C%20params%3Dparams%2C%20headers%3Dheaders)%0A%20%20%20%20%20%20%20%20data%20%3D%20response.json()%0A%0A%20%20%20%20%20%20%20%20%23%20Extracting%20page%20content%0A%20%20%20%20%20%20%20%20page%20%3D%20next(iter(data%5B%22query%22%5D%5B%22pages%22%5D.values()))%0A%20%20%20%20%20%20%20%20return%20page.get(%22extract%22)%0A%0A%20%20%20%20miyazaki_article%20%3D%20get_wikipedia_page(%22Hayao_Miyazaki%22)%0A%20%20%20%20len(miyazaki_article)%0A%20%20%20%20return%20(miyazaki_article%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%A8%98%E4%BA%8B%E3%82%92%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%B8%E5%88%86%E5%89%B2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%E3%81%AF%20RAGatouille%20%E3%81%AB%0A%20%20%20%20%60max_document_length%3D180%2C%20split_documents%3DTrue%60%20%E3%82%92%E6%B8%A1%E3%81%97%E3%81%A6%E5%86%85%E9%83%A8%E3%81%A7%E5%88%86%E5%89%B2%E3%81%95%E3%81%9B%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E5%90%8C%E3%81%98%E7%B2%92%E5%BA%A6%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%88%E3%81%86%E3%80%81%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%9F%BA%E6%BA%96%E3%81%A7180%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%83%BB%E9%87%8D%E3%81%AA%E3%82%8A%E3%81%AA%E3%81%97%E3%81%A7%E5%88%86%E5%89%B2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20ColBERT%E3%81%AF%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%94%E3%81%A8%E3%81%AB%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8D%98%E4%BD%8D%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%E6%8C%81%E3%81%A4%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E7%9F%AD%E3%81%8F%E4%BF%9D%E3%81%A4%E3%81%A8%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E8%82%A5%E5%A4%A7%E3%82%92%E6%8A%91%E3%81%88%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%AA%E3%81%8A%20%60GTE-ModernColBERT-v1%60%20%E3%81%AF%E6%9C%80%E5%A4%A7299%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%BE%E3%81%A7%E3%81%97%E3%81%8B%E5%8F%97%E3%81%91%E4%BB%98%E3%81%91%E3%81%9A%E3%80%81%0A%20%20%20%20%E3%81%9D%E3%82%8C%E3%82%92%E8%B6%85%E3%81%88%E3%82%8B%E5%88%86%E3%81%AF%E5%88%87%E3%82%8A%E6%8D%A8%E3%81%A6%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E5%88%86%E5%89%B2%E5%BE%8C%E3%81%AE%20%60colbert_passages%60%20%E3%81%AE%E4%BB%B6%E6%95%B0%E3%81%8C%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BEPLAID%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%B8%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%95%B0%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E3%83%87%E3%83%BC%E3%82%BF%EF%BC%9A%60miyazaki_article%60%EF%BC%88%E8%8B%B1%E8%AA%9E%E7%89%88Wikipedia%E3%81%AE%E3%80%8CHayao_Miyazaki%E3%80%8D%E8%A8%98%E4%BA%8B%E6%9C%AC%E6%96%87%EF%BC%89%0A%20%20%20%20-%20%E5%89%8D%E5%87%A6%E7%90%86%EF%BC%9A%60RecursiveCharacterTextSplitter.from_tiktoken_encoder()%60%20%2F%20%60chunk_size%3D180%60%2C%20%60chunk_overlap%3D0%60%EF%BC%88%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%9F%BA%E6%BA%96%EF%BC%89%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60colbert_passages%60%20%3D%20%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%EF%BC%88%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E6%95%B0%E5%80%A4%E3%81%8C%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%95%B0%EF%BC%89%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(miyazaki_article)%3A%0A%20%20%20%20%23%20Matches%20the%20original%20notebook's%20RAGatouille%20setting%0A%20%20%20%20%23%20(max_document_length%3D180%2C%20split_documents%3DTrue).%0A%20%20%20%20text_splitter%20%3D%20RecursiveCharacterTextSplitter.from_tiktoken_encoder(%0A%20%20%20%20%20%20%20%20chunk_size%3D180%2C%20chunk_overlap%3D0%0A%20%20%20%20)%0A%20%20%20%20colbert_passages%20%3D%20text_splitter.split_text(miyazaki_article)%0A%20%20%20%20len(colbert_passages)%0A%20%20%20%20return%20(colbert_passages%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20ColBERT%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A7%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%E9%80%9A%E5%B8%B8%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%8C1%E6%96%87%E6%9B%B8%E3%81%82%E3%81%9F%E3%82%8A1%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AA%E3%81%AE%E3%81%AB%E5%AF%BE%E3%81%97%E3%80%81ColBERT%E3%81%AF**%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%94%E3%81%A8%E3%81%AB1%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB**%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%60encode_document()%60%20%E3%81%AF%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%94%E3%81%A8%E3%81%AB%20%60(%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%2C%20%E6%AC%A1%E5%85%83)%60%20%E3%81%AE%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E3%82%92%E8%BF%94%E3%81%99%E3%81%9F%E3%82%81%E3%80%81%E9%95%B7%E3%81%95%E3%81%AE%E9%81%95%E3%81%86%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AF%E8%A1%8C%E6%95%B0%E3%81%AE%E9%81%95%E3%81%86%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%E5%85%88%E9%A0%AD5%E4%BB%B6%E3%81%AE%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E5%BD%A2%E7%8A%B6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_model_name%2C%20colbert_passages)%3A%0A%20%20%20%20colbert_model%20%3D%20MultiVectorEncoder(colbert_model_name%2C%20device%3Dcolbert_device())%0A%20%20%20%20passage_embeddings%20%3D%20colbert_model.encode_document(colbert_passages)%0A%20%20%20%20%5Btuple(embedding.shape)%20for%20embedding%20in%20passage_embeddings%5B%3A5%5D%5D%0A%20%20%20%20return%20colbert_model%2C%20passage_embeddings%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%B3%AA%E5%95%8F%E5%81%B4%E3%81%AF%20%60encode_query()%60%20%E3%81%A7%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%E5%85%A5%E5%8A%9B%E3%81%AF%E8%B3%AA%E5%95%8F%E6%96%87%E5%AD%97%E5%88%97%20%60colbert_query%60%E3%80%81%E5%87%BA%E5%8A%9B%E3%81%AF%E3%82%AF%E3%82%A8%E3%83%AA%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%94%E3%81%A8%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%20%60query_embedding%60%20%E3%81%A7%E3%81%99%E3%80%82%E6%96%87%E6%9B%B8%E5%81%B4%E3%81%A8%E9%81%95%E3%81%84%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%81%AF%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E5%9B%BA%E5%AE%9A%E9%95%B7%E3%81%B8%E6%8F%83%E3%81%88%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E8%A1%8C%E6%95%B0%E3%81%8C%E4%B8%80%E5%AE%9A%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%20%60query_embedding%60%20%E3%81%AE%E5%BD%A2%E7%8A%B6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_model)%3A%0A%20%20%20%20colbert_query%20%3D%20%22What%20animation%20studio%20did%20Miyazaki%20found%3F%22%0A%20%20%20%20query_embedding%20%3D%20colbert_model.encode_query(colbert_query)%0A%20%20%20%20tuple(query_embedding.shape)%0A%20%20%20%20return%20colbert_query%2C%20query_embedding%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20MaxSim%E3%81%AB%E3%82%88%E3%82%8B%E6%8E%A1%E7%82%B9%0A%0A%20%20%20%20%60similarity()%60%20%E3%81%8CLate%20Interaction%E3%81%AE%E6%8E%A1%E7%82%B9%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E5%90%84%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%80%81%E6%96%87%E6%9B%B8%E5%81%B4%E3%81%AE%E3%81%A9%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%A8%E6%9C%80%E3%82%82%E4%BC%BC%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E6%B1%82%E3%82%81%E3%80%81%E3%81%9D%E3%81%AE%E6%9C%80%E5%A4%A7%E5%80%A4%E3%82%92%E3%82%AF%E3%82%A8%E3%83%AA%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%85%A8%E4%BD%93%E3%81%A7%E5%90%88%E8%A8%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%85%A5%E5%8A%9B%E3%81%AF%20%60query_embedding.unsqueeze(0)%60%20%E3%81%A8%20%60passage_embeddings%60%E3%80%81%E5%87%BA%E5%8A%9B%E3%81%AE%20%60exhaustive_scores%60%20%E3%81%AF%E5%90%84%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E3%82%B9%E3%82%B3%E3%82%A2%E3%81%AE%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E3%81%A7%E3%81%99%E3%80%82%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%95%B0%E3%81%8C%E5%B0%91%E3%81%AA%E3%81%84%E3%81%86%E3%81%A1%E3%81%AF%E3%80%81%E3%81%93%E3%81%AE%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E8%A8%88%E7%AE%97%E3%81%A7%E5%8D%81%E5%88%86%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_model%2C%20passage_embeddings%2C%20query_embedding)%3A%0A%20%20%20%20exhaustive_scores%20%3D%20colbert_model.similarity(%0A%20%20%20%20%20%20%20%20query_embedding.unsqueeze(0)%2C%20passage_embeddings%0A%20%20%20%20)%5B0%5D%0A%20%20%20%20exhaustive_top%20%3D%20exhaustive_scores.topk(3)%0A%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20(int(i)%2C%20round(float(s)%2C%204))%0A%20%20%20%20%20%20%20%20for%20s%2C%20i%20in%20zip(exhaustive_top.values%2C%20exhaustive_top.indices)%0A%20%20%20%20%5D%0A%20%20%20%20return%20(exhaustive_scores%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20PLAID%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%0A%0A%20%20%20%20%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%95%B0%E3%81%8C%E5%A2%97%E3%81%88%E3%82%8B%E3%81%A8%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E3%81%A7%E3%81%AF%E8%BF%BD%E3%81%84%E3%81%A4%E3%81%8B%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82PLAID%E3%81%AF%E9%87%8D%E5%BF%83%E3%81%AB%E3%82%88%E3%82%8B%E6%9E%9D%E5%88%88%E3%82%8A%E3%81%A8%E9%87%8F%E5%AD%90%E5%8C%96%E3%81%A7%E3%80%81%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%94%E3%81%A8%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%84%E3%81%86%E5%A4%9A%E9%87%8F%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%AE%9F%E7%94%A8%E7%9A%84%E3%81%AA%E5%AE%B9%E9%87%8F%E3%81%A8%E9%80%9F%E5%BA%A6%E3%81%B8%E6%8A%91%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%60fast-plaid%60%20%E3%81%AF%E3%81%9D%E3%81%AERust%E5%AE%9F%E8%A3%85%E3%81%A7%E3%80%81%60encode_document()%60%20%E3%81%8C%E8%BF%94%E3%81%97%E3%81%9F%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60passage_embeddings%60%EF%BC%88%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%94%E3%81%A8%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8D%98%E4%BD%8D%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E3%80%82%E5%90%84%E8%A6%81%E7%B4%A0%E3%81%AF%20%60(%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%2C%20%E6%AC%A1%E5%85%83)%60%EF%BC%89%0A%20%20%20%20-%20DB%EF%BC%9APLAID%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%80%82%E4%BF%9D%E5%AD%98%E5%85%88%E3%81%AF%20%60COLBERT_INDEX_DIR%60%20%E3%81%8C%E6%8C%87%E3%81%99%20%60.colbert-index%2F%60%20%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A7%E3%81%99%0A%20%20%20%20-%20%E6%B0%B8%E7%B6%9A%E6%80%A7%EF%BC%9A%E4%BB%96%E3%83%91%E3%83%BC%E3%83%88%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%A2%E3%83%AAChroma%E3%81%A8%E9%81%95%E3%81%84%E3%80%81%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E4%B8%8A%E3%81%AB%E4%BD%9C%E3%82%89%E3%82%8C%E3%80%81%E5%AE%9F%E8%A1%8C%E5%BE%8C%E3%82%82%E6%AE%8B%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%60.colbert-index%2F%60%20%E3%81%AF%20%60.gitignore%60%20%E6%B8%88%E3%81%BF%E3%81%A7%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60colbert_index%60%20%3D%20%60FastPlaid%60%20%E3%81%AE%E6%A4%9C%E7%B4%A2%E7%94%A8%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(passage_embeddings)%3A%0A%20%20%20%20colbert_index%20%3D%20FastPlaid(%0A%20%20%20%20%20%20%20%20index%3DCOLBERT_INDEX_DIR%2C%20device%3Dcolbert_device()%0A%20%20%20%20)%0A%20%20%20%20colbert_index.create(documents_embeddings%3Dpassage_embeddings)%0A%20%20%20%20return%20(colbert_index%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%81%AF%20%60(%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E4%BD%8D%E7%BD%AE%2C%20%E3%82%B9%E3%82%B3%E3%82%A2)%60%20%E3%81%AE%E7%B5%84%E3%81%A7%E8%BF%94%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82PLAID%E3%81%AF%E8%BF%91%E4%BC%BC%E6%A4%9C%E7%B4%A2%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E3%81%AEMaxSim%E7%B5%90%E6%9E%9C%E3%81%A8%E4%B8%A6%E3%81%B9%E3%81%A6%E6%AF%94%E8%BC%83%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_index%2C%20query_embedding)%3A%0A%20%20%20%20colbert_results%20%3D%20colbert_index.search(%0A%20%20%20%20%20%20%20%20queries_embeddings%3Dquery_embedding.unsqueeze(0)%2C%20top_k%3D3%0A%20%20%20%20)%0A%20%20%20%20colbert_results%5B0%5D%0A%20%20%20%20return%20(colbert_results%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E3%81%A8PLAID%E3%81%AE%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E4%B8%A6%E3%81%B9%E3%81%A6%E6%AF%94%E8%BC%83%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%82%B3%E3%83%BC%E3%83%91%E3%82%B9%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%A8%E3%80%81PLAID%E3%81%AE%E8%BF%91%E4%BC%BC%E3%81%AB%E3%82%88%E3%82%8A%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E3%81%AEMaxSim%E3%81%A8%E5%B7%AE%E3%81%8C%E5%87%BA%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_results%2C%20exhaustive_scores)%3A%0A%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22passage%22%3A%20position%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22plaid%22%3A%20round(float(score)%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22exhaustive%22%3A%20round(float(exhaustive_scores%5Bposition%5D)%2C%204)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20position%2C%20score%20in%20colbert_results%5B0%5D%0A%20%20%20%20%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E4%BD%8D%E7%BD%AE%E3%81%8B%E3%82%89%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%9C%AC%E6%96%87%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_passages%2C%20colbert_results)%3A%0A%20%20%20%20retrieved_passages%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22position%22%3A%20position%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22score%22%3A%20round(float(score)%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22text%22%3A%20colbert_passages%5Bposition%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20position%2C%20score%20in%20colbert_results%5B0%5D%0A%20%20%20%20%5D%0A%20%20%20%20retrieved_passages%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20LangChain%E3%81%AE%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%86%0A%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%AF%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%20%60(%E4%BD%8D%E7%BD%AE%2C%20%E3%82%B9%E3%82%B3%E3%82%A2)%60%20%E3%81%AE%E3%82%BF%E3%83%97%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E7%9B%B4%E6%8E%A5%E6%89%B1%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%E3%81%9F%E3%81%A0%E3%81%97RAG%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%B8%E5%B7%AE%E3%81%97%E8%BE%BC%E3%82%80%E3%81%AB%E3%81%AF%E3%80%81LangChain%E3%81%8C%E6%9C%9F%E5%BE%85%E3%81%99%E3%82%8B%0A%20%20%20%20%E3%80%8C%E3%82%AF%E3%82%A8%E3%83%AA%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%20%60Document%60%20%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E8%BF%94%E3%81%99%E3%80%8D%E5%BD%A2%E3%81%AB%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%E3%81%AF%20%60RAG.as_langchain_retriever(k%3D3)%60%20%E3%81%AE%E4%B8%80%E8%A1%8C%E3%81%A7%E3%81%93%E3%82%8C%E3%82%92%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20RAGatouille%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84%E7%8F%BE%E5%9C%A8%E3%81%AF%E3%80%81%60BaseRetriever%60%20%E3%82%92%E7%B6%99%E6%89%BF%E3%81%97%E3%81%A6%E5%90%8C%E3%81%98%E5%BD%B9%E5%89%B2%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%AE%9F%E8%A3%85%E3%81%99%E3%81%B9%E3%81%8D%E3%81%AF%20%60_get_relevant_documents()%60%20%E3%81%AE1%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A0%E3%81%91%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60BaseRetriever%60%20%E3%81%AFPydantic%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%82%84%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%0A%20%20%20%20%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%20%60arbitrary_types_allowed%60%20%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B%E5%B1%9E%E6%80%A7%EF%BC%9A%60encoder%60%EF%BC%88%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80%20%60MultiVectorEncoder%60%EF%BC%89%E3%80%81%60index%60%EF%BC%88%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%20%60FastPlaid%60%EF%BC%89%E3%80%81%60passages%60%EF%BC%88%E4%BD%8D%E7%BD%AE%E3%81%8B%E3%82%89%E6%9C%AC%E6%96%87%E3%82%92%E5%BC%95%E3%81%8F%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%96%87%E5%AD%97%E5%88%97%E3%83%AA%E3%82%B9%E3%83%88%EF%BC%89%E3%80%81%60k%60%EF%BC%88%E8%BF%94%E3%81%99%E4%BB%B6%E6%95%B0%EF%BC%89%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60_get_relevant_documents()%60%20%E3%81%AB%E6%B8%A1%E3%81%95%E3%82%8C%E3%82%8B%E3%82%AF%E3%82%A8%E3%83%AA%E6%96%87%E5%AD%97%E5%88%97%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%20%60encode_query()%60%20%E3%81%A7%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%80%81PLAID%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%20%60top_k%3Dself.k%60%20%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%E8%BF%94%E3%81%A3%E3%81%9F%E4%BD%8D%E7%BD%AE%E3%81%8B%E3%82%89%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%9C%AC%E6%96%87%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60page_content%60%20%E3%81%AB%E3%83%91%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E6%9C%AC%E6%96%87%E3%80%81%60metadata%60%20%E3%81%AB%20%60position%60%20%E3%81%A8%20%60score%60%20%E3%82%92%E6%8C%81%E3%81%A4%20%60Document%60%20%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.class_definition%0Aclass%20ColBERTRetriever(BaseRetriever)%3A%0A%20%20%20%20%22%22%22Expose%20a%20fast-plaid%20ColBERT%20index%20as%20a%20LangChain%20retriever.%0A%0A%20%20%20%20Equivalent%20to%20%60RAG.as_langchain_retriever(k%3D...)%60%20in%20the%20original%0A%20%20%20%20notebook%2C%20which%20relied%20on%20RAGatouille.%0A%20%20%20%20%22%22%22%0A%0A%20%20%20%20model_config%20%3D%20ConfigDict(arbitrary_types_allowed%3DTrue)%0A%0A%20%20%20%20encoder%3A%20MultiVectorEncoder%0A%20%20%20%20index%3A%20FastPlaid%0A%20%20%20%20passages%3A%20list%5Bstr%5D%0A%20%20%20%20k%3A%20int%20%3D%203%0A%0A%20%20%20%20def%20_get_relevant_documents(self%2C%20query%2C%20*%2C%20run_manager%3DNone)%3A%0A%20%20%20%20%20%20%20%20query_embedding%20%3D%20self.encoder.encode_query(query)%0A%20%20%20%20%20%20%20%20results%20%3D%20self.index.search(%0A%20%20%20%20%20%20%20%20%20%20%20%20queries_embeddings%3Dquery_embedding.unsqueeze(0)%2C%20top_k%3Dself.k%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20Document(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20page_content%3Dself.passages%5Bposition%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20metadata%3D%7B%22position%22%3A%20position%2C%20%22score%22%3A%20float(score)%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20position%2C%20score%20in%20results%5B0%5D%0A%20%20%20%20%20%20%20%20%5D%0A%0A%0A%40app.cell%0Adef%20_(colbert_index%2C%20colbert_model%2C%20colbert_passages)%3A%0A%20%20%20%20colbert_retriever%20%3D%20ColBERTRetriever(%0A%20%20%20%20%20%20%20%20encoder%3Dcolbert_model%2C%0A%20%20%20%20%20%20%20%20index%3Dcolbert_index%2C%0A%20%20%20%20%20%20%20%20passages%3Dcolbert_passages%2C%0A%20%20%20%20%20%20%20%20k%3D3%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(colbert_retriever%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%A7%E4%BB%96%E3%81%AE%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A8%E5%90%8C%E3%81%98%20%60invoke()%60%20%E3%81%A7%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%8C%20%60Document%60%20%E3%81%AB%0A%20%20%20%20%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%9F%E3%82%81%E3%80%81%60format_colbert_docs%60%20%E3%82%84LCEL%E3%81%AE%E3%83%91%E3%82%A4%E3%83%97%E3%81%B8%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E6%B8%A1%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_query%2C%20colbert_retriever)%3A%0A%20%20%20%20colbert_documents%20%3D%20colbert_retriever.invoke(colbert_query)%0A%20%20%20%20colbert_documents%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%AE%9F%E9%9A%9B%E3%81%ABRAG%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%B8%E5%B7%AE%E3%81%97%E8%BE%BC%E3%81%BF%E3%80%81ColBERT%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%9F%E5%86%85%E5%AE%B9%E3%81%8B%E3%82%89%E5%9B%9E%E7%AD%94%E3%82%92%E7%94%9F%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E6%A4%9C%E7%B4%A2%E3%81%AE%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A8%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%A0%E3%81%91%E3%81%A7%E5%8B%95%E3%81%8F%E7%82%B9%E3%81%8C%E3%80%81%0A%20%20%20%20LangChain%E3%81%AE%E9%83%A8%E5%93%81%E3%81%A8%E3%81%97%E3%81%A6%E6%8F%83%E3%81%88%E3%82%8B%E5%88%A9%E7%82%B9%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(colbert_query%2C%20colbert_retriever)%3A%0A%20%20%20%20colbert_rag_chain%20%3D%20(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22context%22%3A%20colbert_retriever%20%7C%20format_colbert_docs%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22question%22%3A%20RunnablePassthrough()%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7C%20load_rag_prompt()%0A%20%20%20%20%20%20%20%20%7C%20make_chat_model()%0A%20%20%20%20%20%20%20%20%7C%20StrOutputParser()%0A%20%20%20%20)%0A%20%20%20%20colbert_rag_chain.invoke(colbert_query)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
4c751eac705fb4bf369be46db83bf200