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%20%23%20Initialization%20code%20that%20runs%20before%20all%20other%20cells%0A%20%20%20%20import%20os%0A%0A%20%20%20%20import%20bs4%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20tiktoken%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.output_parsers%20import%20StrOutputParser%0A%20%20%20%20from%20langchain_core.prompts%20import%20ChatPromptTemplate%0A%20%20%20%20from%20langchain_core.runnables%20import%20RunnablePassthrough%0A%20%20%20%20from%20langchain_core.tracers%20import%20ConsoleCallbackHandler%0A%20%20%20%20from%20langchain_openai%20import%20ChatOpenAI%2C%20OpenAIEmbeddings%0A%20%20%20%20from%20langchain_text_splitters%20import%20RecursiveCharacterTextSplitter%0A%0A%20%20%20%20OPENROUTER_BASE_URL%20%3D%20%22https%3A%2F%2Fopenrouter.ai%2Fapi%2Fv1%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%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%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)%0A%0A%20%20%20%20def%20format_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%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%E6%A6%82%E8%A6%81%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%81RAG%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%E6%B5%81%E3%82%8C%E3%82%92%E5%AD%A6%E3%81%B3%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E4%BB%A5%E4%B8%8B%E3%81%AE%E5%9B%B3%E3%81%AB%E7%A4%BA%E3%81%99RAG%E3%81%AE%E5%85%A8%E4%BD%93%E5%83%8F%E3%82%92%E3%80%81%E6%AE%B5%E9%9A%8E%E7%9A%84%E3%81%AB%E7%90%86%E8%A7%A3%E3%81%97%E3%81%A6%E3%81%84%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20!%5BRAG%E3%81%AE%E5%85%A8%E4%BD%93%E5%83%8F%5D(.%2Fimgs%2Foverview.png)%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%E5%90%84%E3%83%91%E3%83%BC%E3%83%88%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BB%E3%83%AB%E3%81%AF%E3%81%93%E3%82%8C%E3%82%89%E3%82%92%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E4%BD%BF%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%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%60format_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%82%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%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%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%881%EF%BC%9A%E6%A6%82%E8%A6%81%0A%0A%20%20%20%20RAG%E3%81%AF%E3%80%81%E8%B3%AA%E5%95%8F%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E6%96%87%E6%9B%B8%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6LLM%E3%81%B8%E6%B8%A1%E3%81%99%E6%A7%8B%E6%88%90%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E3%81%BE%E3%81%9A%E5%85%A8%E4%BD%93%E3%81%AE%E6%B5%81%E3%82%8C%E3%82%92%E3%80%81%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%83%BB%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E6%A7%8B%E7%AF%89%E3%83%BB%E5%AE%9F%E8%A1%8C%E3%81%AE3%E6%AE%B5%E9%9A%8E%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%83%91%E3%83%BC%E3%83%882%E4%BB%A5%E9%99%8D%E3%81%A7%E5%90%84%E6%AE%B5%E9%9A%8E%E3%82%92%E8%A9%B3%E3%81%97%E3%81%8F%E8%A6%8B%E3%81%A6%E3%81%84%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%5BRAG%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%5D(https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fuse_cases%2Fquestion_answering%2Fquickstart)%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%23%20%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%20Web%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%B8%E5%88%86%E5%89%B2%E3%81%97%E3%80%81%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%E3%81%B8%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%A8%E5%88%86%E5%89%B2%E3%81%BE%E3%81%A7%E3%82%92%E8%A1%8C%E3%81%84%E3%80%81%E5%88%86%E5%89%B2%E5%BE%8C%E3%81%AE%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E6%95%B0%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%97%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%9ALilian%20Weng%E3%81%AE%E3%83%96%E3%83%AD%E3%82%B0%E8%A8%98%E4%BA%8B%20%5BLLM%20Powered%20Autonomous%20Agents%5D(https%3A%2F%2Flilianweng.github.io%2Fposts%2F2023-06-23-agent%2F)%0A%20%20%20%20-%20%E5%89%8D%E5%87%A6%E7%90%86%EF%BC%9A%60bs4.SoupStrainer%60%20%E3%81%A7HTML%E3%81%AE%E3%81%86%E3%81%A1%20%60post-content%60%20%2F%20%60post-title%60%20%2F%20%60post-header%60%20%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E8%A6%81%E7%B4%A0%E3%81%A0%E3%81%91%E3%82%92%E8%A7%A3%E6%9E%90%E5%AF%BE%E8%B1%A1%E3%81%AB%E3%81%97%E3%80%81%E3%83%8A%E3%83%93%E3%82%B2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%84%E3%83%95%E3%83%83%E3%82%BF%E3%83%BC%E3%82%92%E9%99%A4%E5%A4%96%0A%20%20%20%20-%20%E5%88%86%E5%89%B2%EF%BC%9A%60RecursiveCharacterTextSplitter%60%EF%BC%88**%E6%96%87%E5%AD%97%E6%95%B0**%E5%9F%BA%E6%BA%96%EF%BC%89%E3%81%A7%20%60chunk_size%3D1000%60%E3%80%81%60chunk_overlap%3D200%60%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60overview_chunks%60%20%3D%20%E5%88%86%E5%89%B2%E5%BE%8C%E3%81%AE%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%E6%95%B0%E5%80%A4%E3%81%8C%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%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_()%3A%0A%20%20%20%20%23%23%23%23%20INDEXING%20%23%23%23%23%0A%20%20%20%20overview_loader%20%3D%20WebBaseLoader(%0A%20%20%20%20%20%20%20%20web_paths%3D(%22https%3A%2F%2Flilianweng.github.io%2Fposts%2F2023-06-23-agent%2F%22%2C)%2C%0A%20%20%20%20%20%20%20%20bs_kwargs%3D%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22parse_only%22%3A%20bs4.SoupStrainer(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20class_%3D(%22post-content%22%2C%20%22post-title%22%2C%20%22post-header%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20)%0A%20%20%20%20overview_documents%20%3D%20overview_loader.load()%0A%0A%20%20%20%20overview_splitter%20%3D%20RecursiveCharacterTextSplitter(%0A%20%20%20%20%20%20%20%20chunk_size%3D1000%2C%20chunk_overlap%3D200%0A%20%20%20%20)%0A%20%20%20%20overview_chunks%20%3D%20overview_splitter.split_documents(overview_documents)%0A%20%20%20%20len(overview_chunks)%0A%20%20%20%20return%20(overview_chunks%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%88%86%E5%89%B2%E3%81%97%E3%81%9F%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%80%81%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%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60overview_chunks%60%EF%BC%88%E5%89%8D%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E5%88%86%E5%89%B2%E3%81%97%E3%81%9F%20%60Document%60%20%E3%83%AA%E3%82%B9%E3%83%88%EF%BC%89%0A%20%20%20%20-%20DB%EF%BC%9AChroma%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%80%81%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%8C%E7%B5%82%E3%82%8F%E3%82%8B%E3%81%A8%E6%B6%88%E3%81%88%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60overview_retriever%60%20%3D%20%E6%97%A2%E5%AE%9A%E8%A8%AD%E5%AE%9A%EF%BC%88%E9%A1%9E%E4%BC%BC%E5%BA%A6%E6%A4%9C%E7%B4%A2%E3%83%BB%60k%3D4%60%EF%BC%89%E3%81%AE%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(overview_chunks)%3A%0A%20%20%20%20overview_vectorstore%20%3D%20Chroma.from_documents(%0A%20%20%20%20%20%20%20%20documents%3Doverview_chunks%2C%20embedding%3Dmake_embeddings()%0A%20%20%20%20)%0A%20%20%20%20overview_retriever%20%3D%20overview_vectorstore.as_retriever()%0A%20%20%20%20return%20(overview_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%23%23%23%20%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E6%A7%8B%E7%AF%89%E3%81%A8%E5%AE%9F%E8%A1%8C%0A%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E3%83%BB%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%83%BBLLM%E3%83%BB%E5%87%BA%E5%8A%9B%E8%A7%A3%E6%9E%90%E3%82%92LCEL%E3%81%AE%E3%83%91%E3%82%A4%E3%83%97%E3%81%A7%E3%81%A4%E3%81%AA%E3%81%8E%E3%81%BE%E3%81%99%E3%80%82%60RunnablePassthrough()%60%20%E3%81%AF%E5%85%A5%E5%8A%9B%E3%81%AE%E8%B3%AA%E5%95%8F%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%20%60question%60%20%E3%81%B8%E6%B8%A1%E3%81%99%E5%BD%B9%E5%89%B2%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_(overview_retriever)%3A%0A%20%20%20%20%23%23%23%23%20RETRIEVAL%20and%20GENERATION%20%23%23%23%23%0A%20%20%20%20overview_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%20overview_retriever%20%7C%20format_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%20return%20(overview_chain%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%B5%84%E3%81%BF%E4%B8%8A%E3%81%92%E3%81%9F%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E8%B3%AA%E5%95%8F%E3%82%92%E6%B8%A1%E3%81%99%E3%81%A0%E3%81%91%E3%81%A7%E3%80%81%E6%A4%9C%E7%B4%A2%E3%83%BB%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E6%A7%8B%E7%AF%89%E3%83%BB%E7%94%9F%E6%88%90%E3%83%BB%E6%96%87%E5%AD%97%E5%88%97%E6%8A%BD%E5%87%BA%E3%81%BE%E3%81%A7%E3%81%8C%E4%B8%80%E5%BA%A6%E3%81%AB%E8%B5%B0%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%83%91%E3%83%BC%E3%83%882%E4%BB%A5%E9%99%8D%E3%81%A7%E3%81%AF%E3%80%81%E3%81%93%E3%81%AE%E4%B8%80%E9%80%A3%E3%81%AE%E5%87%A6%E7%90%86%E3%82%92%E5%88%86%E8%A7%A3%E3%81%97%E3%81%A6%E8%A6%8B%E3%81%A6%E3%81%84%E3%81%8D%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_(overview_chain)%3A%0A%20%20%20%20overview_chain.invoke(%22What%20is%20Task%20Decomposition%3F%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%882%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%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%81%AE%E6%96%87%E6%9B%B8%E3%82%92%E5%B0%8F%E3%81%95%E3%81%AA%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%AB%E5%88%86%E5%89%B2%E3%81%97%E3%80%81%E5%90%84%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%E3%81%B8%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E4%BB%A5%E9%99%8D%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%80%81%E3%81%93%E3%81%AE3%E6%AE%B5%E9%9A%8E%E3%82%92%E5%80%8B%E5%88%A5%E3%81%AB%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%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%B5%81%E3%82%8C%5D(.%2Fimgs%2Findexing.png)%0A%0A%20%20%20%20%E3%81%BE%E3%81%9A%E4%BB%95%E7%B5%84%E3%81%BF%E3%82%92%E6%9C%80%E5%B0%8F%E3%81%AE%E4%BE%8B%E3%81%A7%E7%A2%BA%E3%81%8B%E3%82%81%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E8%B3%AA%E5%95%8F%20%60question%60%20%E3%81%A8%E6%96%87%E6%9B%B8%20%60document%60%20%E3%81%AE2%E3%81%A4%E3%81%AE%E7%9F%AD%E3%81%84%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%82%89%E3%81%AF%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%A8%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%AE%E6%AF%94%E8%BC%83%E3%81%AB%E3%81%A0%E3%81%91%E4%BD%BF%E3%81%86%E3%80%81%E8%A8%98%E4%BA%8B%E3%81%A8%E3%81%AF%E7%84%A1%E9%96%A2%E4%BF%82%E3%81%AA%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%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_()%3A%0A%20%20%20%20%23%20Documents%0A%20%20%20%20question%20%3D%20%22What%20kinds%20of%20pets%20do%20I%20like%3F%22%0A%20%20%20%20document%20%3D%20%22My%20favorite%20pet%20is%20a%20cat.%22%0A%20%20%20%20return%20document%2C%20question%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%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%0A%0A%20%20%20%20%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E5%85%A5%E5%8A%9B%E4%B8%8A%E9%99%90%E3%82%84%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AF%E6%96%87%E5%AD%97%E6%95%B0%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%E3%81%A7%E6%B1%BA%E3%81%BE%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%5B%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%E3%82%92%E6%95%B0%E3%81%88%E3%82%8B%E4%BE%8B%5D(https%3A%2F%2Fgithub.com%2Fopenai%2Fopenai-cookbook%2Fblob%2Fmain%2Fexamples%2FHow_to_count_tokens_with_tiktoken.ipynb)%E3%81%A7%E3%81%AF%E3%80%81%E8%8B%B1%E8%AA%9E%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF%5B1%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E7%B4%844%E6%96%87%E5%AD%97%5D(https%3A%2F%2Fhelp.openai.com%2Fen%2Farticles%2F4936856-what-are-tokens-and-how-to-count-them)%E3%81%8C%E5%A4%A7%E3%81%BE%E3%81%8B%E3%81%AA%E7%9B%AE%E5%AE%89%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%20%60num_tokens_from_string()%60%20%E3%81%AF%E3%80%81%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E5%90%8D%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%E3%80%81%E3%81%9D%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%A7%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%EF%BC%88%E6%95%B4%E6%95%B0%EF%BC%89%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60cl100k_base%60%20%E3%81%AFGPT-3.5%EF%BC%8FGPT-4%E7%B3%BB%E3%81%A7%E4%BD%BF%E3%82%8F%E3%82%8C%E3%82%8B%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E5%86%92%E9%A0%AD%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%20%60question%60%20%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%E3%82%92%E6%95%B0%E3%81%88%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_(question)%3A%0A%20%20%20%20def%20num_tokens_from_string(string%3A%20str%2C%20encoding_name%3A%20str)%20-%3E%20int%3A%0A%20%20%20%20%20%20%20%20%22%22%22Returns%20the%20number%20of%20tokens%20in%20a%20text%20string.%22%22%22%0A%20%20%20%20%20%20%20%20encoding%20%3D%20tiktoken.get_encoding(encoding_name)%0A%20%20%20%20%20%20%20%20num_tokens%20%3D%20len(encoding.encode(string))%0A%20%20%20%20%20%20%20%20return%20num_tokens%0A%0A%20%20%20%20num_tokens_from_string(question%2C%20%22cl100k_base%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%23%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%0A%0A%20%20%20%20%5B%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%A2%E3%83%87%E3%83%AB%5D(https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fintegrations%2Ftext_embedding%2Fopenai)%E3%81%AF%E3%80%81%E6%96%87%E6%9B%B8%E3%81%A8%E8%B3%AA%E5%95%8F%E3%82%92%E6%84%8F%E5%91%B3%E3%82%92%E5%8F%8D%E6%98%A0%E3%81%97%E3%81%9F%E6%95%B0%E5%80%A4%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%90%8C%E3%81%98%E6%AC%A1%E5%85%83%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%90%8C%E5%A3%AB%E3%82%92%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%E8%AA%9E%E5%8F%A5%E3%81%8C%E5%AE%8C%E5%85%A8%E4%B8%80%E8%87%B4%E3%81%97%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%A7%E3%82%82%E6%84%8F%E5%91%B3%E3%81%AE%E8%BF%91%E3%81%84%E6%96%87%E6%9B%B8%E3%82%92%E6%8E%A2%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%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%81%E8%B3%AA%E5%95%8F%20%60question%60%20%E3%81%A8%E6%96%87%E6%9B%B8%20%60document%60%20%E3%81%AE%E4%B8%A1%E6%96%B9%E3%82%92%20%60embed_query()%60%20%E3%81%A7%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%80%81%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AE%E6%AC%A1%E5%85%83%E6%95%B0%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%97%A2%E5%AE%9A%E3%81%AE%20%60text-embedding-3-small%60%20%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%AA%E3%82%89%E9%80%9A%E5%B8%B81536%E6%AC%A1%E5%85%83%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%20%60EMBEDDING_MODEL%60%20%E3%81%A7%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E6%AC%A1%E5%85%83%E6%95%B0%E3%82%82%E5%A4%89%E3%82%8F%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_(document%2C%20question)%3A%0A%20%20%20%20embedding_model%20%3D%20make_embeddings()%0A%0A%20%20%20%20query_embedding%20%3D%20embedding_model.embed_query(question)%0A%20%20%20%20document_embedding%20%3D%20embedding_model.embed_query(document)%0A%20%20%20%20len(query_embedding)%0A%20%20%20%20return%20document_embedding%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%20OpenAI%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%A7%E3%81%AF%5B%E3%82%B3%E3%82%B5%E3%82%A4%E3%83%B3%E9%A1%9E%E4%BC%BC%E5%BA%A6%5D(https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Fembeddings%2Ffrequently-asked-questions)%E3%81%8C%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AE%E5%90%91%E3%81%8D%E3%81%8C%E8%BF%91%E3%81%84%E3%81%BB%E3%81%A9%E5%80%A4%E3%81%8C1%E3%81%AB%E8%BF%91%E3%81%A5%E3%81%8D%E3%80%81%E6%84%8F%E5%91%B3%E7%9A%84%E3%81%AA%E9%A1%9E%E4%BC%BC%E5%BA%A6%E3%81%8C%E9%AB%98%E3%81%84%E3%81%A8%E5%88%A4%E6%96%AD%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%20%60cosine_similarity(vec1%2C%20vec2)%60%20%E3%81%AF%E3%80%812%E3%81%A4%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%E3%80%81%E5%86%85%E7%A9%8D%E3%82%92%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AE%E3%83%8E%E3%83%AB%E3%83%A0%E3%81%AE%E7%A9%8D%E3%81%A7%E5%89%B2%E3%81%A3%E3%81%9F%E5%80%A4%EF%BC%88-1%E3%80%9C1%E3%81%AE%E5%AE%9F%E6%95%B0%EF%BC%89%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E9%95%B7%E3%81%95%E3%81%AE%E5%BD%B1%E9%9F%BF%E3%82%92%E9%99%A4%E3%81%84%E3%81%A6%E3%80%8C%E5%90%91%E3%81%8D%E3%80%8D%E3%81%A0%E3%81%91%E3%82%92%E6%AF%94%E3%81%B9%E3%82%8B%E6%8C%87%E6%A8%99%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_(document_embedding%2C%20query_embedding)%3A%0A%20%20%20%20def%20cosine_similarity(vec1%2C%20vec2)%3A%0A%20%20%20%20%20%20%20%20dot_product%20%3D%20np.dot(vec1%2C%20vec2)%0A%20%20%20%20%20%20%20%20norm_vec1%20%3D%20np.linalg.norm(vec1)%0A%20%20%20%20%20%20%20%20norm_vec2%20%3D%20np.linalg.norm(vec2)%0A%20%20%20%20%20%20%20%20return%20dot_product%20%2F%20(norm_vec1%20*%20norm_vec2)%0A%0A%20%20%20%20similarity%20%3D%20cosine_similarity(query_embedding%2C%20document_embedding)%0A%20%20%20%20print(%22Cosine%20Similarity%3A%22%2C%20similarity)%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%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%0A%0A%20%20%20%20%5B%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC%5D(https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fintegrations%2Fdocument_loaders%2F)%E3%81%AF%E3%80%81Web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AA%E3%81%A9%E3%81%AE%E5%A4%96%E9%83%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%80%81%E6%9C%AC%E6%96%87%E3%81%A8%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%8C%81%E3%81%A4%E5%85%B1%E9%80%9A%E3%81%AE%20%60Document%60%20%E5%BD%A2%E5%BC%8F%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%8B%E3%82%89%E3%81%AE%E3%83%91%E3%83%BC%E3%83%882%E3%80%9C4%E3%81%A7%E3%81%AF%E3%80%81%E3%83%91%E3%83%BC%E3%83%881%E3%81%A8%E5%90%8C%E3%81%98Lilian%20Weng%E3%81%AE%E3%83%96%E3%83%AD%E3%82%B0%E8%A8%98%E4%BA%8B%E3%82%92%E3%80%81%E5%90%8C%E3%81%98%20%60SoupStrainer%60%20%E3%81%AE%E7%B5%9E%E3%82%8A%E8%BE%BC%E3%81%BF%EF%BC%88%60post-content%60%20%2F%20%60post-title%60%20%2F%20%60post-header%60%EF%BC%89%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%E5%87%BA%E5%8A%9B%E3%81%AF1%E4%BB%B6%E7%9B%AE%E3%81%AE%20%60Document%60%20%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E3%80%81%E5%8F%96%E5%BE%97%E5%85%83URL%E3%81%A8%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%8C%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%84%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%20%23%23%23%23%20INDEXING%20%23%23%23%23%0A%20%20%20%20blog_loader%20%3D%20WebBaseLoader(%0A%20%20%20%20%20%20%20%20web_paths%3D(%22https%3A%2F%2Flilianweng.github.io%2Fposts%2F2023-06-23-agent%2F%22%2C)%2C%0A%20%20%20%20%20%20%20%20bs_kwargs%3D%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22parse_only%22%3A%20bs4.SoupStrainer(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20class_%3D(%22post-content%22%2C%20%22post-title%22%2C%20%22post-header%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20)%0A%20%20%20%20%23%20Load%20blog%0A%20%20%20%20blog_documents%20%3D%20blog_loader.load()%0A%20%20%20%20blog_documents%5B0%5D.metadata%0A%20%20%20%20return%20(blog_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%23%23%23%20%E5%88%86%E5%89%B2%0A%0A%20%20%20%20%5B%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%88%86%E5%89%B2%5D(https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fmodules%2Fdata_connection%2Fdocument_transformers%2Frecursive_text_splitter)%E3%81%A7%E3%81%AF%E3%80%81%E6%A4%9C%E7%B4%A2%E3%81%A8%E3%83%A2%E3%83%87%E3%83%AB%E5%85%A5%E5%8A%9B%E3%81%AB%E9%81%A9%E3%81%97%E3%81%9F%E5%A4%A7%E3%81%8D%E3%81%95%E3%81%B8%E6%96%87%E6%9B%B8%E3%82%92%E5%88%86%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%3E%20%E3%81%93%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%B9%E3%83%97%E3%83%AA%E3%83%83%E3%82%BF%E3%83%BC%E3%81%AF%E3%80%81%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AB%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87%E5%AD%97%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%8C%E5%8D%81%E5%88%86%E3%81%AB%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%BE%E3%81%A7%E3%80%81%E3%81%9D%E3%81%AE%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87%E5%AD%97%E3%82%92%E9%A0%86%E7%95%AA%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%A6%E5%88%86%E5%89%B2%E3%82%92%E8%A9%A6%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AF%20%60%5B'%5Cn%5Cn'%2C%20'%5Cn'%2C%20'%20'%2C%20''%5D%60%20%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81%E6%84%8F%E5%91%B3%E7%9A%84%E3%81%AA%E9%96%A2%E9%80%A3%E3%81%8C%E5%BC%B7%E3%81%84%E3%81%A8%E8%80%83%E3%81%88%E3%82%89%E3%82%8C%E3%82%8B%E6%AE%B5%E8%90%BD%E3%80%81%E6%96%87%E3%80%81%E5%8D%98%E8%AA%9E%E3%82%92%E3%80%81%E5%8F%AF%E8%83%BD%E3%81%AA%E9%99%90%E3%82%8A%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E3%81%BE%E3%81%BE%E5%88%86%E5%89%B2%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%E3%83%91%E3%83%BC%E3%83%881%E3%81%A8%E9%81%95%E3%81%84%20%60from_tiktoken_encoder()%60%20%E3%82%92%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%80%81%60chunk_size%60%20%2F%20%60chunk_overlap%60%20%E3%81%AF**%E6%96%87%E5%AD%97%E6%95%B0%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0**%E3%81%A7%E8%A7%A3%E9%87%88%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF300%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%94%E3%81%A8%E3%80%8150%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E9%87%8D%E3%81%AA%E3%82%8A%E3%82%92%E6%8C%81%E3%81%9F%E3%81%9B%E3%81%A6%E5%88%86%E5%89%B2%E3%81%97%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E6%95%B0%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%83%91%E3%83%BC%E3%83%881%E3%81%AE1000%E6%96%87%E5%AD%97%EF%BC%8F200%E6%96%87%E5%AD%97%E3%82%88%E3%82%8A%E7%B4%B0%E3%81%8B%E3%81%84%E5%8D%98%E4%BD%8D%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_(blog_documents)%3A%0A%20%20%20%20text_splitter%20%3D%20RecursiveCharacterTextSplitter.from_tiktoken_encoder(%0A%20%20%20%20%20%20%20%20chunk_size%3D300%2C%20chunk_overlap%3D50%0A%20%20%20%20)%0A%20%20%20%20document_chunks%20%3D%20text_splitter.split_documents(blog_documents)%0A%20%20%20%20len(document_chunks)%0A%20%20%20%20return%20(document_chunks%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%20%E4%BF%9D%E5%AD%98%0A%0A%20%20%20%20%5B%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%5D(https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fintegrations%2Fvectorstores%2F)%E3%81%AF%E3%80%81%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E5%85%83%E3%81%AE%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%92%E5%AF%BE%E5%BF%9C%E4%BB%98%E3%81%91%E3%81%A6%E4%BF%9D%E5%AD%98%E3%81%97%E3%80%81%E8%B3%AA%E5%95%8F%E3%81%AB%E8%BF%91%E3%81%84%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%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%9A%60document_chunks%60%EF%BC%88300%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8D%98%E4%BD%8D%E3%81%A7%E5%88%86%E5%89%B2%E3%81%97%E3%81%9F%20%60Document%60%20%E3%83%AA%E3%82%B9%E3%83%88%EF%BC%89%0A%20%20%20%20-%20DB%EF%BC%9AChroma%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%60vectorstore%60%E3%80%82%E3%83%91%E3%83%BC%E3%83%883%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%81%A8%E3%83%91%E3%83%BC%E3%83%884%E3%81%AE%E7%94%9F%E6%88%90%E3%81%AF%E3%80%81%E3%81%93%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E5%85%B1%E6%9C%89%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%0Adef%20_(document_chunks)%3A%0A%20%20%20%20%23%20Index%0A%20%20%20%20vectorstore%20%3D%20Chroma.from_documents(%0A%20%20%20%20%20%20%20%20documents%3Ddocument_chunks%2C%20embedding%3Dmake_embeddings()%0A%20%20%20%20)%0A%20%20%20%20return%20(vectorstore%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%20%E3%83%91%E3%83%BC%E3%83%883%EF%BC%9A%E6%A4%9C%E7%B4%A2%0A%0A%20%20%20%20%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AF%E8%B3%AA%E5%95%8F%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%80%81%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%B9%E3%83%88%E3%82%A2%E3%81%8B%E3%82%89%E9%A1%9E%E4%BC%BC%E5%BA%A6%E3%81%AE%E9%AB%98%E3%81%84%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%20%60k%3D1%60%20%E3%81%A8%E3%81%97%E3%80%81%E6%9C%80%E3%82%82%E8%BF%91%E3%81%841%E4%BB%B6%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E5%86%85%E5%AE%B9%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_(vectorstore)%3A%0A%20%20%20%20retriever%20%3D%20vectorstore.as_retriever(search_kwargs%3D%7B%22k%22%3A%201%7D)%0A%20%20%20%20return%20(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%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%E3%81%B8%E6%B8%A1%E3%81%97%E3%81%A6%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%AC%A1%E3%81%AE2%E3%82%BB%E3%83%AB%E3%81%AF%E3%80%81%E6%A4%9C%E7%B4%A2%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%81%A8%E3%80%81%E8%BF%94%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%20%60Document%60%20%E3%81%AE%E4%BB%B6%E6%95%B0%E3%81%AE%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%99%E3%80%82%60k%3D1%60%20%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E4%BB%B6%E6%95%B0%E3%81%AF1%E3%81%AB%E3%81%AA%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_(retriever)%3A%0A%20%20%20%20retrieved_documents%20%3D%20retriever.invoke(%22What%20is%20Task%20Decomposition%3F%22)%0A%20%20%20%20return%20(retrieved_documents%2C)%0A%0A%0A%40app.cell%0Adef%20_(retrieved_documents)%3A%0A%20%20%20%20len(retrieved_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%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E8%B3%AA%E5%95%8F%E3%81%A8%E8%AA%9E%E5%8F%A5%E3%81%8C%E4%B8%80%E8%87%B4%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E3%80%81%E6%84%8F%E5%91%B3%E7%9A%84%E3%81%AB%E8%BF%91%E3%81%84%E7%AE%87%E6%89%80%E3%81%8C%E8%BF%94%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%82%8F%E3%81%8B%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_(retrieved_documents)%3A%0A%20%20%20%20retrieved_documents%5B0%5D.page_content%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%884%EF%BC%9A%E7%94%9F%E6%88%90%0A%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%9F%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%A8%E8%B3%AA%E5%95%8F%E3%82%92%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%B8%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%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%81%A7%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%E3%81%BE%E3%81%9A%E5%90%84%E8%A6%81%E7%B4%A0%E3%82%92%E6%89%8B%E5%8B%95%E3%81%A7%E6%8E%A5%E7%B6%9A%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E5%BE%8C%E3%81%AB%E6%A4%9C%E7%B4%A2%E3%81%8B%E3%82%89%E5%87%BA%E5%8A%9B%E8%A7%A3%E6%9E%90%E3%81%BE%E3%81%A7%E3%82%92%E4%B8%80%E3%81%A4%E3%81%AERAG%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%B8%E3%81%BE%E3%81%A8%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20!%5B%E5%9B%9E%E7%AD%94%E7%94%9F%E6%88%90%E3%81%AE%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2Fgeneration.png)%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%E3%81%BE%E3%81%9A%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AE%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%60%7Bcontext%7D%60%20%E3%81%AB%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%9F%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%80%81%60%7Bquestion%7D%60%20%E3%81%AB%E8%B3%AA%E5%95%8F%E3%81%8C%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%80%8C%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E3%81%BF%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%84%E3%81%A6%E7%AD%94%E3%81%88%E3%82%8B%E3%80%8D%E3%81%A8%E6%8C%87%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BA%8B%E5%89%8D%E7%9F%A5%E8%AD%98%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E6%A0%B9%E6%8B%A0%E3%81%AB%E3%81%95%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%E3%82%BB%E3%83%AB%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%AF%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%AE%E8%A1%A8%E7%A4%BA%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_()%3A%0A%20%20%20%20generation_template%20%3D%20%22Answer%20the%20question%20based%20only%20on%20the%20following%20context%3A%5Cn%7Bcontext%7D%5Cn%5CnQuestion%3A%20%7Bquestion%7D%5Cn%22%0A%20%20%20%20generation_prompt%20%3D%20ChatPromptTemplate.from_template(generation_template)%0A%20%20%20%20%23%20Prompt%0A%20%20%20%20generation_prompt%0A%20%20%20%20return%20(generation_prompt%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%B6%9A%E3%81%8F3%E3%81%A4%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%80%81%E7%94%9F%E6%88%90%E3%82%92%E6%89%8B%E5%8B%95%E3%81%A7%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%201.%20%60chat_model%60%EF%BC%9A%60make_chat_model()%60%20%E3%81%A7%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B%0A%20%20%20%202.%20%60generation_chain%60%EF%BC%9A%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A8%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%20%60%7C%60%20%E3%81%A7%E3%81%A4%E3%81%AA%E3%81%90%0A%20%20%20%203.%20%E5%AE%9F%E8%A1%8C%EF%BC%9A%E3%83%91%E3%83%BC%E3%83%883%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%20%60retrieved_documents%60%20%E3%82%92%20%60format_docs%60%20%E3%81%A71%E3%81%A4%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%81%AB%E3%81%97%E3%80%81%60context%60%20%E3%81%A8%E3%81%97%E3%81%A6%E6%B8%A1%E3%81%99%0A%0A%20%20%20%20%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%AF%20%60StrOutputParser%60%20%E3%82%92%E9%80%9A%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E6%96%87%E5%AD%97%E5%88%97%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%20%60AIMessage%60%20%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%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_()%3A%0A%20%20%20%20%23%20LLM%0A%20%20%20%20chat_model%20%3D%20make_chat_model()%0A%20%20%20%20return%20(chat_model%2C)%0A%0A%0A%40app.cell%0Adef%20_(chat_model%2C%20generation_prompt)%3A%0A%20%20%20%20%23%20Chain%0A%20%20%20%20generation_chain%20%3D%20generation_prompt%20%7C%20chat_model%0A%20%20%20%20return%20(generation_chain%2C)%0A%0A%0A%40app.cell%0Adef%20_(generation_chain%2C%20retrieved_documents)%3A%0A%20%20%20%20%23%20Run%0A%20%20%20%20generation_chain.invoke(%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%20format_docs(retrieved_documents)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22question%22%3A%20%22What%20is%20Task%20Decomposition%3F%22%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%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%E5%86%8D%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AARAG%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%0A%0A%20%20%20%20%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%E3%81%AF%20%60hub.pull(%22rlm%2Frag-prompt%22)%60%20%E3%81%A7LangChain%20Hub%E3%81%8B%E3%82%89%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%80%82%E3%81%93%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%A7%E3%81%AF%E5%A4%96%E9%83%A8Hub%E3%81%B8%E4%BE%9D%E5%AD%98%E3%81%9B%E3%81%9A%E3%80%81%E3%81%8B%E3%81%A4%E6%96%87%E9%9D%A2%E3%81%8C%E8%AA%AD%E3%82%81%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%80%81%E5%90%8C%E3%81%98%E5%86%85%E5%AE%B9%E3%82%92%20%60load_rag_prompt()%60%20%E3%81%A8%E3%81%97%E3%81%A6%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%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AF%E3%80%81%E7%9B%B4%E5%89%8D%E3%81%AE%E3%83%91%E3%83%BC%E3%83%884%E3%81%A7%E6%89%8B%E6%9B%B8%E3%81%8D%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%82%88%E3%82%8A%E6%8C%87%E7%A4%BA%E3%81%8C%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%A7%E3%81%99%E3%80%82system%E5%81%B4%E3%81%A7%E3%80%8C%E6%96%87%E8%84%88%E3%81%8B%E3%82%89%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E7%AD%94%E3%81%88%E3%82%8B%E3%80%8D%E3%80%8C3%E6%96%87%E4%BB%A5%E5%86%85%E3%81%A7%E7%B0%A1%E6%BD%94%E3%81%AB%E3%80%8D%E3%81%A8%E5%88%B6%E7%B4%84%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%E5%9B%9E%E7%AD%94%E3%81%AE%E9%95%B7%E3%81%95%E3%82%84%E6%96%AD%E3%82%8A%E6%96%B9%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE2%E3%82%BB%E3%83%AB%E3%81%AF%E3%80%81%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E5%87%A6%E7%90%86%E3%81%A8%E3%80%81%E3%81%9D%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E5%87%A6%E7%90%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_()%3A%0A%20%20%20%20reusable_rag_prompt%20%3D%20load_rag_prompt()%0A%20%20%20%20return%20(reusable_rag_prompt%2C)%0A%0A%0A%40app.cell%0Adef%20_(reusable_rag_prompt)%3A%0A%20%20%20%20reusable_rag_prompt%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%E6%A4%9C%E7%B4%A2%E3%81%A8%E7%94%9F%E6%88%90%E3%81%AE%E7%B5%B1%E5%90%88%0A%0A%20%20%20%20%5BRAG%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%5D(https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fexpression_language%2Fget_started%23rag-search-example)%E3%81%A7%E3%81%AF%E3%80%81%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%E3%81%A8%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%B8%E6%B8%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%81%AF%20%60format_docs%60%20%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%80%81%E6%9C%80%E5%BE%8C%E3%81%AB%20%60StrOutputParser%60%20%E3%81%A7%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E5%BF%9C%E7%AD%94%E3%81%8B%E3%82%89%E6%96%87%E5%AD%97%E5%88%97%E3%81%A0%E3%81%91%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_(chat_model%2C%20retriever%2C%20reusable_rag_prompt)%3A%0A%20%20%20%20rag_chain%20%3D%20(%0A%20%20%20%20%20%20%20%20%7B%22context%22%3A%20retriever%20%7C%20format_docs%2C%20%22question%22%3A%20RunnablePassthrough()%7D%0A%20%20%20%20%20%20%20%20%7C%20reusable_rag_prompt%0A%20%20%20%20%20%20%20%20%7C%20chat_model%0A%20%20%20%20%20%20%20%20%7C%20StrOutputParser()%0A%20%20%20%20)%0A%20%20%20%20rag_chain.invoke(%22What%20is%20Task%20Decomposition%3F%22)%0A%20%20%20%20return%20(rag_chain%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%20%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%0A%0A%20%20%20%20%E5%85%83%E3%83%8E%E3%83%BC%E3%83%88%E3%81%AFLangSmith%E3%81%A7%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%AE%E5%AE%9F%E8%A1%8C%E5%86%85%E5%AE%B9%E3%82%92%E8%BF%BD%E8%B7%A1%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%93%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%A7%E3%81%AF%0A%20%20%20%20%E5%A4%96%E9%83%A8%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%80%81LangChain%E6%A8%99%E6%BA%96%E3%81%AE%20%60ConsoleCallbackHandler%60%20%E3%81%A7%0A%20%20%20%20%E5%AE%9F%E9%9A%9B%E3%81%AB%E9%80%81%E3%82%89%E3%82%8C%E3%81%9F%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A8%E5%BF%9C%E7%AD%94%E3%82%92%E3%81%9D%E3%81%AE%E5%A0%B4%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E4%B8%8B%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%AB%E3%80%81%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%B8%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%81%8C%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%9F**%E5%AE%9F%E9%9A%9B%E3%81%AE%E6%96%87%E9%9D%A2**%E3%81%8C%E7%8F%BE%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E5%85%A8%E4%BD%93%E3%82%92%E5%B8%B8%E3%81%AB%E8%A9%B3%E7%B4%B0%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%20%60set_debug(True)%60%20%E3%82%82%E4%BD%BF%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%8E%A1%E7%94%A8%E7%90%86%E7%94%B1%E3%81%A8%E3%80%81Langfuse%E7%AD%89%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E6%A4%9C%E8%A8%8E%E3%81%AF%20%60docs%2Fobservability.md%60%20%E3%81%AB%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_(rag_chain)%3A%0A%20%20%20%20rag_chain.invoke(%0A%20%20%20%20%20%20%20%20%22What%20is%20Task%20Decomposition%3F%22%2C%0A%20%20%20%20%20%20%20%20config%3D%7B%22callbacks%22%3A%20%5BConsoleCallbackHandler()%5D%7D%2C%0A%20%20%20%20)%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
aa1490ca96488badeeac95ba45339eb9