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%20from%20operator%20import%20itemgetter%0A%0A%20%20%20%20import%20bs4%0A%20%20%20%20import%20marimo%20as%20mo%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.load%20import%20dumps%2C%20loads%0A%20%20%20%20from%20langchain_core.output_parsers%20import%20StrOutputParser%0A%20%20%20%20from%20langchain_core.prompts%20import%20(%0A%20%20%20%20%20%20%20%20ChatPromptTemplate%2C%0A%20%20%20%20%20%20%20%20FewShotChatMessagePromptTemplate%2C%0A%20%20%20%20)%0A%20%20%20%20from%20langchain_core.runnables%20import%20RunnableLambda%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%20split_queries(text%3A%20str)%20-%3E%20list%5Bstr%5D%3A%0A%20%20%20%20%20%20%20%20%22%22%22Split%20generated%20queries%20into%20lines%2C%20dropping%20blank%20ones.%0A%0A%20%20%20%20%20%20%20%20The%20model%20often%20separates%20queries%20with%20blank%20lines.%20Without%20this%0A%20%20%20%20%20%20%20%20filtering%20the%20empty%20strings%20reach%20the%20embedding%20API%2C%20which%20rejects%0A%20%20%20%20%20%20%20%20them%20with%20HTTP%20400%20(%60expected%20string%20to%20have%20%3E%3D1%20characters%60).%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20return%20%5Bline.strip()%20for%20line%20in%20text.split(%22%5Cn%22)%20if%20line.strip()%5D%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%E3%82%AF%E3%82%A8%E3%83%AA%E5%A4%89%E6%8F%9B%0A%0A%20%20%20%20%E3%82%AF%E3%82%A8%E3%83%AA%E5%A4%89%E6%8F%9B%E3%81%A8%E3%81%AF%E3%80%81%E6%A4%9C%E7%B4%A2%E3%81%AB%E9%81%A9%E3%81%97%E3%81%9F%E5%BD%A2%E3%81%B8%E8%B3%AA%E5%95%8F%E3%82%92%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%9F%E3%82%8A%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%9F%E3%82%8A%E3%81%99%E3%82%8B%E4%B8%80%E9%80%A3%E3%81%AE%E6%89%8B%E6%B3%95%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20!%5B%E3%82%AF%E3%82%A8%E3%83%AA%E5%A4%89%E6%8F%9B%E3%81%AE%E6%A6%82%E8%A6%81%5D(.%2Fimgs%2Fquery_overview.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%E3%83%91%E3%83%BC%E3%83%885%E3%80%9C9%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%E3%82%84%E3%82%AF%E3%82%A8%E3%83%AA%E5%A4%89%E6%8F%9B%E3%81%AB%E4%BD%BF%E3%81%86%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%60split_queries(text)%60%EF%BC%9ALLM%E3%81%8C%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E8%A4%87%E6%95%B0%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E6%94%B9%E8%A1%8C%E3%81%A7%E5%88%86%E5%89%B2%E3%81%97%E3%80%81%E5%89%8D%E5%BE%8C%E3%81%AE%E7%A9%BA%E7%99%BD%E3%81%A8%E7%A9%BA%E8%A1%8C%E3%82%92%E9%99%A4%E3%81%84%E3%81%9F%20%60list%5Bstr%5D%60%20%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E7%A9%BA%E8%A1%8C%E3%82%92%E9%99%A4%E3%81%8B%E3%81%AA%E3%81%84%E3%81%A8%E7%A9%BA%E6%96%87%E5%AD%97%E5%88%97%E3%81%8C%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BFAPI%E3%81%B8%E6%B8%A1%E3%82%8A%E3%80%81HTTP%20400%EF%BC%88%60expected%20string%20to%20have%20%3E%3D1%20characters%60%EF%BC%89%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%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%885%EF%BC%9AMulti%20Query%0A%0A%20%20%20%20%E4%B8%80%E3%81%A4%E3%81%AE%E8%B3%AA%E5%95%8F%E3%82%92%E7%95%B0%E3%81%AA%E3%82%8B%E8%A6%B3%E7%82%B9%E3%81%AE%E8%A4%87%E6%95%B0%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%B8%E8%A8%80%E3%81%84%E6%8F%9B%E3%81%88%E3%80%81%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AE%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E9%87%8D%E8%A4%87%E6%8E%92%E9%99%A4%E3%81%97%E3%81%A6%E7%B5%B1%E5%90%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%8D%98%E4%B8%80%E3%81%AE%E8%A1%A8%E7%8F%BE%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AF%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E9%96%A2%E9%80%A3%E6%96%87%E6%9B%B8%E3%82%92%E8%A3%9C%E3%81%86%E3%81%93%E3%81%A8%E3%81%8C%E7%9B%AE%E7%9A%84%E3%81%A7%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!%5BMulti%20Query%E3%81%AE%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2Fmulti_query.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%20*%20https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fmodules%2Fdata_connection%2Fretrievers%2FMultiQueryRetriever%0A%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%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%93%E3%81%93%E3%81%8B%E3%82%893%E3%81%A4%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BB%E3%83%AB%E3%81%A7%E3%80%81%E3%83%91%E3%83%BC%E3%83%885%E3%80%9C9%E3%81%8C%E5%85%B1%E6%9C%89%E3%81%99%E3%82%8B%E5%8D%98%E4%B8%80%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%BE%E3%81%9A%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81HTML%E3%81%AE%E3%81%86%E3%81%A1%E6%9C%AC%E6%96%87%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%83%BB%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%81%AB%E9%96%A2%E4%BF%82%E3%81%99%E3%82%8B%E8%A6%81%E7%B4%A0%E3%81%A0%E3%81%91%E3%82%92%E6%8A%BD%E5%87%BA%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%A7%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%E3%81%BF%E3%82%92%E8%A7%A3%E6%9E%90%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%9A%E3%81%93%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%81%BE%E3%81%A0%E4%BD%9C%E6%88%90%E3%81%9B%E3%81%9A%E3%80%81%E5%BE%8C%E7%B6%9A%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BB%E3%83%AB%E3%81%A7%E5%88%86%E5%89%B2%E3%81%97%E3%81%A6Chroma%E3%81%B8%E7%99%BB%E9%8C%B2%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60blog_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%E6%95%B0%E5%80%A4%E3%81%AF1%E4%BB%B6%E7%9B%AE%E3%81%AE%E6%9C%AC%E6%96%87%E6%96%87%E5%AD%97%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%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%20blog_documents%20%3D%20blog_loader.load()%0A%20%20%20%20len(blog_documents%5B0%5D.page_content)%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%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A0%E8%A8%98%E4%BA%8B%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%82%84%E3%81%99%E3%81%84%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AE%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%81%BE%E3%81%99%E3%80%82%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%E3%81%A8%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%0A%0A%20%20%20%20-%20%E3%83%87%E3%83%BC%E3%82%BF%EF%BC%9A%60blog_documents%60%EF%BC%88%E4%B8%8A%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A0Lilian%20Weng%E3%81%AE%E8%A8%98%E4%BA%8B%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%3D300%60%2C%20%60chunk_overlap%3D50%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-%20DB%EF%BC%9A%E3%81%93%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%81%BE%E3%81%A0%E4%BD%9C%E6%88%90%E3%81%9B%E3%81%9A%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%E3%82%92%E6%AC%A1%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BB%E3%83%AB%E3%81%A7Chroma%E3%81%B8%E7%99%BB%E9%8C%B2%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60document_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%AF%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_(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%E5%88%86%E5%89%B2%E6%B8%88%E3%81%BF%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%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%80%81Chroma%E3%81%AE%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%A6%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%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%80%81%E3%81%93%E3%81%AEChroma%E3%81%AF%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%A0%E3%81%91%E4%BD%BF%E3%81%86%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%A2%E3%83%AADB%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%60document_chunks%60%EF%BC%88300%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%9F%BA%E6%BA%96%E3%81%A7%E5%88%86%E5%89%B2%E3%81%97%E3%81%9F%E8%A8%98%E4%BA%8B%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%EF%BC%89%0A%20%20%20%20-%20%E5%89%8D%E5%87%A6%E7%90%86%EF%BC%9A%60make_embeddings()%60%20%E3%81%A7%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%BE%E3%81%99%0A%20%20%20%20-%20DB%EF%BC%9AChroma%E3%80%82%60persist_directory%60%20%E3%81%AA%E3%81%97%E3%81%AE**%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%A2%E3%83%AA**%E3%81%A7%E3%80%81%E3%83%91%E3%83%BC%E3%83%885%E3%80%9C9%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%81%93%E3%81%AE%E5%8D%98%E4%B8%80%E3%81%AE%20%60retriever%60%20%E3%82%92%E5%85%B1%E6%9C%89%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60retriever%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_(document_chunks)%3A%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%20retriever%20%3D%20vectorstore.as_retriever()%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%23%23%23%20%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%0A%0A%20%20%20%20LLM%E3%81%AB5%E7%A8%AE%E9%A1%9E%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E6%94%B9%E8%A1%8C%E5%8C%BA%E5%88%87%E3%82%8A%E3%81%A7%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E6%8C%87%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A8%E3%82%AF%E3%82%A8%E3%83%AA%E7%94%9F%E6%88%90%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8A%E3%80%81%60StrOutputParser%60%20%E3%81%A7%E6%96%87%E5%AD%97%E5%88%97%E5%8C%96%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81%60split_queries%60%20%E3%81%A7%20%60list%5Bstr%5D%60%20%E3%81%AB%E5%A4%89%E6%8F%9B%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%20%23%20Multi%20Query%3A%20Different%20Perspectives%0A%20%20%20%20multi_query_template%20%3D%20%22%22%22You%20are%20an%20AI%20language%20model%20assistant.%20Your%20task%20is%20to%20generate%20five%0A%20%20%20%20different%20versions%20of%20the%20given%20user%20question%20to%20retrieve%20relevant%20documents%20from%20a%20vector%0A%20%20%20%20database.%20By%20generating%20multiple%20perspectives%20on%20the%20user%20question%2C%20your%20goal%20is%20to%20help%0A%20%20%20%20the%20user%20overcome%20some%20of%20the%20limitations%20of%20the%20distance-based%20similarity%20search.%0A%20%20%20%20Provide%20these%20alternative%20questions%20separated%20by%20newlines.%20Original%20question%3A%20%7Bquestion%7D%22%22%22%0A%20%20%20%20multi_query_prompt%20%3D%20ChatPromptTemplate.from_template(multi_query_template)%0A%0A%20%20%20%20multi_query_generator%20%3D%20(%0A%20%20%20%20%20%20%20%20multi_query_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%20%20%20%20%7C%20split_queries%0A%20%20%20%20)%0A%20%20%20%20return%20(multi_query_generator%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%83%91%E3%83%BC%E3%83%885%E3%81%A8%E3%83%91%E3%83%BC%E3%83%886%E3%81%A7%E4%BD%BF%E3%81%84%E5%9B%9E%E3%81%99%E5%85%B1%E9%80%9A%E3%81%AE%E8%A9%95%E4%BE%A1%E8%B3%AA%E5%95%8F%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E8%B3%AA%E5%95%8F%E3%81%AF%20%60What%20is%20task%20decomposition%20for%20LLM%20agents%3F%60%20%E3%81%A7%E3%80%81LLM%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E5%88%86%E8%A7%A3%E3%82%92%E6%A4%9C%E7%B4%A2%E3%83%BB%E5%9B%9E%E7%AD%94%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%8B%E3%82%92%E8%A6%8B%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%20retrieval_question%20%3D%20%22What%20is%20task%20decomposition%20for%20LLM%20agents%3F%22%0A%20%20%20%20return%20(retrieval_question%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%AE%9F%E9%9A%9B%E3%81%AB%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8B%E8%A8%80%E3%81%84%E5%9B%9E%E3%81%97%E3%81%B8%E5%B1%95%E9%96%8B%E3%81%95%E3%82%8C%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_(multi_query_generator%2C%20retrieval_question)%3A%0A%20%20%20%20generated_multi_queries%20%3D%20multi_query_generator.invoke(%0A%20%20%20%20%20%20%20%20%7B%22question%22%3A%20retrieval_question%7D%0A%20%20%20%20)%0A%20%20%20%20generated_multi_queries%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%90%84%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%9F%E7%B5%90%E6%9E%9C%E3%82%92%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%82%AF%E3%82%A8%E3%83%AA%E9%96%93%E3%81%A7%E5%90%8C%E3%81%98%E6%96%87%E6%9B%B8%E3%81%8C%E9%87%8D%E8%A4%87%E3%81%97%E3%81%A6%E5%8F%96%E5%BE%97%E3%81%95%E3%82%8C%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E8%87%AA%E4%BD%9C%E9%96%A2%E6%95%B0%20%60get_unique_union%60%20%E3%81%A7%E9%87%8D%E8%A4%87%E3%82%92%E9%99%A4%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%60documents%60%20%3D%20%E8%A4%87%E6%95%B0%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AE%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E6%8C%81%E3%81%A4%20%60list%5Blist%5D%60%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%E5%90%84%20%60Document%60%20%E3%82%92%20%60dumps%60%20%E3%81%A7%E6%96%87%E5%AD%97%E5%88%97%E5%8C%96%E3%81%97%E3%80%81%60set%60%20%E3%81%A7%E9%87%8D%E8%A4%87%E3%82%92%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%84%E3%81%A6%E3%81%8B%E3%82%89%20%60loads%60%20%E3%81%A7%20%60Document%60%20%E3%81%B8%E6%88%BB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60Document%60%20%E3%81%AF%E7%9B%B4%E6%8E%A5%20%60set%60%20%E3%81%AB%E5%85%A5%E3%82%8C%E3%81%A6%E9%87%8D%E8%A4%87%E5%88%A4%E5%AE%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E6%96%87%E5%AD%97%E5%88%97%E5%8C%96%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%E9%87%8D%E8%A4%87%E3%82%92%E9%99%A4%E3%81%84%E3%81%9F%20%60Document%60%20%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%80%82%60multi_query_retrieval_chain%60%20%E3%81%AF%E3%80%815%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E7%94%9F%E6%88%90%E6%8C%87%E7%A4%BA%E3%80%81%60retriever.map()%60%20%E3%81%AB%E3%82%88%E3%82%8B%E5%90%84%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A7%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%80%81%E9%87%8D%E8%A4%87%E6%8E%92%E9%99%A4%E3%81%BE%E3%81%A7%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%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_(multi_query_generator%2C%20retriever)%3A%0A%20%20%20%20def%20get_unique_union(documents%3A%20list%5Blist%5D)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Return%20unique%20documents%20from%20multiple%20retrieval%20result%20lists.%22%22%22%0A%20%20%20%20%20%20%20%20flattened_docs%20%3D%20%5Bdumps(doc)%20for%20sublist%20in%20documents%20for%20doc%20in%20sublist%5D%0A%20%20%20%20%20%20%20%20unique_docs%20%3D%20list(set(flattened_docs))%0A%20%20%20%20%20%20%20%20return%20%5Bloads(doc)%20for%20doc%20in%20unique_docs%5D%0A%0A%20%20%20%20multi_query_retrieval_chain%20%3D%20(%0A%20%20%20%20%20%20%20%20multi_query_generator%20%7C%20retriever.map()%20%7C%20get_unique_union%0A%20%20%20%20)%0A%20%20%20%20return%20(multi_query_retrieval_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%E5%85%B1%E9%80%9A%E3%81%AE%E8%A9%95%E4%BE%A1%E8%B3%AA%E5%95%8F%E3%82%92%20%60multi_query_retrieval_chain%60%20%E3%81%AB%E6%B8%A1%E3%81%97%E3%80%815%E3%82%AF%E3%82%A8%E3%83%AA%E5%88%86%E3%81%AE%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E9%87%8D%E8%A4%87%E6%8E%92%E9%99%A4%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AE%E4%BB%B6%E6%95%B0%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E6%95%B0%E5%80%A4%E3%81%AF%E3%80%81%E6%9C%80%E7%B5%82%E5%9B%9E%E7%AD%94%E3%81%AB%E6%B8%A1%E3%81%99%E5%80%99%E8%A3%9C%E6%96%87%E6%9B%B8%E3%81%AE%E6%95%B0%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_(multi_query_retrieval_chain%2C%20retrieval_question)%3A%0A%20%20%20%20multi_query_documents%20%3D%20multi_query_retrieval_chain.invoke(%0A%20%20%20%20%20%20%20%20%7B%22question%22%3A%20retrieval_question%7D%0A%20%20%20%20)%0A%20%20%20%20len(multi_query_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%E7%B5%B1%E5%90%88%E3%81%97%E3%81%9F%E6%96%87%E6%9B%B8%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%A6%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AA%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%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(multi_query_retrieval_chain%2C%20retrieval_question)%3A%0A%20%20%20%20answer_prompt%20%3D%20load_rag_prompt()%0A%20%20%20%20multi_query_answer_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%20multi_query_retrieval_chain%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22question%22%3A%20itemgetter(%22question%22)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7C%20answer_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%20multi_query_answer_chain.invoke(%7B%22question%22%3A%20retrieval_question%7D)%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%886%EF%BC%9ARAG-Fusion%0A%0A%20%20%20%20RAG-Fusion%E3%82%82%E8%A4%87%E6%95%B0%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E7%B5%90%E6%9E%9C%E3%82%92%E5%8D%98%E7%B4%94%E3%81%AB%E7%B5%90%E5%90%88%E3%81%9B%E3%81%9A%E3%80%81%E5%90%84%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%81%A7%E4%B8%8A%E4%BD%8D%E3%81%AB%E7%8F%BE%E3%82%8C%E3%82%8B%E6%96%87%E6%9B%B8%E3%81%B8%E9%AB%98%E3%81%84%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E4%B8%8E%E3%81%88%E3%82%8BReciprocal%20Rank%20Fusion%EF%BC%88RRF%EF%BC%89%E3%81%A7%E5%86%8D%E9%A0%86%E4%BD%8D%E4%BB%98%E3%81%91%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%A4%9C%E7%B4%A2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%94%E3%81%A8%E3%81%AE%E7%94%9F%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E6%AF%94%E8%BC%83%E3%81%9B%E3%81%9A%E3%80%81%E9%A0%86%E4%BD%8D%E3%81%A0%E3%81%91%E3%81%A7%E7%B5%B1%E5%90%88%E3%81%A7%E3%81%8D%E3%82%8B%E7%82%B9%E3%81%8C%E7%89%B9%E5%BE%B4%E3%81%A7%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!%5BRAG-Fusion%E3%81%AE%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2Frag_fusion.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%20*%20https%3A%2F%2Fgithub.com%2Flangchain-ai%2Flangchain%2Fblob%2Fmaster%2Fcookbook%2Frag_fusion.ipynb%3Fref%3Dblog.langchain.dev%0A%0A%20%20%20%20%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%8F%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%EF%BC%9A%0A%0A%20%20%20%20*%20https%3A%2F%2Ftowardsdatascience.com%2Fforget-rag-the-future-is-rag-fusion-1147298d8ad1%0A%0A%20%20%20%20%23%23%23%20%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%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%20rag_fusion_template%20%3D%20'You%20are%20a%20helpful%20assistant%20that%20generates%20multiple%20search%20queries%20based%20on%20a%20single%20input%20query.%20%5Cn%5CnGenerate%20multiple%20search%20queries%20related%20to%3A%20%7Bquestion%7D%20%5Cn%5CnOutput%20(4%20queries)%3A'%0A%20%20%20%20%23%20RAG-Fusion%3A%20Related%0A%20%20%20%20rag_fusion_prompt%20%3D%20ChatPromptTemplate.from_template(rag_fusion_template)%0A%20%20%20%20return%20(rag_fusion_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%20RAG-Fusion%E7%94%A8%E3%81%AE%E3%82%AF%E3%82%A8%E3%83%AA%E7%94%9F%E6%88%90%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%E3%83%91%E3%83%BC%E3%83%885%E3%81%AEMulti%20Query%E3%81%AF5%E7%A8%AE%E9%A1%9E%E3%81%AE%E5%88%A5%E8%A1%A8%E7%8F%BE%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A7%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%924%E4%BB%B6%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E6%8C%87%E7%A4%BA%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%E6%94%B9%E8%A1%8C%E5%8C%BA%E5%88%87%E3%82%8A%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E6%9C%80%E5%BE%8C%E3%81%AB%20%60split_queries%60%20%E3%81%A7%E7%A9%BA%E8%A1%8C%E3%82%92%E9%99%A4%E3%81%84%E3%81%9F%E3%83%AA%E3%82%B9%E3%83%88%E3%81%B8%E5%A4%89%E6%8F%9B%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_(rag_fusion_prompt)%3A%0A%20%20%20%20rag_fusion_query_generator%20%3D%20(%0A%20%20%20%20%20%20%20%20rag_fusion_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%20%20%20%20%7C%20split_queries%0A%20%20%20%20)%0A%20%20%20%20return%20(rag_fusion_query_generator%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%20Reciprocal%20Rank%20Fusion%EF%BC%88RRF%EF%BC%89%E3%81%AF%E3%80%81%E5%90%84%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%81%A7%E3%81%AE0%E5%A7%8B%E3%81%BE%E3%82%8A%E3%81%AE%E9%A0%86%E4%BD%8D%20%60rank%60%20%E3%81%A0%E3%81%91%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%601%20%2F%20(rank%20%2B%20k)%60%20%E3%82%92%E6%96%87%E6%9B%B8%E3%81%94%E3%81%A8%E3%81%AB%E5%90%88%E8%A8%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%A4%9C%E7%B4%A2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%94%E3%81%A8%E3%81%AB%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8B%E7%94%9F%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E6%AF%94%E8%BC%83%E3%81%9B%E3%81%9A%E3%81%AB%E6%B8%88%E3%82%80%E3%81%AE%E3%81%8C%E5%88%A9%E7%82%B9%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%60results%60%20%3D%20%E8%A4%87%E6%95%B0%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AE%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E6%8C%81%E3%81%A4%20%60list%5Blist%5D%60%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60dumps%60%20%E3%81%A7%20%60Document%60%20%E3%82%92%E6%96%87%E5%AD%97%E5%88%97%E5%8C%96%E3%81%97%E3%81%A6%E6%96%87%E6%9B%B8%E3%81%94%E3%81%A8%E3%81%AE%E5%90%88%E8%A8%88%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E9%9B%86%E8%A8%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%AE%9A%E6%95%B0%E3%81%AF%20%60k%3D60%60%20%E3%81%A7%E3%80%81%E6%9C%80%E4%B8%8A%E4%BD%8D%E6%96%87%E6%9B%B8%E3%81%AE%E5%8A%A0%E7%82%B9%E3%81%AF%20%601%20%2F%20(0%20%2B%2060)%60%20%E3%81%A7%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60(Document%2C%20score)%60%20%E3%81%AE%E3%82%BF%E3%83%97%E3%83%AB%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%80%82%E9%80%9A%E5%B8%B8%E3%81%AE%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8C%E8%BF%94%E3%81%99%20%60Document%60%20%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%81%A8%E3%81%AF%E5%9E%8B%E3%81%8C%E9%81%95%E3%81%86%E7%82%B9%E3%81%AB%E6%B3%A8%E6%84%8F%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_(rag_fusion_query_generator%2C%20retriever)%3A%0A%20%20%20%20def%20reciprocal_rank_fusion(results%3A%20list%5Blist%5D%2C%20k%3D60)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Combine%20ranked%20result%20lists%20using%20reciprocal%20rank%20fusion.%22%22%22%0A%20%20%20%20%20%20%20%20fused_scores%20%3D%20%7B%7D%0A%20%20%20%20%20%20%20%20for%20documents%20in%20results%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20rank%2C%20document%20in%20enumerate(documents)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc_str%20%3D%20dumps(document)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20doc_str%20not%20in%20fused_scores%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fused_scores%5Bdoc_str%5D%20%3D%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fused_scores%5Bdoc_str%5D%20%2B%3D%201%20%2F%20(rank%20%2B%20k)%0A%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20(loads(doc)%2C%20score)%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20doc%2C%20score%20in%20sorted(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fused_scores.items()%2C%20key%3Dlambda%20item%3A%20item%5B1%5D%2C%20reverse%3DTrue%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%5D%0A%0A%20%20%20%20rag_fusion_retrieval_chain%20%3D%20(%0A%20%20%20%20%20%20%20%20rag_fusion_query_generator%20%7C%20retriever.map()%20%7C%20reciprocal_rank_fusion%0A%20%20%20%20)%0A%20%20%20%20return%20(rag_fusion_retrieval_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%E5%85%B1%E9%80%9A%E3%81%AE%E8%A9%95%E4%BE%A1%E8%B3%AA%E5%95%8F%E3%82%92RAG-Fusion%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%AB%E6%B8%A1%E3%81%97%E3%80%81RRF%E3%81%A7%E8%9E%8D%E5%90%88%E3%83%BB%E5%86%8D%E9%A0%86%E4%BD%8D%E4%BB%98%E3%81%91%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AE%E4%BB%B6%E6%95%B0%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%87%BA%E5%8A%9B%E3%81%AE%20%60fused_documents%60%20%E3%81%AF%E3%80%81%E6%96%87%E6%9B%B8%E3%81%A8%E8%9E%8D%E5%90%88%E3%82%B9%E3%82%B3%E3%82%A2%E3%81%AE%E3%82%BF%E3%83%97%E3%83%AB%E3%82%92%E3%82%B9%E3%82%B3%E3%82%A2%E9%99%8D%E9%A0%86%E3%81%AB%E4%B8%A6%E3%81%B9%E3%81%9F%E3%83%AA%E3%82%B9%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_(rag_fusion_retrieval_chain%2C%20retrieval_question)%3A%0A%20%20%20%20fused_documents%20%3D%20rag_fusion_retrieval_chain.invoke(%0A%20%20%20%20%20%20%20%20%7B%22question%22%3A%20retrieval_question%7D%0A%20%20%20%20)%0A%20%20%20%20len(fused_documents)%0A%20%20%20%20return%20(fused_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%E4%B8%8A%E4%BD%8D%E3%81%AE%E8%9E%8D%E5%90%88%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A7%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E4%B8%8A%E4%BD%8D%E3%81%AB%E7%8F%BE%E3%82%8C%E3%81%9F%E6%96%87%E6%9B%B8%E3%81%BB%E3%81%A9%E9%AB%98%E3%81%84%E5%80%A4%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_(fused_documents)%3A%0A%20%20%20%20%5Bround(score%2C%204)%20for%20_%2C%20score%20in%20fused_documents%5B%3A5%5D%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%20RRF%E3%81%A7%E5%86%8D%E9%A0%86%E4%BD%8D%E4%BB%98%E3%81%91%E3%81%97%E3%81%9F%E7%B5%90%E6%9E%9C%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%A6%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%93%E3%81%AE%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%A7%E3%81%AF%20%60rag_fusion_retrieval_chain%60%20%E3%81%8C%E8%BF%94%E3%81%99%20%60(Document%2C%20score)%60%20%E3%81%AE%E3%82%BF%E3%83%97%E3%83%AB%E5%88%97%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%20%60context%60%20%E3%81%B8%E6%B8%A1%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%60format_docs%60%20%E3%81%AF%E9%80%9A%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E6%9C%80%E5%BE%8C%E3%81%AB%20%60StrOutputParser%60%20%E3%82%92%E9%80%9A%E3%81%99%E3%81%9F%E3%82%81%E3%80%81%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%AF%E6%96%87%E5%AD%97%E5%88%97%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_(rag_fusion_retrieval_chain%2C%20retrieval_question)%3A%0A%20%20%20%20rag_fusion_answer_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%20rag_fusion_retrieval_chain%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22question%22%3A%20itemgetter(%22question%22)%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%20rag_fusion_answer_chain.invoke(%7B%22question%22%3A%20retrieval_question%7D)%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%83%88%E3%83%AC%E3%83%BC%E3%82%B9%EF%BC%9A%0A%0A%20%20%20%20https%3A%2F%2Fsmith.langchain.com%2Fpublic%2F071202c9-9f4d-41b1-bf9d-86b7c5a7525b%2Fr%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%887%EF%BC%9A%E5%88%86%E8%A7%A3%0A%0A%20%20%20%20%E8%A4%87%E9%9B%91%E3%81%AA%E8%B3%AA%E5%95%8F%E3%82%92%E3%80%81%E5%8D%98%E7%8B%AC%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%83%BB%E5%9B%9E%E7%AD%94%E3%81%A7%E3%81%8D%E3%82%8B%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%B8%E5%88%86%E8%A7%A3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E3%80%81%E5%89%8D%E3%81%AE%E5%9B%9E%E7%AD%94%E3%82%92%E6%AC%A1%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AE%E8%83%8C%E6%99%AF%E3%81%A8%E3%81%97%E3%81%A6%E9%A0%86%E3%81%AB%E6%B8%A1%E3%81%99%E6%96%B9%E6%B3%95%E3%81%A8%E3%80%81%E5%90%84%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E7%8B%AC%E7%AB%8B%E3%81%AB%E5%9B%9E%E7%AD%94%E3%81%97%E3%81%A6%E6%9C%80%E5%BE%8C%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%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(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%AC%A1%E3%81%AE3%E3%81%A4%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BB%E3%83%AB%E3%81%A7%E3%80%81%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A8%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8A%E3%80%81%E3%83%91%E3%83%BC%E3%83%887%E3%81%A7%E6%89%B1%E3%81%86%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60subquestion_generator%60%20%E3%81%AF%E5%85%A5%E5%8A%9B%E3%81%95%E3%82%8C%E3%81%9F%E8%B3%AA%E5%95%8F%E3%82%923%E3%81%A4%E3%81%AE%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%B8%E5%88%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E6%8C%87%E7%A4%BA%E3%81%97%E3%80%81%60StrOutputParser%60%20%E3%81%A7%E6%96%87%E5%AD%97%E5%88%97%E5%8C%96%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81%60split_queries%60%20%E3%81%A7%E7%A9%BA%E8%A1%8C%E3%82%92%E9%99%A4%E3%81%84%E3%81%9F%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AE%E5%85%83%E8%B3%AA%E5%95%8F%E3%81%AF%E3%80%81LLM%E8%87%AA%E5%BE%8B%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E4%B8%BB%E8%A6%81%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%82%92%E5%95%8F%E3%81%86%E5%86%85%E5%AE%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_()%3A%0A%20%20%20%20subquestion_template%20%3D%20'You%20are%20a%20helpful%20assistant%20that%20generates%20multiple%20sub-questions%20related%20to%20an%20input%20question.%20%5Cn%5CnThe%20goal%20is%20to%20break%20down%20the%20input%20into%20a%20set%20of%20sub-problems%20%2F%20sub-questions%20that%20can%20be%20answers%20in%20isolation.%20%5Cn%5CnGenerate%20multiple%20search%20queries%20related%20to%3A%20%7Bquestion%7D%20%5Cn%5CnOutput%20(3%20queries)%3A'%0A%20%20%20%20%23%20Decomposition%0A%20%20%20%20subquestion_prompt%20%3D%20ChatPromptTemplate.from_template(subquestion_template)%0A%20%20%20%20return%20(subquestion_prompt%2C)%0A%0A%0A%40app.cell%0Adef%20_(subquestion_prompt)%3A%0A%20%20%20%20subquestion_generator%20%3D%20(%0A%20%20%20%20%20%20%20%20subquestion_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%20%20%20%20%7C%20split_queries%0A%20%20%20%20)%0A%20%20%20%20return%20(subquestion_generator%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20decomposition_question%20%3D%20(%0A%20%20%20%20%20%20%20%20%22What%20are%20the%20main%20components%20of%20an%20LLM-powered%20autonomous%20agent%20system%3F%22%0A%20%20%20%20)%0A%20%20%20%20return%20(decomposition_question%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%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%8C%E3%80%81%E5%8D%98%E7%8B%AC%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%83%BB%E5%9B%9E%E7%AD%94%E3%81%A7%E3%81%8D%E3%82%8B%E7%B2%92%E5%BA%A6%E3%81%B8%E5%88%86%E5%89%B2%E3%81%95%E3%82%8C%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_(decomposition_question%2C%20subquestion_generator)%3A%0A%20%20%20%20subquestions%20%3D%20subquestion_generator.invoke(%0A%20%20%20%20%20%20%20%20%7B%22question%22%3A%20decomposition_question%7D%0A%20%20%20%20)%0A%20%20%20%20subquestions%0A%20%20%20%20return%20(subquestions%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%86%8D%E5%B8%B0%E7%9A%84%E3%81%AB%E5%9B%9E%E7%AD%94%E3%81%99%E3%82%8B%0A%0A%20%20%20%20%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E9%A0%86%E7%95%AA%E3%81%AB%E5%87%A6%E7%90%86%E3%81%97%E3%80%81%E3%81%9D%E3%82%8C%E3%81%BE%E3%81%A7%E3%81%AB%E5%BE%97%E3%81%9F%E8%B3%AA%E5%95%8F%E3%81%A8%E5%9B%9E%E7%AD%94%E3%81%AE%E7%B5%84%E3%82%92%E6%AC%A1%E3%81%AE%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%B8%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%BE%8C%E7%B6%9A%E3%81%AE%E5%9B%9E%E7%AD%94%E3%81%8C%E5%85%88%E8%A1%8C%E3%81%99%E3%82%8B%E5%9B%9E%E7%AD%94%E3%82%92%E5%8F%82%E7%85%A7%E3%81%A7%E3%81%8D%E3%82%8B%E4%B8%80%E6%96%B9%E3%80%81%E5%87%A6%E7%90%86%E3%81%AF%E7%9B%B4%E5%88%97%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20!%5B%E5%86%8D%E5%B8%B0%E7%9A%84%E3%81%AB%E5%9B%9E%E7%AD%94%E3%81%99%E3%82%8B%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2Fanswer_recursively.png)%0A%0A%20%20%20%20%E8%AB%96%E6%96%87%EF%BC%9A%0A%0A%20%20%20%20*%20https%3A%2F%2Farxiv.org%2Fpdf%2F2205.10625.pdf%0A%20%20%20%20*%20https%3A%2F%2Farxiv.org%2Fabs%2F2212.10509.pdf%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%20recursive_answer_template%20%3D%20'Here%20is%20the%20question%20you%20need%20to%20answer%3A%5Cn%5Cn%5Cn%20---%20%5Cn%20%7Bquestion%7D%20%5Cn%20---%20%5Cn%5Cn%5CnHere%20is%20any%20available%20background%20question%20%2B%20answer%20pairs%3A%5Cn%5Cn%5Cn%20---%20%5Cn%20%7Bq_a_pairs%7D%20%5Cn%20---%20%5Cn%5Cn%5CnHere%20is%20additional%20context%20relevant%20to%20the%20question%3A%20%5Cn%5Cn%5Cn%20---%20%5Cn%20%7Bcontext%7D%20%5Cn%20---%20%5Cn%5Cn%5CnUse%20the%20above%20context%20and%20any%20background%20question%20%2B%20answer%20pairs%20to%20answer%20the%20question%3A%20%5Cn%20%7Bquestion%7D%5Cn'%0A%20%20%20%20recursive_answer_prompt%20%3D%20ChatPromptTemplate.from_template(%0A%20%20%20%20%20%20%20%20recursive_answer_template%0A%20%20%20%20)%0A%20%20%20%20return%20(recursive_answer_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%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%AB%E7%AD%94%E3%81%88%E3%82%8B%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%60q_a_pairs%60%20%E3%81%AB%E3%80%81%E3%81%9D%E3%82%8C%E3%81%BE%E3%81%A7%E3%81%AB%E5%BE%97%E3%81%9F%E8%B3%AA%E5%95%8F%E3%81%A8%E5%9B%9E%E7%AD%94%E3%81%AE%E7%B5%84%E3%82%92%E6%B8%A1%E3%81%99%E7%82%B9%E3%81%8C%E9%80%9A%E5%B8%B8%E3%81%AERAG%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%E6%9C%80%E5%BE%8C%E3%81%AB%20%60StrOutputParser%60%20%E3%82%92%E9%80%9A%E3%81%99%E3%81%9F%E3%82%81%E3%80%81%E5%90%84%E5%9B%9E%E7%AD%94%E3%81%AF%E6%96%87%E5%AD%97%E5%88%97%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_(recursive_answer_prompt%2C%20retriever)%3A%0A%20%20%20%20decomposition_model%20%3D%20make_chat_model()%0A%20%20%20%20recursive_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%20itemgetter(%22question%22)%20%7C%20retriever%20%7C%20format_docs%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22question%22%3A%20itemgetter(%22question%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22q_a_pairs%22%3A%20itemgetter(%22q_a_pairs%22)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7C%20recursive_answer_prompt%0A%20%20%20%20%20%20%20%20%7C%20decomposition_model%0A%20%20%20%20%20%20%20%20%7C%20StrOutputParser()%0A%20%20%20%20)%0A%20%20%20%20return%20decomposition_model%2C%20recursive_rag_chain%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%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E9%A0%86%E3%81%AB%E5%87%A6%E7%90%86%E3%81%97%E3%80%81%E5%9B%9E%E7%AD%94%E3%82%92%20%60accumulated_qa%60%20%E3%81%B8%E7%A9%8D%E3%81%BF%E4%B8%8A%E3%81%92%E3%81%BE%E3%81%99%E3%80%82%60accumulated_qa%60%20%E3%81%AF%E5%8F%8D%E5%BE%A9%E3%81%AE%E3%81%9F%E3%81%B3%E3%81%AB%E6%88%90%E9%95%B7%E3%81%97%E3%80%81%E5%90%84%E5%9B%9E%E7%AD%94%E3%81%8C%E6%AC%A1%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AE%E8%83%8C%E6%99%AF%E3%81%A8%E3%81%97%E3%81%A6%E6%B8%A1%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%87%A6%E7%90%86%E3%81%AF%E7%9B%B4%E5%88%97%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%E5%85%A5%E5%8A%9B%EF%BC%9A%60subquestions%60%20%E3%81%A8%E3%80%81%E7%9B%B4%E5%89%8D%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9F%20%60recursive_rag_chain%60%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60format_qa_pair(question%2C%20answer)%60%20%E3%81%A71%E7%B5%84%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%A8%E5%9B%9E%E7%AD%94%E3%82%92%E6%95%B4%E5%BD%A2%E3%81%97%E3%80%81%E5%90%84%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%AE%E5%9B%9E%E7%AD%94%E5%BE%8C%E3%81%AB%20%60accumulated_qa%60%20%E3%81%B8%E8%BF%BD%E8%A8%98%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60accumulated_qa%60%20%3D%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E8%B3%AA%E5%95%8F%E3%83%BB%E5%9B%9E%E7%AD%94%E3%83%9A%E3%82%A2%E3%82%92%E9%80%A3%E7%B5%90%E3%81%97%E3%81%9F%E6%96%87%E5%AD%97%E5%88%97%E3%80%81%60recursive_answer%60%20%3D%20%E6%9C%80%E5%BE%8C%E3%81%AE%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%B8%E3%81%AE%E5%9B%9E%E7%AD%94%E3%80%82%E3%81%93%E3%81%AE%E6%96%B9%E5%BC%8F%E3%81%A7%E3%81%AF%E6%9C%80%E5%BE%8C%E3%81%AE%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%B8%E3%81%AE%E5%9B%9E%E7%AD%94%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E6%9C%80%E7%B5%82%E5%87%BA%E5%8A%9B%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_(recursive_rag_chain%2C%20subquestions)%3A%0A%20%20%20%20def%20format_qa_pair(question%2C%20answer)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Format%20Q%20and%20A%20pair%22%22%22%0A%20%20%20%20%20%20%20%20return%20f%22Question%3A%20%7Bquestion%7D%5CnAnswer%3A%20%7Banswer%7D%22.strip()%0A%0A%20%20%20%20accumulated_qa%20%3D%20%22%22%0A%20%20%20%20recursive_answer%20%3D%20%22%22%0A%20%20%20%20for%20subquestion%20in%20subquestions%3A%0A%20%20%20%20%20%20%20%20recursive_answer%20%3D%20recursive_rag_chain.invoke(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22question%22%3A%20subquestion%2C%20%22q_a_pairs%22%3A%20accumulated_qa%7D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20accumulated_qa%20%2B%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%5Cn---%5Cn%22%20%2B%20format_qa_pair(subquestion%2C%20recursive_answer)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20return%20accumulated_qa%2C%20recursive_answer%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%AC%A1%E3%81%AE2%E3%82%BB%E3%83%AB%E3%81%AF%E3%80%81%E5%86%8D%E5%B8%B0%E7%9A%84%E3%81%AB%E4%BD%9C%E3%81%A3%E3%81%9F%E7%B5%90%E6%9E%9C%E3%81%AE%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%99%E3%80%82%E3%81%BE%E3%81%9A%20%60print(accumulated_qa)%60%20%E3%81%A7%E6%95%B4%E5%BD%A2%E6%B8%88%E3%81%BF%E3%81%AEQ%26A%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%85%A8%E4%BD%93%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E5%BE%8C%20%60recursive_answer%60%20%E3%81%A8%E3%81%97%E3%81%A6%E6%9C%80%E5%BE%8C%E3%81%AE%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%B8%E3%81%AE%E5%9B%9E%E7%AD%94%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_(accumulated_qa)%3A%0A%20%20%20%20print(accumulated_qa)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(recursive_answer)%3A%0A%20%20%20%20recursive_answer%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%83%88%E3%83%AC%E3%83%BC%E3%82%B9%EF%BC%9A%0A%0A%20%20%20%20%E8%B3%AA%E5%95%8F1%EF%BC%9Ahttps%3A%2F%2Fsmith.langchain.com%2Fpublic%2Ffaefde73-0ecb-4328-8fee-a237904115c0%2Fr%0A%0A%20%20%20%20%E8%B3%AA%E5%95%8F2%EF%BC%9Ahttps%3A%2F%2Fsmith.langchain.com%2Fpublic%2F6142cad3-b314-454e-b2c9-15146cfcce78%2Fr%0A%0A%20%20%20%20%E8%B3%AA%E5%95%8F3%EF%BC%9Ahttps%3A%2F%2Fsmith.langchain.com%2Fpublic%2F84bdca0f-0fa4-46d4-9f89-a7f25bd857fe%2Fr%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%E5%80%8B%E5%88%A5%E3%81%AB%E5%9B%9E%E7%AD%94%E3%81%99%E3%82%8B%0A%0A%20%20%20%20%E5%90%84%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E4%BA%92%E3%81%84%E3%81%AB%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%A6%E6%A4%9C%E7%B4%A2%E3%83%BB%E5%9B%9E%E7%AD%94%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E4%B8%A6%E5%88%97%E5%8C%96%E3%81%97%E3%82%84%E3%81%99%E3%81%84%E6%96%B9%E6%B3%95%E3%81%A7%E3%81%99%E3%80%82%E6%9C%80%E5%BE%8C%E3%81%AB%E8%B3%AA%E5%95%8F%E3%81%A8%E5%9B%9E%E7%AD%94%E3%81%AE%E7%B5%84%E3%82%92%E4%B8%80%E3%81%A4%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%B8%E3%81%BE%E3%81%A8%E3%82%81%E3%80%81%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E5%9B%9E%E7%AD%94%E3%82%92%E5%90%88%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20!%5B%E5%80%8B%E5%88%A5%E3%81%AB%E5%9B%9E%E7%AD%94%E3%81%99%E3%82%8B%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2Fanswer_individualy.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%60retrieve_and_answer_subquestions%60%20%E3%81%AF%E3%80%81%E5%88%86%E8%A7%A3%E3%81%97%E3%81%9F%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E5%80%8B%E5%88%A5%E3%81%AB%E6%A4%9C%E7%B4%A2%E3%83%BB%E5%9B%9E%E7%AD%94%E3%81%99%E3%82%8B%E8%87%AA%E4%BD%9C%E9%96%A2%E6%95%B0%E3%81%A7%E3%81%99%E3%80%82%E5%86%8D%E5%B8%B0%E7%9A%84%E3%81%AA%E6%96%B9%E5%BC%8F%E3%81%A8%E9%81%95%E3%81%84%E3%80%81%E5%90%84%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%AE%E5%9B%9E%E7%AD%94%E6%99%82%E3%81%AB%E4%BB%96%E3%81%AE%E5%9B%9E%E7%AD%94%E3%82%92%E8%83%8C%E6%99%AF%E3%81%A8%E3%81%97%E3%81%A6%E6%B8%A1%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60question%60%20%3D%20%E5%88%86%E8%A7%A3%E3%81%97%E3%81%9F%E3%81%84%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E6%96%87%E5%AD%97%E5%88%97%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60subquestion_generator%60%20%E3%81%A7%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%82%92%E4%BD%9C%E3%82%8A%E3%80%81%E5%90%84%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E5%85%B1%E6%9C%89%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%60load_rag_prompt()%60%20%E3%81%A8%20%60decomposition_model%60%20%E3%81%A7%E5%9B%9E%E7%AD%94%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60(answers%2C%20generated_subquestions)%60%20%3D%20%E5%9B%9E%E7%AD%94%E3%83%AA%E3%82%B9%E3%83%88%E3%81%A8%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%BF%E3%83%97%E3%83%AB%E3%80%82%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%83%91%E3%83%BC%E3%83%887%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%97%E3%80%81%E5%9B%9E%E7%AD%94%E4%BB%B6%E6%95%B0%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_(%0A%20%20%20%20decomposition_model%2C%0A%20%20%20%20decomposition_question%2C%0A%20%20%20%20retriever%2C%0A%20%20%20%20subquestion_generator%2C%0A)%3A%0A%20%20%20%20def%20retrieve_and_answer_subquestions(question)%3A%0A%20%20%20%20%20%20%20%20generated_subquestions%20%3D%20subquestion_generator.invoke(%7B%22question%22%3A%20question%7D)%0A%20%20%20%20%20%20%20%20answers%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20for%20subquestion%20in%20generated_subquestions%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20retrieved_documents%20%3D%20retriever.invoke(subquestion)%0A%20%20%20%20%20%20%20%20%20%20%20%20answer%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20load_rag_prompt()%20%7C%20decomposition_model%20%7C%20StrOutputParser()%0A%20%20%20%20%20%20%20%20%20%20%20%20).invoke(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%22question%22%3A%20subquestion%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%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%20answers.append(answer)%0A%20%20%20%20%20%20%20%20return%20answers%2C%20generated_subquestions%0A%0A%20%20%20%20individual_answers%2C%20individual_subquestions%20%3D%20(%0A%20%20%20%20%20%20%20%20retrieve_and_answer_subquestions(decomposition_question)%0A%20%20%20%20)%0A%20%20%20%20len(individual_answers)%0A%20%20%20%20return%20individual_answers%2C%20individual_subquestions%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%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%81%A8%E5%9B%9E%E7%AD%94%E3%82%921%E3%81%A4%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%B8%E6%95%B4%E5%BD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%86%8D%E5%B8%B0%E7%9A%84%E3%81%AA%E6%96%B9%E5%BC%8F%E3%81%A8%E9%81%95%E3%81%84%E3%80%81%E5%90%84%E5%9B%9E%E7%AD%94%E3%81%AF%E4%BA%92%E3%81%84%E3%81%AB%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%A6%E5%BE%97%E3%82%89%E3%82%8C%E3%81%9F%E3%82%82%E3%81%AE%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%60questions%60%20%3D%20%E3%82%B5%E3%83%96%E8%B3%AA%E5%95%8F%E3%83%AA%E3%82%B9%E3%83%88%E3%80%81%60answers%60%20%3D%20%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E5%9B%9E%E7%AD%94%E3%83%AA%E3%82%B9%E3%83%88%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60format_qa_pairs%60%20%E3%81%8C%E7%95%AA%E5%8F%B7%E4%BB%98%E3%81%8D%E3%81%AE%20%60Question%20i%60%20%2F%20%60Answer%20i%60%20%E5%BD%A2%E5%BC%8F%E3%81%B8%E9%80%A3%E7%B5%90%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60qa_context%60%20%3D%20%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%B8%E3%81%AE%E5%9B%9E%E7%AD%94%E5%90%88%E6%88%90%E3%81%AB%E6%B8%A1%E3%81%99Q%26A%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%80%82%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%20%60print(qa_context)%60%20%E3%81%A7%E3%80%81LLM%E3%81%B8%E6%B8%A1%E3%81%99%E5%89%8D%E3%81%AE%E6%95%B4%E5%BD%A2%E7%B5%90%E6%9E%9C%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_(individual_answers%2C%20individual_subquestions)%3A%0A%20%20%20%20def%20format_qa_pairs(questions%2C%20answers)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Format%20Q%20and%20A%20pairs%22%22%22%0A%20%20%20%20%20%20%20%20formatted_string%20%3D%20%22%22%0A%20%20%20%20%20%20%20%20for%20i%2C%20(question%2C%20answer)%20in%20enumerate(zip(questions%2C%20answers)%2C%20start%3D1)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20formatted_string%20%2B%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22Question%20%7Bi%7D%3A%20%7Bquestion%7D%5CnAnswer%20%7Bi%7D%3A%20%7Banswer%7D%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20return%20formatted_string.strip()%0A%0A%20%20%20%20qa_context%20%3D%20format_qa_pairs(individual_subquestions%2C%20individual_answers)%0A%20%20%20%20return%20(qa_context%2C)%0A%0A%0A%40app.cell%0Adef%20_(qa_context)%3A%0A%20%20%20%20print(qa_context)%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%E6%95%B4%E5%BD%A2%E3%81%97%E3%81%9F%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E3%82%82%E3%81%A8%E3%81%AB%E3%80%81%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%B8%E3%81%AE%E5%9B%9E%E7%AD%94%E3%82%92%E5%90%88%E6%88%90%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_(decomposition_model%2C%20decomposition_question%2C%20qa_context)%3A%0A%20%20%20%20synthesis_template%20%3D%20'Here%20is%20a%20set%20of%20Q%2BA%20pairs%3A%5Cn%5Cn%7Bcontext%7D%5Cn%5CnUse%20these%20to%20synthesize%20an%20answer%20to%20the%20question%3A%20%7Bquestion%7D%5Cn'%0A%20%20%20%20synthesis_prompt%20%3D%20ChatPromptTemplate.from_template(synthesis_template)%0A%20%20%20%20synthesis_chain%20%3D%20synthesis_prompt%20%7C%20decomposition_model%20%7C%20StrOutputParser()%0A%20%20%20%20synthesis_chain.invoke(%0A%20%20%20%20%20%20%20%20%7B%22context%22%3A%20qa_context%2C%20%22question%22%3A%20decomposition_question%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%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%EF%BC%9A%0A%0A%20%20%20%20https%3A%2F%2Fsmith.langchain.com%2Fpublic%2Fd8f26f75-3fb8-498a-a3a2-6532aa77f56b%2Fr%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%888%EF%BC%9AStep%20Back%0A%0A%20%20%20%20%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%82%92%E3%80%81%E3%82%88%E3%82%8A%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%A7%E7%AD%94%E3%81%88%E3%82%84%E3%81%99%E3%81%84%E3%80%8C%E4%B8%80%E6%AD%A9%E5%BC%95%E3%81%84%E3%81%9F%E8%B3%AA%E5%95%8F%E3%80%8D%E3%81%B8%E8%A8%80%E3%81%84%E6%8F%9B%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%A8%E4%B8%80%E8%88%AC%E5%8C%96%E3%81%97%E3%81%9F%E8%B3%AA%E5%95%8F%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E6%96%87%E8%84%88%E3%81%A8%E8%83%8C%E6%99%AF%E7%9F%A5%E8%AD%98%E3%82%92%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E5%9B%9E%E7%AD%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20!%5BStep%20Back%E3%81%AE%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2Fstep_back.png)%0A%0A%20%20%20%20%E8%AB%96%E6%96%87%EF%BC%9A%0A%0A%20%20%20%20*%20https%3A%2F%2Farxiv.org%2Fpdf%2F2310.06117.pdf%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%202%E3%81%A4%E3%81%AEFew-shot%E4%BE%8B%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E8%B3%AA%E5%95%8F%E3%82%92%E3%82%88%E3%82%8A%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E3%80%8C%E4%B8%80%E6%AD%A9%E5%BC%95%E3%81%84%E3%81%9F%E8%B3%AA%E5%95%8F%E3%80%8D%E3%81%B8%E8%A8%80%E3%81%84%E6%8F%9B%E3%81%88%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92LLM%E3%81%B8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60Could%20the%20members%20of%20The%20Police%20perform%20lawful%20arrests%3F%60%20%E3%82%92%E8%83%BD%E5%8A%9B%E4%B8%80%E8%88%AC%E3%81%AE%E5%95%8F%E3%81%84%E3%81%B8%E3%80%81%60Jan%20Sindel%E2%80%99s%20was%20born%20in%20what%20country%3F%60%20%E3%82%92%E4%BA%BA%E7%89%A9%E5%8F%B2%E3%81%AE%E5%95%8F%E3%81%84%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E4%BE%8B%E3%81%A8%E3%81%97%E3%81%A6%E6%B8%A1%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%20examples%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%22input%22%3A%20%22Could%20the%20members%20of%20The%20Police%20perform%20lawful%20arrests%3F%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22output%22%3A%20%22what%20can%20the%20members%20of%20The%20Police%20do%3F%22%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22input%22%3A%20%22Jan%20Sindel%E2%80%99s%20was%20born%20in%20what%20country%3F%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22output%22%3A%20%22what%20is%20Jan%20Sindel%E2%80%99s%20personal%20history%3F%22%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%5D%0A%20%20%20%20example_prompt%20%3D%20ChatPromptTemplate.from_messages(%0A%20%20%20%20%20%20%20%20%5B(%22human%22%2C%20%22%7Binput%7D%22)%2C%20(%22ai%22%2C%20%22%7Boutput%7D%22)%5D%0A%20%20%20%20)%0A%20%20%20%20few_shot_prompt%20%3D%20FewShotChatMessagePromptTemplate(%0A%20%20%20%20%20%20%20%20example_prompt%3Dexample_prompt%2C%20examples%3Dexamples%0A%20%20%20%20)%0A%20%20%20%20step_back_prompt%20%3D%20ChatPromptTemplate.from_messages(%0A%20%20%20%20%20%20%20%20%5B%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%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%22You%20are%20an%20expert%20at%20world%20knowledge.%20Your%20task%20is%20to%20step%20back%20and%20paraphrase%20a%20question%20to%20a%20more%20generic%20step-back%20question%2C%20which%20is%20easier%20to%20answer.%20Here%20are%20a%20few%20examples%3A%22%2C%0A%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%20few_shot_prompt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22user%22%2C%20%22%7Bquestion%7D%22)%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%20(step_back_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%20Few-shot%E4%BB%98%E3%81%8D%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%82%92%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E3%81%A4%E3%81%AA%E3%81%8E%E3%80%81%E4%B8%80%E6%AD%A9%E5%BC%95%E3%81%84%E3%81%9F%E8%B3%AA%E5%95%8F%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E5%87%BA%E5%8A%9B%E3%81%AF%E6%A4%9C%E7%B4%A2%E3%81%AB%E6%B8%A1%E3%81%99%E4%B8%80%E8%88%AC%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E8%B3%AA%E5%95%8F%E6%96%87%E5%AD%97%E5%88%97%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_(step_back_prompt)%3A%0A%20%20%20%20step_back_query_generator%20%3D%20(%0A%20%20%20%20%20%20%20%20step_back_prompt%20%7C%20make_chat_model()%20%7C%20StrOutputParser()%0A%20%20%20%20)%0A%20%20%20%20return%20(step_back_query_generator%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%83%91%E3%83%BC%E3%83%888%E3%81%A7%E4%BD%BF%E3%81%86%E8%B3%AA%E5%95%8F%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%86%85%E5%AE%B9%E3%81%AF%E3%83%91%E3%83%BC%E3%83%885%E3%83%BB6%E3%81%A8%E5%90%8C%E3%81%98%20%60What%20is%20task%20decomposition%20for%20LLM%20agents%3F%60%20%E3%81%A7%E3%80%81%E9%80%9A%E5%B8%B8%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%81%A8%E4%B8%80%E6%AD%A9%E5%BC%95%E3%81%84%E3%81%9F%E8%B3%AA%E5%95%8F%E3%81%AB%E3%82%88%E3%82%8B%E6%A4%9C%E7%B4%A2%E3%82%92%E6%AF%94%E8%BC%83%E3%81%97%E3%82%84%E3%81%99%E3%81%8F%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%0Adef%20_()%3A%0A%20%20%20%20step_back_question%20%3D%20%22What%20is%20task%20decomposition%20for%20LLM%20agents%3F%22%0A%20%20%20%20return%20(step_back_question%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%AE%9F%E9%9A%9B%E3%81%AB%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E4%B8%80%E6%AD%A9%E5%BC%95%E3%81%84%E3%81%9F%E8%B3%AA%E5%95%8F%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%82%88%E3%82%8A%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E5%95%8F%E3%81%84%E3%81%B8%E8%A8%80%E3%81%84%E6%8F%9B%E3%81%88%E3%82%89%E3%82%8C%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_(step_back_query_generator%2C%20step_back_question)%3A%0A%20%20%20%20step_back_query_generator.invoke(%7B%22question%22%3A%20step_back_question%7D)%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%85%83%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%A8%E4%B8%80%E6%AD%A9%E5%BC%95%E3%81%84%E3%81%9F%E8%B3%AA%E5%95%8F%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%80%81%60normal_context%60%20%E3%81%A8%20%60step_back_context%60%20%E3%81%AE2%E7%B3%BB%E7%B5%B1%E3%82%92%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%B8%E6%B8%A1%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_(retriever%2C%20step_back_query_generator%2C%20step_back_question)%3A%0A%20%20%20%20response_prompt_template%20%3D%20'You%20are%20an%20expert%20of%20world%20knowledge.%20I%20am%20going%20to%20ask%20you%20a%20question.%20Your%20response%20should%20be%20comprehensive%20and%20not%20contradicted%20with%20the%20following%20context%20if%20they%20are%20relevant.%20Otherwise%2C%20ignore%20them%20if%20they%20are%20not%20relevant.%5Cn%5Cn%23%20%7Bnormal_context%7D%5Cn%23%20%7Bstep_back_context%7D%5Cn%5Cn%23%20Original%20Question%3A%20%7Bquestion%7D%5Cn%23%20Answer%3A'%0A%20%20%20%20response_prompt%20%3D%20ChatPromptTemplate.from_template(response_prompt_template)%0A%20%20%20%20step_back_answer_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%22normal_context%22%3A%20RunnableLambda(lambda%20x%3A%20x%5B%22question%22%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%20retriever%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%20format_docs%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22step_back_context%22%3A%20step_back_query_generator%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%20retriever%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%20format_docs%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22question%22%3A%20lambda%20x%3A%20x%5B%22question%22%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7C%20response_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%20step_back_answer_chain.invoke(%7B%22question%22%3A%20step_back_question%7D)%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%889%EF%BC%9AHyDE%0A%0A%20%20%20%20HyDE%E3%81%AF%E3%80%81%E8%B3%AA%E5%95%8F%E3%81%B8%E7%9B%B4%E6%8E%A5%E5%9B%9E%E7%AD%94%E3%81%99%E3%82%8B%E4%BB%AE%E6%83%B3%E6%96%87%E6%9B%B8%E3%82%92%E5%85%88%E3%81%ABLLM%E3%81%A7%E7%94%9F%E6%88%90%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E6%96%87%E6%9B%B8%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%82%92%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E7%9F%AD%E3%81%84%E8%B3%AA%E5%95%8F%E3%82%88%E3%82%8A%E3%82%82%E5%AE%9F%E6%96%87%E6%9B%B8%E3%81%AB%E8%BF%91%E3%81%84%E8%A1%A8%E7%8F%BE%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E8%B3%AA%E5%95%8F%E3%81%A8%E6%96%87%E6%9B%B8%E3%81%AE%E8%A1%A8%E7%8F%BE%E5%B7%AE%E3%82%92%E5%9F%8B%E3%82%81%E3%82%89%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20!%5BHyDE%E3%81%AE%E6%B5%81%E3%82%8C%5D(.%2Fimgs%2FHyDE.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%20*%20https%3A%2F%2Fgithub.com%2Flangchain-ai%2Flangchain%2Fblob%2Fmaster%2Fcookbook%2Fhypothetical_document_embeddings.ipynb%0A%0A%20%20%20%20%E8%AB%96%E6%96%87%EF%BC%9A%0A%0A%20%20%20%20*%20https%3A%2F%2Farxiv.org%2Fabs%2F2212.10496%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%20HyDE%E3%81%AE%E4%BB%AE%E6%83%B3%E6%96%87%E6%9B%B8%E7%94%9F%E6%88%90%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A7%E3%81%AF%E3%80%81%E8%B3%AA%E5%95%8F%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%8C%E8%B3%AA%E5%95%8F%E3%81%AB%E7%AD%94%E3%81%88%E3%82%8B%E7%A7%91%E5%AD%A6%E8%AB%96%E6%96%87%E3%81%AE%E4%B8%80%E7%AF%80%E3%82%92%E6%9B%B8%E3%81%91%E3%80%8D%E3%81%A8%E6%8C%87%E7%A4%BA%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E7%94%9F%E6%88%90%E6%96%87%E3%82%92%E5%BE%8C%E7%B6%9A%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%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%20hyde_template%20%3D%20'Please%20write%20a%20scientific%20paper%20passage%20to%20answer%20the%20question%5CnQuestion%3A%20%7Bquestion%7D%5CnPassage%3A'%0A%20%20%20%20hyde_prompt%20%3D%20ChatPromptTemplate.from_template(hyde_template)%0A%20%20%20%20hypothetical_document_generator%20%3D%20(%0A%20%20%20%20%20%20%20%20hyde_prompt%20%7C%20make_chat_model()%20%7C%20StrOutputParser()%0A%20%20%20%20)%0A%20%20%20%20return%20(hypothetical_document_generator%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%83%91%E3%83%BC%E3%83%889%E3%81%A7%E4%BD%BF%E3%81%86%E8%B3%AA%E5%95%8F%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E8%B3%AA%E5%95%8F%E3%81%AF%20%60What%20is%20task%20decomposition%20for%20LLM%20agents%3F%60%20%E3%81%A7%E3%80%81%E3%82%BF%E3%82%B9%E3%82%AF%E5%88%86%E8%A7%A3%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E4%BB%AE%E6%83%B3%E6%96%87%E6%9B%B8%E3%82%92%E7%94%9F%E6%88%90%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E6%B5%81%E3%82%8C%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_()%3A%0A%20%20%20%20hyde_question%20%3D%20%22What%20is%20task%20decomposition%20for%20LLM%20agents%3F%22%0A%20%20%20%20return%20(hyde_question%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%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E4%BB%AE%E6%83%B3%E6%96%87%E6%9B%B8%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%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E8%AB%96%E6%96%87%E3%81%AE%E4%B8%80%E7%AF%80%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E6%96%87%E7%AB%A0%E3%81%8C%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E6%96%87%E7%AB%A0%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%82%92%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%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_(hyde_question%2C%20hypothetical_document_generator)%3A%0A%20%20%20%20hypothetical_document_generator.invoke(%7B%22question%22%3A%20hyde_question%7D)%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%BB%AE%E6%83%B3%E6%96%87%E6%9B%B8%E7%94%9F%E6%88%90%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%A8%E5%85%B1%E6%9C%89%E3%83%AA%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E7%9B%B4%E5%88%97%E3%81%AB%E3%81%A4%E3%81%AA%E3%81%8E%E3%81%BE%E3%81%99%E3%80%82%60hyde_retrieval_chain%60%20%E3%81%AF%E3%80%81LLM%E3%81%8C%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E4%BB%AE%E6%83%B3%E6%96%87%E6%9B%B8%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E6%A4%9C%E7%B4%A2%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A8%E3%81%97%E3%81%A6%20%60retriever%60%20%E3%81%B8%E6%B8%A1%E3%81%97%E3%80%81%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%20%60Document%60%20%E3%82%92%E5%8F%96%E5%BE%97%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_(hyde_question%2C%20hypothetical_document_generator%2C%20retriever)%3A%0A%20%20%20%20hyde_retrieval_chain%20%3D%20hypothetical_document_generator%20%7C%20retriever%0A%20%20%20%20hyde_documents%20%3D%20hyde_retrieval_chain.invoke(%7B%22question%22%3A%20hyde_question%7D)%0A%20%20%20%20hyde_documents%0A%20%20%20%20return%20(hyde_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%20HyDE%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E6%96%87%E6%9B%B8%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%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%E6%A4%9C%E7%B4%A2%E7%94%A8%E3%81%AE%20%60hyde_retrieval_chain%60%20%E3%81%A8%E5%9B%9E%E7%AD%94%E7%94%9F%E6%88%90%E7%94%A8%E3%81%AE%20%60hyde_answer_chain%60%20%E3%81%AF%E5%88%A5%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%A7%E3%80%81%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%20%60hyde_documents%60%20%E3%82%92%20%60format_docs%60%20%E3%81%A7%E6%95%B4%E5%BD%A2%E3%81%97%E3%81%A6%20%60context%60%20%E3%81%B8%E6%89%8B%E5%8B%95%E3%81%A7%E6%B8%A1%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%0Adef%20_(hyde_documents%2C%20hyde_question)%3A%0A%20%20%20%20hyde_answer_chain%20%3D%20load_rag_prompt()%20%7C%20make_chat_model()%20%7C%20StrOutputParser()%0A%20%20%20%20hyde_answer_chain.invoke(%0A%20%20%20%20%20%20%20%20%7B%22context%22%3A%20format_docs(hyde_documents)%2C%20%22question%22%3A%20hyde_question%7D%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
ec898ebc663334fa4ee8e95b9dfcf0ab