import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%F0%9F%93%8A%20%E8%A9%95%E4%BE%A1%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%AF%E3%80%81Markdown%20%E3%82%B3%E3%83%BC%E3%83%91%E3%82%B9%E3%81%8B%E3%82%89%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E5%B0%8F%E8%A6%8F%E6%A8%A1%E3%81%AA%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%0A%20%20%20%20**Agentic%20RAG%20for%20Dummies**%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%20%5BRAGAS%5D(https%3A%2F%2Fdocs.ragas.io%2F)%20%E3%81%A7%E8%A9%95%E4%BE%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E8%A9%95%E4%BE%A1%E3%81%A7%E4%BD%BF%E3%81%86%E6%8C%87%E6%A8%99%E3%81%AF%E6%AC%A1%E3%81%AE%205%20%E3%81%A4%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%7C%20%E6%8C%87%E6%A8%99%20%7C%20%E7%B3%BB%E7%B5%B1%20%7C%20%E6%B8%AC%E5%AE%9A%E5%AF%BE%E8%B1%A1%20%7C%0A%20%20%20%20%7C---%7C---%7C---%7C%0A%20%20%20%20%7C%20**Answer%20Accuracy**%20%7C%20%5BNVIDIA%20metric%5D(https%3A%2F%2Fdocs.ragas.io%2Fen%2Flatest%2Fconcepts%2Fmetrics%2Favailable_metrics%2Fnvidia_metrics%2F%23answer-accuracy)%20%7C%20%E7%94%9F%E6%88%90%E5%9B%9E%E7%AD%94%E3%81%A8%E5%8F%82%E7%85%A7%E5%9B%9E%E7%AD%94%E3%81%AE%E4%B8%80%E8%87%B4%E5%BA%A6%20%7C%0A%20%20%20%20%7C%20**Context%20Relevance**%20%7C%20%5BNVIDIA%20metric%5D(https%3A%2F%2Fdocs.ragas.io%2Fen%2Flatest%2Fconcepts%2Fmetrics%2Favailable_metrics%2Fnvidia_metrics%2F%23context-relevance)%20%7C%20%E5%8F%96%E5%BE%97%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%8C%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E3%81%8B%20%7C%0A%20%20%20%20%7C%20**Response%20Groundedness**%20%7C%20%5BNVIDIA%20metric%5D(https%3A%2F%2Fdocs.ragas.io%2Fen%2Flatest%2Fconcepts%2Fmetrics%2Favailable_metrics%2Fnvidia_metrics%2F%23response-groundedness)%20%7C%20%E5%9B%9E%E7%AD%94%E5%86%85%E3%81%AE%E4%B8%BB%E5%BC%B5%E3%81%8C%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%A7%E8%A3%8F%E4%BB%98%E3%81%91%E3%82%89%E3%82%8C%E3%82%8B%E3%81%8B%20%7C%0A%20%20%20%20%7C%20**Context%20Precision**%20%7C%20%E6%A4%9C%E7%B4%A2%E6%8C%87%E6%A8%99%20%7C%20%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E5%8F%96%E5%BE%97%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%8C%E7%84%A1%E9%96%A2%E4%BF%82%E3%81%AA%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%88%E3%82%8A%E4%B8%8A%E4%BD%8D%E3%81%AB%E4%B8%A6%E3%81%B6%E3%81%8B%20%7C%0A%20%20%20%20%7C%20**Context%20Recall**%20%7C%20%E6%A4%9C%E7%B4%A2%E6%8C%87%E6%A8%99%20%7C%20%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E5%8F%82%E7%85%A7%E5%9B%9E%E7%AD%94%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E6%83%85%E5%A0%B1%E3%82%92%E7%B6%B2%E7%BE%85%E3%81%99%E3%82%8B%E3%81%8B%20%7C%0A%0A%20%20%20%20%E8%A9%95%E4%BE%A1%E3%81%AE%E6%B5%81%E3%82%8C%3A%0A%0A%20%20%20%201.%20%60notebooks%2Fdata%2Fcurated_ragas_qa.json%60%20%E3%81%8B%E3%82%89%20QA%20%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%202.%20%E5%90%84%E8%B3%AA%E5%95%8F%E3%82%92%20agentic%20RAG%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E6%B8%A1%E3%81%97%E3%80%81%E5%9B%9E%E7%AD%94%E3%81%A8%E5%AE%9F%E9%9A%9B%E3%81%AE%20child%2Fparent%20%E3%83%84%E3%83%BC%E3%83%AB%E5%87%BA%E5%8A%9B%E3%82%92%20%60ragas_evaluation_dataset.csv%60%20%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%203.%20%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%20CSV%20%E3%81%8C%E7%8F%BE%E5%9C%A8%E3%81%AE%20curated%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%A0%E3%81%91%E5%86%8D%E5%88%A9%E7%94%A8%E3%81%97%E3%80%81%E5%8F%A4%E3%81%84%E5%9B%9E%E7%AD%94%E3%82%92%E8%AA%A4%E3%81%A3%E3%81%A6%E6%8E%A1%E7%82%B9%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%204.%20%E5%90%84%20RAGAS%20%E6%8C%87%E6%A8%99%E3%82%92%20%60await%20scorer.ascore(...)%60%20%E3%81%A7%E7%9B%B4%E6%8E%A5%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%80%81%E6%9C%80%E5%BE%8C%E3%81%AB%E5%B9%B3%E5%9D%87%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E7%AE%97%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20RAGAS%20%E3%81%AF%E3%80%81%5B%E5%85%AC%E5%BC%8F%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E3%82%BB%E3%83%83%E3%83%88%E7%94%9F%E6%88%90%E3%82%AC%E3%82%A4%E3%83%89%5D(https%3A%2F%2Fdocs.ragas.io%2Fen%2Fstable%2Fgetstarted%2Frag_testset_generation%2F%23choose-your-llm)%0A%20%20%20%20%E3%81%A7%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%20%60TestsetGenerator.generate_with_langchain_docs(...)%60%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%90%88%E6%88%90%E3%83%86%E3%82%B9%E3%83%88%E3%82%BB%E3%83%83%E3%83%88%E3%82%82%E7%94%9F%E6%88%90%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%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%E3%80%81JSON%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%AE%E6%96%B9%E3%81%8C%E7%A2%BA%E8%AA%8D%E3%80%81%E5%86%8D%E7%8F%BE%E3%80%81%E4%BF%AE%E6%AD%A3%E3%82%92%E3%81%97%E3%82%84%E3%81%99%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E4%BA%BA%E6%89%8B%E3%81%A7%E6%B3%A8%E9%87%88%E3%81%97%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%AF%E3%80%81%E6%84%8F%E5%91%B3%E7%9A%84%E3%81%AA%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%B3%E3%82%B9%E3%80%81%E8%A8%B1%E5%AE%B9%E3%81%A7%E3%81%8D%E3%82%8B%E5%9B%9E%E7%AD%94%E3%81%AE%E5%B7%AE%E7%95%B0%E3%80%81%E6%96%87%E6%9B%B8%E5%9B%BA%E6%9C%89%E3%81%AE%E8%A7%A3%E9%87%88%E8%A6%8F%E5%89%87%E3%82%92%E3%82%88%E3%82%8A%E9%81%A9%E5%88%87%E3%81%AB%E6%8D%89%E3%81%88%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20**%E5%8D%98%E4%B8%80%E3%83%9B%E3%83%83%E3%83%97%E3%81%AE%E5%AF%BE%E8%B1%A1%E7%AF%84%E5%9B%B2%E3%80%82**%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%AF%E5%8D%98%E4%B8%80%E3%83%9B%E3%83%83%E3%83%97%20QA%20%E3%82%92%E8%A9%95%E4%BE%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%90%84%E8%B3%AA%E5%95%8F%E3%81%AF%201%20%E3%81%A4%E3%81%AE%E6%96%87%E6%9B%B8%E9%A0%98%E5%9F%9F%E3%81%A8%201%20%E5%9B%9E%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%81%A7%E5%9B%9E%E7%AD%94%E3%81%A7%E3%81%8D%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9B%E3%83%83%E3%83%97%20QA%20%E3%81%A7%E3%81%AF%E3%80%81%E8%A4%87%E6%95%B0%E3%81%AE%E7%AF%80%E3%83%BB%E6%96%87%E6%9B%B8%E3%81%AE%E8%A8%BC%E6%8B%A0%E3%82%92%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E3%81%8B%E3%80%81%E9%80%A3%E7%B6%9A%E3%81%97%E3%81%9F%E6%8E%A8%E8%AB%96%E6%89%8B%E9%A0%86%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%E3%82%88%E3%82%8A%E6%B7%B1%E3%81%84%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E8%A9%95%E4%BE%A1%E3%81%AB%E3%81%AF%E6%9C%89%E7%94%A8%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E3%81%AE%E9%96%A2%E9%80%A3%E6%80%A7%E3%80%81%E6%A0%B9%E6%8B%A0%E6%80%A7%E3%80%81%E5%9B%9E%E7%AD%94%E5%93%81%E8%B3%AA%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%82%84%E3%81%99%E3%81%8F%E4%BF%9D%E3%81%A4%E3%81%9F%E3%82%81%E3%80%81%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%E6%84%8F%E5%9B%B3%E7%9A%84%E3%81%AB%E5%AF%BE%E8%B1%A1%E5%A4%96%E3%81%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20---%0A%20%20%20%20%23%23%23%20%F0%9F%93%84%20%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%20Markdown%20%E6%96%87%E6%9B%B8%0A%20%20%20%20-%20%60javascript_tutorial.md%60%20%E2%80%94%20JavaScript%20Tutorial%0A%20%20%20%20-%20%60blockchain.md%60%20%E2%80%94%20Blockchain%20for%20Beginners%0A%20%20%20%20-%20%60fortinet.md%60%20%E2%80%94%20Fortinet%20FortiGate%20Security%20Target%0A%0A%20%20%20%20%3E%20**%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6%3A**%20%E3%83%AB%E3%83%BC%E3%83%88%20README%20%E3%81%AB%E8%A8%98%E8%BC%89%E3%81%95%E3%82%8C%E3%81%9F%203%20%E3%81%A4%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%20PDF%20%E3%82%92%E6%9C%9F%E5%BE%85%E3%81%95%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%A7%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%80%81%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AE%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%0A%20%20%20%20%3E%20%60markdown_docs%60%E3%80%81%60parent_store%60%E3%80%81%60qdrant_db%60%20%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E8%A8%AD%E5%AE%9A%E6%B8%88%E3%81%BF%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%AE%20Ollama%20%E3%83%A2%E3%83%87%E3%83%AB%E3%82%82%20pull%20%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%3E%20%E6%A8%99%E6%BA%96%E3%81%AE%E3%83%9B%E3%82%B9%E3%83%88%E5%9E%8B%20Colab%20%E3%81%AF%20Ollama%20%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E5%9B%9E%E7%AD%94%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E5%88%A4%E5%AE%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%B8%A1%E6%96%B9%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%AA%E3%81%84%E9%99%90%E3%82%8A%E3%80%81%E3%81%93%E3%81%AE%E8%A9%95%E4%BE%A1%E3%81%AF%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E5%AE%9F%E8%A1%8C%E5%90%91%E3%81%91%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20---%0A%20%20%20%20%23%23%23%20%E8%AA%AD%E3%81%BF%E6%96%B9%0A%0A%20%20%20%20%E3%82%BB%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%204%20%E3%81%AF%E8%A9%95%E4%BE%A1%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90%E3%80%815%E3%80%9C6%20%E3%81%AF%20RAG%20%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%81%BE%E3%81%9F%E3%81%AF%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E5%87%BA%E5%8A%9B%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%0A%20%20%20%207%E3%80%9C11%20%E3%81%AF%E6%8E%A1%E7%82%B9%E3%81%A8%E5%8F%AF%E8%A6%96%E5%8C%96%E3%80%8112%20%E3%81%AF%E7%B5%90%E6%9E%9C%E3%81%AE%E8%A7%A3%E9%87%88%E3%81%AB%E3%81%82%E3%81%9F%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E7%95%AA%E5%8F%B7%E3%81%AE%E4%BB%98%E3%81%84%E3%81%9F%E8%A6%8B%E5%87%BA%E3%81%97%E3%81%AE%E5%89%8D%E3%81%AB%E3%81%82%E3%82%8B%202%20%E3%81%A4%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BB%E3%83%AB%E3%81%AF%E6%BA%96%E5%82%99%E3%81%A7%E3%80%81%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%A8%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%91%E3%82%B9%E3%81%AE%E8%A7%A3%E6%B1%BA%E3%80%81%0A%20%20%20%20%60project%2F%60%20%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%A8%20RAGAS%20%E4%BA%92%E6%8F%9B%E3%82%B7%E3%83%A0%E3%81%AE%E9%81%A9%E7%94%A8%E3%82%92%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BB%E3%83%AB%E3%81%AE%E7%9B%B4%E5%89%8D%E3%81%AB%E3%80%81%E3%81%9D%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%8C%E4%BD%95%E3%82%92%E3%81%99%E3%82%8B%E3%81%8B%E3%82%92%E8%AA%AC%E6%98%8E%E3%81%99%E3%82%8B%E8%A7%A3%E8%AA%AC%E3%82%BB%E3%83%AB%E3%82%92%E7%BD%AE%E3%81%84%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20RAG%20%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%81%A8%E6%8E%A1%E7%82%B9%E3%81%AF%E5%AE%9F%E8%A1%8C%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A7%E4%BF%9D%E8%AD%B7%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E6%8A%BC%E3%81%95%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%20Ollama%20%E3%82%84%E5%88%A4%E5%AE%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%81%B8%0A%20%20%20%20%E6%8E%A5%E7%B6%9A%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E8%AA%AD%E3%82%80%E3%81%A0%E3%81%91%E3%81%A7%E3%81%82%E3%82%8C%E3%81%B0%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6%E3%81%8C%E6%8F%83%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E5%95%8F%E9%A1%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20---%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%A9%95%E4%BE%A1%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%8C%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%91%E3%82%B9%E3%82%92%E8%A7%A3%E6%B1%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_()%3A%0A%20%20%20%20import%20ast%0A%20%20%20%20import%20json%0A%20%20%20%20import%20sys%0A%20%20%20%20import%20types%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20seaborn%20as%20sns%0A%0A%20%20%20%20NOTEBOOK_DIR%20%3D%20Path(__file__).resolve().parent%0A%20%20%20%20REPOSITORY_ROOT%20%3D%20NOTEBOOK_DIR.parent%0A%20%20%20%20PROJECT_ROOT%20%3D%20REPOSITORY_ROOT%20%2F%20%22project%22%0A%20%20%20%20DATA_DIR%20%3D%20NOTEBOOK_DIR%20%2F%20%22data%22%0A%20%20%20%20MARKDOWN_DIR%20%3D%20REPOSITORY_ROOT%20%2F%20%22markdown_docs%22%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20DATA_DIR%2C%0A%20%20%20%20%20%20%20%20MARKDOWN_DIR%2C%0A%20%20%20%20%20%20%20%20NOTEBOOK_DIR%2C%0A%20%20%20%20%20%20%20%20PROJECT_ROOT%2C%0A%20%20%20%20%20%20%20%20REPOSITORY_ROOT%2C%0A%20%20%20%20%20%20%20%20ast%2C%0A%20%20%20%20%20%20%20%20json%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20pd%2C%0A%20%20%20%20%20%20%20%20plt%2C%0A%20%20%20%20%20%20%20%20sns%2C%0A%20%20%20%20%20%20%20%20sys%2C%0A%20%20%20%20%20%20%20%20types%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(DATA_DIR%2C%20MARKDOWN_DIR%2C%20PROJECT_ROOT%2C%20REPOSITORY_ROOT%2C%20mo)%3A%0A%20%20%20%20mo.md(f%22%22%22%0A%20%20%20%20%23%23%23%20%E8%A7%A3%E6%B1%BA%E3%81%95%E3%82%8C%E3%81%9F%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%91%E3%82%B9%0A%0A%20%20%20%20%7C%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%91%E3%82%B9%20%7C%20%E8%A7%A3%E6%B1%BA%E5%85%88%20%7C%0A%20%20%20%20%7C---%7C---%7C%0A%20%20%20%20%7C%20%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%20%7C%20%60%7BREPOSITORY_ROOT%7D%60%20%7C%0A%20%20%20%20%7C%20%60project%60%20%7C%20%60%7BPROJECT_ROOT%7D%60%20%7C%0A%20%20%20%20%7C%20%60notebooks%2Fdata%60%20%7C%20%60%7BDATA_DIR%7D%60%20%7C%0A%20%20%20%20%7C%20%60markdown_docs%60%20%7C%20%60%7BMARKDOWN_DIR%7D%60%20%7C%0A%0A%20%20%20%20%23%23%23%20RAGAS%20%E3%81%AE%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%83%91%E3%82%B9%E4%BA%92%E6%8F%9B%E3%82%B7%E3%83%A0%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%20%60project%2F%60%20%E3%82%92%20%60sys.path%60%20%E3%81%AB%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E3%80%81%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%81%B4%E3%81%AE%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%A8%20RAGAS%20%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20RAGAS%200.4.x%20%E3%81%AF%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%20%60langchain_community.chat_models.vertexai%60%20%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AF%E6%96%B0%E3%81%97%E3%81%84%20%60langchain-community%60%20%E3%81%A7%E3%81%AF%E5%88%A5%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%B8%E7%A7%BB%E5%8B%95%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A7%E3%81%AF%0A%20%20%20%20%60ModuleNotFoundError%60%20%E3%81%A7%20import%20%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E4%B8%8B%E3%81%AE%E3%82%AC%E3%83%BC%E3%83%89%E3%81%AF**%E3%81%9D%E3%81%AE%20import%20%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A0%E3%81%91**%E3%82%92%E9%98%B2%E3%81%90%E3%81%9F%E3%82%81%E3%81%AE%0A%20%20%20%20%E3%83%80%E3%83%9F%E3%83%BC%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%A7%E3%80%81Vertex%20AI%20%E3%82%92%E5%AE%9F%E9%9A%9B%E3%81%AB%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%82%8F%E3%81%91%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E8%A9%95%E4%BE%A1%E3%81%AB%E3%81%AF%E5%BC%95%E3%81%8D%E7%B6%9A%E3%81%8D%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AE%0A%20%20%20%20Ollama%20%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%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_(PROJECT_ROOT%2C%20sys%2C%20types)%3A%0A%20%20%20%20if%20str(PROJECT_ROOT)%20not%20in%20sys.path%3A%0A%20%20%20%20%20%20%20%20sys.path.insert(0%2C%20str(PROJECT_ROOT))%0A%0A%20%20%20%20%23%20RAGAS%200.4.3%20%E3%81%AF%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%81%AA%E3%83%91%E3%82%B9%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%80%82%0A%20%20%20%20%23%20%E3%81%93%E3%81%AE%E3%82%AC%E3%83%BC%E3%83%89%E3%81%AF%E3%81%9D%E3%81%AE%20import%20%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A0%E3%81%91%E3%82%92%E9%98%B2%E3%81%8E%E3%80%81%E8%A9%95%E4%BE%A1%E3%81%AB%E3%81%AF%E5%BC%95%E3%81%8D%E7%B6%9A%E3%81%8D%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%20Ollama%20%E3%82%92%E4%BD%BF%E3%81%86%E3%80%82%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20import%20langchain_community.chat_models.vertexai%20%20%23%20noqa%3A%20F401%0A%20%20%20%20except%20ModuleNotFoundError%3A%0A%20%20%20%20%20%20%20%20vertexai_module%20%3D%20types.ModuleType(%22langchain_community.chat_models.vertexai%22)%0A%0A%20%20%20%20%20%20%20%20class%20ChatVertexAI%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%0A%20%20%20%20%20%20%20%20vertexai_module.ChatVertexAI%20%3D%20ChatVertexAI%0A%20%20%20%20%20%20%20%20sys.modules%5B%22langchain_community.chat_models.vertexai%22%5D%20%3D%20vertexai_module%0A%0A%20%20%20%20import%20config%20as%20project_config%0A%20%20%20%20from%20core.rag_system%20import%20RAGSystem%0A%20%20%20%20from%20langchain_core.messages%20import%20HumanMessage%0A%20%20%20%20from%20openai%20import%20AsyncOpenAI%0A%20%20%20%20from%20ragas.llms%20import%20llm_factory%0A%20%20%20%20from%20ragas.metrics.collections%20import%20(%0A%20%20%20%20%20%20%20%20AnswerAccuracy%2C%0A%20%20%20%20%20%20%20%20ContextPrecision%2C%0A%20%20%20%20%20%20%20%20ContextRecall%2C%0A%20%20%20%20%20%20%20%20ContextRelevance%2C%0A%20%20%20%20%20%20%20%20ResponseGroundedness%2C%0A%20%20%20%20)%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20AnswerAccuracy%2C%0A%20%20%20%20%20%20%20%20AsyncOpenAI%2C%0A%20%20%20%20%20%20%20%20ContextPrecision%2C%0A%20%20%20%20%20%20%20%20ContextRecall%2C%0A%20%20%20%20%20%20%20%20ContextRelevance%2C%0A%20%20%20%20%20%20%20%20HumanMessage%2C%0A%20%20%20%20%20%20%20%20RAGSystem%2C%0A%20%20%20%20%20%20%20%20ResponseGroundedness%2C%0A%20%20%20%20%20%20%20%20llm_factory%2C%0A%20%20%20%20%20%20%20%20project_config%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%204.%20QA%20%E8%A9%95%E4%BE%A1%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E7%AF%80%E3%81%A7%E3%81%AF%E3%80%81%60notebooks%2Fdata%2Fcurated_ragas_qa.json%60%20%E3%81%8B%E3%82%89%E3%82%B3%E3%83%B3%E3%83%91%E3%82%AF%E3%83%88%E3%81%AA%E8%A9%95%E4%BE%A1%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%90%84%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E3%81%AF%E6%AC%A1%E3%81%AE%E9%A0%85%E7%9B%AE%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60question%60%3A%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E8%B3%AA%E5%95%8F%0A%20%20%20%20-%20%60reference%60%3A%20%E4%BA%BA%E6%89%8B%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E6%9C%9F%E5%BE%85%E5%9B%9E%E7%AD%94%0A%20%20%20%20-%20%60markdown_file%60%3A%20%E3%82%BD%E3%83%BC%E3%82%B9%E6%96%87%E6%9B%B8%0A%20%20%20%20-%20%60context_phrases%60%3A%20Markdown%20%E3%81%8B%E3%82%89%E5%8F%82%E7%85%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E7%9F%AD%E3%81%84%E3%82%A2%E3%83%B3%E3%82%AB%E3%83%BC%0A%0A%20%20%20%20%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AA%20QA%20%E3%82%BB%E3%83%83%E3%83%88%E3%81%AB%E3%81%AF%E3%80%81%E5%90%84%20Markdown%20%E6%96%87%E6%9B%B8%E3%81%8B%E3%82%89%2010%20%E4%BB%B6%E3%81%9A%E3%81%A4%E3%81%AE%20**30%20%E5%80%8B%E3%81%AE%E5%8D%98%E4%B8%80%E3%83%9B%E3%83%83%E3%83%97%E7%B5%84**%20%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%20JSON%20%E3%81%AB%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%8F%E3%81%97%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%AD%E3%82%B8%E3%83%83%E3%82%AF%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%9B%E3%81%9A%E3%81%AB%E8%A9%95%E4%BE%A1%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E7%A2%BA%E8%AA%8D%E3%83%BB%E6%94%B9%E5%96%84%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%204.1%20%E5%8F%82%E7%85%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E6%8A%BD%E5%87%BA%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%0A%0A%20%20%20%20%60extract_context%60%20%E3%81%AF%20%60context_phrases%60%20%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%97%E3%81%9F%E4%BD%8D%E7%BD%AE%E3%81%AE%E5%91%A8%E8%BE%BA%E3%81%A0%E3%81%91%E3%82%92%20Markdown%20%E3%81%8B%E3%82%89%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E3%80%81%0A%20%20%20%20%E9%87%8D%E3%81%AA%E3%82%8A%E5%90%88%E3%81%86%E7%AF%84%E5%9B%B2%E3%81%AF%201%20%E3%81%A4%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%96%87%E6%9B%B8%E5%85%A8%E4%BD%93%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E8%A9%B2%E5%BD%93%E7%AE%87%E6%89%80%E3%81%A0%E3%81%91%E3%82%92%E5%8F%82%E7%85%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%0A%20%20%20%20Context%20Precision%20%2F%20Context%20Recall%20%E3%81%8C%E5%AE%9F%E9%9A%9B%E3%81%AE%E6%A0%B9%E6%8B%A0%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E6%B8%AC%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%83%95%E3%83%AC%E3%83%BC%E3%82%BA%E3%81%8C%201%20%E3%81%A4%E3%82%82%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E5%85%88%E9%A0%AD%20%60window%60%20%E6%96%87%E5%AD%97%E3%81%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%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.function%0Adef%20extract_context(%0A%20%20%20%20markdown_file%3A%20str%2C%0A%20%20%20%20phrases%3A%20list%5Bstr%5D%2C%0A%20%20%20%20document_texts%3A%20dict%5Bstr%2C%20str%5D%2C%0A%20%20%20%20window%3A%20int%20%3D%201400%2C%0A)%20-%3E%20str%3A%0A%20%20%20%20%22%22%22%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E5%90%84%E3%83%95%E3%83%AC%E3%83%BC%E3%82%BA%E3%81%AE%E5%91%A8%E5%9B%B2%E3%81%8B%E3%82%89%E3%80%81%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AB%E6%A0%B9%E3%81%96%E3%81%97%E3%81%9F%E7%B0%A1%E6%BD%94%E3%81%AA%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%22%22%22%0A%20%20%20%20text%20%3D%20document_texts%5Bmarkdown_file%5D%0A%20%20%20%20lower_text%20%3D%20text.lower()%0A%20%20%20%20spans%20%3D%20%5B%5D%0A%0A%20%20%20%20for%20phrase%20in%20phrases%3A%0A%20%20%20%20%20%20%20%20position%20%3D%20lower_text.find(phrase.lower())%0A%20%20%20%20%20%20%20%20if%20position%20%3C%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20start%20%3D%20max(0%2C%20position%20-%20window%20%2F%2F%203)%0A%20%20%20%20%20%20%20%20end%20%3D%20min(len(text)%2C%20position%20%2B%20len(phrase)%20%2B%20window)%0A%20%20%20%20%20%20%20%20spans.append((start%2C%20end))%0A%0A%20%20%20%20if%20not%20spans%3A%0A%20%20%20%20%20%20%20%20return%20text%5B%3Awindow%5D.strip()%0A%0A%20%20%20%20spans.sort()%0A%20%20%20%20merged_spans%20%3D%20%5B%5D%0A%20%20%20%20for%20start%2C%20end%20in%20spans%3A%0A%20%20%20%20%20%20%20%20if%20merged_spans%20and%20start%20%3C%3D%20merged_spans%5B-1%5D%5B1%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20previous_start%2C%20previous_end%20%3D%20merged_spans%5B-1%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20merged_spans%5B-1%5D%20%3D%20(previous_start%2C%20max(previous_end%2C%20end))%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20merged_spans.append((start%2C%20end))%0A%0A%20%20%20%20return%20%22%5Cn%5Cn...%5Cn%5Cn%22.join(%0A%20%20%20%20%20%20%20%20text%5Bstart%3Aend%5D.strip()%20for%20start%2C%20end%20in%20merged_spans%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.2%20%E5%89%8D%E6%8F%90%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%A2%BA%E8%AA%8D%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E8%A9%95%E4%BE%A1%E3%81%AF%E3%80%81README%20%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%20PDF%20%E3%82%92%20Markdown%20%E5%8C%96%E3%81%97%E3%81%9F%20%60markdown_docs%2F%60%20%E3%82%92%E5%89%8D%E6%8F%90%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E5%A4%89%E6%8F%9B%E6%B8%88%E3%81%BF%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A8%20%60*.md%60%20%E3%81%AE%E6%9C%89%E7%84%A1%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%80%81%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%95%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%20%60mo.stop%60%20%E3%81%A7%0A%20%20%20%20%E4%BB%A5%E9%99%8D%E3%81%AE%E5%87%A6%E7%90%86%E3%82%92%E6%AD%A2%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%60mo.stop%60%20%E3%81%AF%E3%81%93%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%99%E3%82%8B%E5%BE%8C%E7%B6%9A%E3%82%BB%E3%83%AB%E3%81%AB%E3%82%82%E4%BC%9D%E6%92%AD%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E3%81%9D%E3%82%8D%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E7%92%B0%E5%A2%83%E3%81%A7%E3%82%82%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AF%E5%AE%89%E5%85%A8%E3%81%AB%E9%96%8B%E3%81%91%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_(MARKDOWN_DIR%2C%20mo)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20MARKDOWN_DIR.is_dir()%2C%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%20warning%20%7C%20%60markdown_docs%60%20%E3%81%8C%E6%9C%AA%E4%BD%9C%E6%88%90%E3%81%A7%E3%81%99%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%60%7BMARKDOWN_DIR%7D%60%20%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E5%85%88%E3%81%AB%0A%20%20%20%20%20%20%20%20%20%20%20%20%60agentic_rag_ja.py%60%20%E3%81%BE%E3%81%9F%E3%81%AF%20%60pdf_to_markdown_ja.py%60%20%E3%81%A7%20PDF%20%E3%82%92%0A%20%20%20%20%20%20%20%20%20%20%20%20Markdown%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20markdown_paths%20%3D%20sorted(MARKDOWN_DIR.glob(%22*.md%22))%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20markdown_paths%2C%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%20warning%20%7C%20Markdown%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%60%7BMARKDOWN_DIR%7D%60%20%E3%81%AB%20%60*.md%60%20%E3%81%8C%201%20%E3%81%A4%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20PDF%20%E3%81%AE%E5%A4%89%E6%8F%9B%E3%81%8C%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(markdown_paths%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.3%20Markdown%20%E6%96%87%E6%9B%B8%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%0A%0A%20%20%20%20%E8%A6%8B%E3%81%A4%E3%81%8B%E3%81%A3%E3%81%9F%20Markdown%20%E3%82%92%E3%81%99%E3%81%B9%E3%81%A6%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E3%81%93%E3%81%AE%E8%A9%95%E4%BE%A1%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%8C%E5%89%8D%E6%8F%90%E3%81%A8%E3%81%99%E3%82%8B%203%20%E3%81%A4%E3%81%AE%E6%96%87%E6%9B%B8%0A%20%20%20%20%EF%BC%88%60javascript_tutorial.md%60%20%2F%20%60blockchain.md%60%20%2F%20%60fortinet.md%60%EF%BC%89%E3%81%8C%E3%81%9D%E3%82%8D%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%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%201%20%E3%81%A4%E3%81%A7%E3%82%82%E6%AC%A0%E3%81%91%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A8%E5%8F%82%E7%85%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E3%81%93%E3%81%93%E3%81%A7%E5%81%9C%E6%AD%A2%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_(markdown_paths%2C%20mo)%3A%0A%20%20%20%20document_texts%20%3D%20%7B%0A%20%20%20%20%20%20%20%20path.name%3A%20path.read_text(encoding%3D%22utf-8%22)%20for%20path%20in%20markdown_paths%0A%20%20%20%20%7D%0A%20%20%20%20required_documents%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22javascript_tutorial.md%22%2C%0A%20%20%20%20%20%20%20%20%22blockchain.md%22%2C%0A%20%20%20%20%20%20%20%20%22fortinet.md%22%2C%0A%20%20%20%20%7D%0A%20%20%20%20missing_documents%20%3D%20required_documents%20-%20set(document_texts)%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20bool(missing_documents)%2C%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%20warning%20%7C%20%E8%A9%95%E4%BE%A1%E7%94%A8%E3%81%AE%20Markdown%20%E3%81%8C%E4%B8%8D%E8%B6%B3%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%E4%B8%8D%E8%B6%B3%3A%20%60%7Bsorted(missing_documents)%7D%60%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%E3%81%93%E3%81%AE%E8%A9%95%E4%BE%A1%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%AF%20README%20%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%20PDF%20%E3%82%92%E5%89%8D%E6%8F%90%E3%81%AB%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(document_texts%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.4%20QA%20%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%0A%0A%20%20%20%20curated%20QA%20%E3%81%AE%20JSON%20%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E5%90%84%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%20%60context_phrases%60%20%E3%82%92%E6%89%8B%E6%8E%9B%E3%81%8B%E3%82%8A%E3%81%AB%20%60extract_context%60%20%E3%81%A7%0A%20%20%20%20%E5%8F%82%E7%85%A7%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E3%80%81%60reference_contexts%60%20%E3%81%A8%E3%81%97%E3%81%A6%E4%BB%98%E4%B8%8E%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%87%BA%E6%9D%A5%E4%B8%8A%E3%81%8C%E3%81%A3%E3%81%9F%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%20%60curated_df%60%20%E3%81%A8%E3%81%97%E3%81%A6%20DataFrame%20%E5%8C%96%E3%81%97%E3%80%81%E4%BB%A5%E9%99%8D%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%83%BB%E6%8E%A1%E7%82%B9%E3%81%A7%E4%BD%BF%E3%81%84%E5%9B%9E%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_(DATA_DIR%2C%20document_texts%2C%20json%2C%20markdown_paths%2C%20mo%2C%20pd)%3A%0A%20%20%20%20qa_path%20%3D%20DATA_DIR%20%2F%20%22curated_ragas_qa.json%22%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20qa_path.is_file()%2C%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%20warning%20%7C%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%60%7Bqa_path%7D%60%20%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E5%AE%8C%E5%85%A8%E3%81%AA%E7%8A%B6%E6%85%8B%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%0A%20%20%20%20%20%20%20%20%20%20%20%20%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20source_records%20%3D%20json.loads(qa_path.read_text(encoding%3D%22utf-8%22))%0A%20%20%20%20curated_records%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**record%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22reference_contexts%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20extract_context(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20record%5B%22markdown_file%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20record%5B%22context_phrases%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document_texts%2C%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%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20record%20in%20source_records%0A%20%20%20%20%5D%0A%20%20%20%20curated_df%20%3D%20pd.DataFrame(curated_records)%0A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%E2%9C%85%20%60%7Bqa_path%7D%60%20%E3%81%8B%E3%82%89%20%7Blen(markdown_paths)%7D%20%E5%80%8B%E3%81%AE%20Markdown%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%20%7Blen(curated_records)%7D%20%E4%BB%B6%E3%81%AE%20QA%20%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%BA%96%E5%82%99%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%20curated_df%2C%20curated_records%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.5%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E7%A2%BA%E8%AA%8D%0A%0A%20%20%20%20%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E8%A1%A8%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60source%60%20%2F%20%60question%60%20%2F%20%60reference%60%20%E3%82%92%E4%B8%A6%E3%81%B9%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%0A%20%20%20%20%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%94%E3%81%A8%E3%81%AB%E8%B3%AA%E5%95%8F%E3%81%A8%E6%9C%9F%E5%BE%85%E5%9B%9E%E7%AD%94%E3%81%AE%E5%AF%BE%E5%BF%9C%E3%81%8C%E5%A6%A5%E5%BD%93%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E7%9B%AE%E8%A6%96%E3%81%A7%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%A7%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_(curated_df%2C%20mo)%3A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(f%22%E5%BD%A2%E7%8A%B6%3A%20%60%7Bcurated_df.shape%7D%60%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.table(curated_df%5B%5B%22source%22%2C%20%22question%22%2C%20%22reference%22%5D%5D)%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.6%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%20CSV%20%E3%81%AB%E4%BF%9D%E5%AD%98%EF%BC%88%E4%BB%BB%E6%84%8F%EF%BC%89%0A%0A%20%20%20%20%E6%BA%96%E5%82%99%E3%81%97%E3%81%9F%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%20%60notebooks%2Fragas_qa_testset.csv%60%20%E3%81%AB%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%8E%A1%E7%82%B9%E3%81%AB%E3%81%AF%E5%BF%85%E9%A0%88%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8C%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%AE%E5%B7%AE%E5%88%86%E3%82%92%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%97%E3%81%9F%E3%82%8A%E3%80%81%0A%20%20%20%20%E8%A1%A8%E8%A8%88%E7%AE%97%E3%82%BD%E3%83%95%E3%83%88%E3%81%A7%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%9F%E3%82%8A%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AB%E4%BE%BF%E5%88%A9%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_(mo)%3A%0A%20%20%20%20save_qa_dataset_button%20%3D%20mo.ui.run_button(label%3D%22QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%20CSV%20%E3%82%92%E4%BF%9D%E5%AD%98%22)%0A%20%20%20%20save_qa_dataset_button%0A%20%20%20%20return%20(save_qa_dataset_button%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%99%E3%81%A8%E3%80%81%E4%B8%8B%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%8C%20%60curated_df%60%20%E3%82%92%20CSV%20%E3%81%AB%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E9%96%93%E3%81%AF%20%60mo.stop%60%20%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E4%BF%9D%E5%AD%98%E5%87%A6%E7%90%86%E3%81%AF%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%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_(NOTEBOOK_DIR%2C%20curated_df%2C%20mo%2C%20save_qa_dataset_button)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20save_qa_dataset_button.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20qa_testset_path%20%3D%20NOTEBOOK_DIR%20%2F%20%22ragas_qa_testset.csv%22%0A%20%20%20%20curated_df.to_csv(qa_testset_path%2C%20index%3DFalse)%0A%20%20%20%20mo.md(f%22%E2%9C%85%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%60%7Bqa_testset_path%7D%60%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%205.%20QA%20%E8%B3%AA%E5%95%8F%E3%81%A7%20RAG%20%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%92%E5%AE%9F%E8%A1%8C%0A%0A%20%20%20%20**%E3%80%8CRAG%20%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%A6%E8%B3%AA%E5%95%8F%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%80%8D**%20%E3%82%92%E9%81%B8%E3%81%B6%E3%81%A8%E3%80%81%E5%90%84%20QA%20%E8%B3%AA%E5%95%8F%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%20RAG%20%E3%82%92%201%20%E5%9B%9E%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%20LLM%20%E3%81%AE%E6%80%A7%E8%83%BD%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%81%AF%E6%95%B0%E5%88%86%E3%81%8B%E3%81%8B%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60ragas_evaluation_dataset.csv%60%20%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%80%81%E7%8F%BE%E5%9C%A8%E3%81%AE%20curated%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%0A%20%20%20%20**%E3%80%8C%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E3%81%AE%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%80%8D**%20%E3%82%92%E9%81%B8%E3%81%B9%E3%81%BE%E3%81%99%E3%80%82QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%80%81%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E5%8C%96%E3%80%81%0A%20%20%20%20%E6%A4%9C%E7%B4%A2%E8%A8%AD%E5%AE%9A%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AF%E3%80%81RAG%20%E3%82%92%E5%86%8D%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%0A%20%20%20%20%E4%B8%8B%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E5%AE%9F%E8%A1%8C%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%A8%E5%AE%9F%E8%A1%8C%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A0%E3%81%91%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%AE%9F%E9%9A%9B%E3%81%AE%E5%87%A6%E7%90%86%E3%81%AF%206%20%E7%AF%80%E3%81%A7%E8%A1%8C%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_(mo)%3A%0A%20%20%20%20output_preparation_mode%20%3D%20mo.ui.radio(%0A%20%20%20%20%20%20%20%20options%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E3%81%AE%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22RAG%20%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%A6%E8%B3%AA%E5%95%8F%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%22%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20value%3D%22%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E3%81%AE%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%22%2C%0A%20%20%20%20%20%20%20%20label%3D%22%E8%A9%95%E4%BE%A1%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%20RAG%20%E5%87%BA%E5%8A%9B%22%2C%0A%20%20%20%20)%0A%20%20%20%20prepare_outputs_button%20%3D%20mo.ui.run_button(label%3D%22RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E6%BA%96%E5%82%99%22)%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20output_preparation_mode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20prepare_outputs_button%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%20output_preparation_mode%2C%20prepare_outputs_button%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%206.%20%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%20RAG%20%E5%87%BA%E5%8A%9B%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%9F%E3%81%AF%E6%BA%96%E5%82%99%0A%0A%20%20%20%20%E6%8C%87%E6%A8%99%E3%81%AB%E3%81%AF%E8%B3%AA%E5%95%8F%E3%80%81%E7%94%9F%E6%88%90%E5%9B%9E%E7%AD%94%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AB%E5%8F%96%E5%BE%97%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%80%81%E5%8F%82%E7%85%A7%E5%9B%9E%E7%AD%94%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E9%9A%9C%E5%AE%B3%E3%81%AF%20%60run_error%60%20%E3%81%AB%E4%BF%9D%E6%8C%81%E3%81%97%E3%80%81%E9%80%9A%E5%B8%B8%E3%81%AE%E4%BD%8E%E5%93%81%E8%B3%AA%E3%81%AA%E5%9B%9E%E7%AD%94%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%82%8F%E3%81%9A%E3%81%AB%E6%8C%87%E6%A8%99%E8%A8%88%E7%AE%97%E3%81%8B%E3%82%89%E9%99%A4%E5%A4%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%206.1%20%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E5%87%BA%E5%8A%9B%E3%81%AE%E6%95%B4%E5%90%88%E6%80%A7%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%0A%0A%20%20%20%20%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%20CSV%20%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E6%8E%A1%E7%82%B9%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E3%81%82%E3%81%A8%E3%81%AB**%E5%8F%A4%E3%81%84%E5%9B%9E%E7%AD%94%E3%82%92%E6%8E%A1%E7%82%B9%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86**%E6%81%90%E3%82%8C%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%60expected_dataset_frame%60%20%E3%81%AF%E7%8F%BE%E5%9C%A8%E3%81%AE%20curated%20%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E6%9C%9F%E5%BE%85%E3%81%95%E3%82%8C%E3%82%8B%20%60source%60%20%2F%20%60user_input%60%20%2F%20%60reference%60%20%E3%82%92%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%80%81%0A%20%20%20%20%60assert_saved_outputs_match_dataset%60%20%E3%81%AF%E3%81%9D%E3%82%8C%E3%81%A8%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%20CSV%20%E3%82%92%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%E3%80%81%E9%A3%9F%E3%81%84%E9%81%95%E3%81%86%E5%A0%B4%E5%90%88%E3%81%AF%E6%98%8E%E7%A4%BA%E7%9A%84%E3%81%AB%E4%BE%8B%E5%A4%96%E3%82%92%E9%80%81%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_(pd)%3A%0A%20%20%20%20def%20expected_dataset_frame(records%3A%20list%5Bdict%5D)%20-%3E%20pd.DataFrame%3A%0A%20%20%20%20%20%20%20%20return%20pd.DataFrame(%0A%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%22source%22%3A%20record%5B%22source%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22user_input%22%3A%20record%5B%22question%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22reference%22%3A%20record%5B%22reference%22%5D%2C%0A%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%20for%20record%20in%20records%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20def%20assert_saved_outputs_match_dataset(%0A%20%20%20%20%20%20%20%20saved_outputs%3A%20pd.DataFrame%2C%20records%3A%20list%5Bdict%5D%0A%20%20%20%20)%20-%3E%20None%3A%0A%20%20%20%20%20%20%20%20required_columns%20%3D%20%7B%22source%22%2C%20%22user_input%22%2C%20%22reference%22%7D%0A%20%20%20%20%20%20%20%20missing_columns%20%3D%20required_columns%20-%20set(saved_outputs.columns)%0A%20%20%20%20%20%20%20%20if%20missing_columns%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20RuntimeError(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%20RAG%20%E5%87%BA%E5%8A%9B%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E5%88%97%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%3A%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%7Bsorted(missing_columns)%7D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20expected_outputs%20%3D%20expected_dataset_frame(records).reset_index(drop%3DTrue)%0A%20%20%20%20%20%20%20%20actual_outputs%20%3D%20saved_outputs%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22source%22%2C%20%22user_input%22%2C%20%22reference%22%5D%0A%20%20%20%20%20%20%20%20%5D.reset_index(drop%3DTrue)%0A%20%20%20%20%20%20%20%20if%20not%20actual_outputs.equals(expected_outputs)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20RuntimeError(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%20ragas_evaluation_dataset.csv%20%E3%81%AF%E7%8F%BE%E5%9C%A8%E3%81%AE%20curated%20QA%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E6%8E%A1%E7%82%B9%E5%89%8D%E3%81%AB%20RAG%20%E3%82%92%E5%86%8D%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20return%20(assert_saved_outputs_match_dataset%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%206.2%20%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%88%97%E3%81%AE%E3%83%91%E3%83%BC%E3%82%B9%0A%0A%20%20%20%20%60retrieved_contexts%60%20%E3%81%A8%20%60reference_contexts%60%20%E3%81%AF%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81CSV%20%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%A8%0A%20%20%20%20%60%22%5B'...'%2C%20'...'%5D%22%60%20%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%201%20%E3%81%A4%E3%81%AE%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%60parse_context_list%60%20%E3%81%AF%0A%20%20%20%20%60ast.literal_eval%60%20%E3%81%A7%E3%83%AA%E3%82%B9%E3%83%88%E3%81%B8%E5%BE%A9%E5%85%83%E3%81%97%E3%80%81%E5%A4%B1%E6%95%97%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%82%84%E6%AC%A0%E6%90%8D%E5%80%A4%E3%81%AE%E5%A0%B4%E5%90%88%E3%82%82%E6%8C%87%E6%A8%99%E8%A8%88%E7%AE%97%E3%81%8C%E5%A3%8A%E3%82%8C%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%0A%20%20%20%20%E5%AE%89%E5%85%A8%E3%81%AA%E5%80%A4%EF%BC%88%E5%8D%98%E4%B8%80%E8%A6%81%E7%B4%A0%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%81%BE%E3%81%9F%E3%81%AF%E7%A9%BA%E3%83%AA%E3%82%B9%E3%83%88%EF%BC%89%E3%81%B8%E3%83%95%E3%82%A9%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%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_(ast%2C%20pd)%3A%0A%20%20%20%20def%20parse_context_list(value%3A%20object)%20-%3E%20list%5Bstr%5D%3A%0A%20%20%20%20%20%20%20%20if%20isinstance(value%2C%20list)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20value%0A%20%20%20%20%20%20%20%20if%20pd.isna(value)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%5B%5D%0A%20%20%20%20%20%20%20%20if%20isinstance(value%2C%20str)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20parsed_value%20%3D%20ast.literal_eval(value)%0A%20%20%20%20%20%20%20%20%20%20%20%20except%20(SyntaxError%2C%20ValueError)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%5Bvalue%5D%20if%20value.strip()%20else%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20parsed_value%20if%20isinstance(parsed_value%2C%20list)%20else%20%5Bvalue%5D%0A%20%20%20%20%20%20%20%20return%20%5B%5D%0A%0A%20%20%20%20return%20(parse_context_list%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%206.3%20%E5%AE%9F%E8%A1%8C%E3%81%AE%E8%B5%B7%E7%82%B9%0A%0A%20%20%20%20%E3%80%8CRAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E6%BA%96%E5%82%99%E3%80%8D%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%99%E3%81%BE%E3%81%A7%E3%80%81%E4%BB%A5%E9%99%8D%E3%81%AE%E9%87%8D%E3%81%84%E5%87%A6%E7%90%86%E3%81%AF%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%82%89%E3%80%81%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E5%87%BA%E5%8A%9B%E3%81%AE%E8%AA%AD%E3%81%BF%E6%9B%B8%E3%81%8D%E5%85%88%E3%81%A8%E3%81%AA%E3%82%8B%20%60ragas_evaluation_dataset.csv%60%20%E3%81%AE%E3%83%91%E3%82%B9%E3%82%92%E6%B1%BA%E3%82%81%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_(NOTEBOOK_DIR%2C%20mo%2C%20prepare_outputs_button)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20prepare_outputs_button.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E6%BA%96%E5%82%99%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20evaluation_csv_path%20%3D%20NOTEBOOK_DIR%20%2F%20%22ragas_evaluation_dataset.csv%22%0A%20%20%20%20return%20(evaluation_csv_path%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%206.4%20%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E5%87%BA%E5%8A%9B%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%20RAG%20%E3%81%AE%E5%AE%9F%E8%A1%8C%0A%0A%20%20%20%205%20%E7%AF%80%E3%81%A7%E9%81%B8%E3%82%93%E3%81%A0%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E3%80%81%E6%AC%A1%E3%81%AE%E3%81%A9%E3%81%A1%E3%82%89%E3%81%8B%E3%82%92%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20**%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E3%81%AE%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80**%3A%20CSV%20%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%60assert_saved_outputs_match_dataset%60%20%E3%81%A7%0A%20%20%20%20%20%20%E7%8F%BE%E5%9C%A8%E3%81%AE%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%81%8B%E3%82%92%E6%A4%9C%E8%A8%BC%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E3%80%81%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%88%97%E3%82%92%E3%83%AA%E3%82%B9%E3%83%88%E3%81%B8%E5%BE%A9%E5%85%83%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20**RAG%20%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%A6%E8%B3%AA%E5%95%8F%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B**%3A%20%60RAGSystem%60%20%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%80%81%60query_rag%60%20%E3%81%A7%201%20%E5%95%8F%E3%81%9A%E3%81%A4%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AB%0A%20%20%20%20%20%20%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E3%80%81%E5%9B%9E%E7%AD%94%E3%81%A8%E5%AE%9F%E9%9A%9B%E3%81%AB%E5%8F%96%E5%BE%97%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%E9%9B%86%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%E5%80%8B%E3%80%85%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%A7%E4%BE%8B%E5%A4%96%E3%81%8C%E8%B5%B7%E3%81%8D%E3%81%A6%E3%82%82%E4%B8%AD%E6%96%AD%E3%81%9B%E3%81%9A%E3%80%81%0A%20%20%20%20%20%20%60run_error%60%20%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%A6%E6%AC%A1%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%B8%E9%80%B2%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%A9%E3%81%A1%E3%82%89%E3%81%AE%E7%B5%8C%E8%B7%AF%E3%81%A7%E3%82%82%E3%80%81%E6%8E%A1%E7%82%B9%E3%81%A7%E4%BD%BF%E3%81%86%20%60ragas_df%60%20%E3%81%A8%E3%80%81%E7%B5%90%E6%9E%9C%E3%82%92%E4%BC%9D%E3%81%88%E3%82%8B%20%60output_status%60%20%E3%82%92%E4%BD%9C%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_(%0A%20%20%20%20HumanMessage%2C%0A%20%20%20%20RAGSystem%2C%0A%20%20%20%20assert_saved_outputs_match_dataset%2C%0A%20%20%20%20curated_records%2C%0A%20%20%20%20evaluation_csv_path%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20output_preparation_mode%2C%0A%20%20%20%20parse_context_list%2C%0A%20%20%20%20pd%2C%0A)%3A%0A%20%20%20%20if%20output_preparation_mode.value%20%3D%3D%20%22%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E3%81%AE%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%22%3A%0A%20%20%20%20%20%20%20%20if%20not%20evaluation_csv_path.is_file()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20FileNotFoundError(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E3%81%AE%20RAG%20%E5%87%BA%E5%8A%9B%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E3%80%8CRAG%20%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%A6%E8%B3%AA%E5%95%8F%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%80%8D%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%3A%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%7Bevaluation_csv_path%7D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20saved_ragas_df%20%3D%20pd.read_csv(evaluation_csv_path)%0A%20%20%20%20%20%20%20%20assert_saved_outputs_match_dataset(saved_ragas_df%2C%20curated_records)%0A%20%20%20%20%20%20%20%20saved_run_errors%20%3D%20saved_ragas_df.get(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22run_error%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20pd.Series(%22%22%2C%20index%3Dsaved_ragas_df.index%2C%20dtype%3D%22object%22)%2C%0A%20%20%20%20%20%20%20%20).fillna(%22%22)%0A%20%20%20%20%20%20%20%20ragas_df%20%3D%20saved_ragas_df.assign(%0A%20%20%20%20%20%20%20%20%20%20%20%20run_error%3Dsaved_run_errors%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20retrieved_contexts%3Dsaved_ragas_df%5B%22retrieved_contexts%22%5D.map(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20parse_context_list%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%20reference_contexts%3Dsaved_ragas_df%5B%22reference_contexts%22%5D.map(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20parse_context_list%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20output_status%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%E2%9C%85%20%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F%3A%20%60%7Bevaluation_csv_path%7D%60%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20rag%20%3D%20RAGSystem()%0A%20%20%20%20%20%20%20%20rag.initialize()%0A%20%20%20%20%20%20%20%20agent_graph%20%3D%20rag.agent_graph%0A%0A%20%20%20%20%20%20%20%20def%20query_rag(question%3A%20str)%20-%3E%20dict%5Bstr%2C%20object%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%E8%B3%AA%E5%95%8F%E3%82%92%20agentic%20RAG%20%E3%81%AB%E6%B8%A1%E3%81%97%E3%80%81%E5%9B%9E%E7%AD%94%E3%81%A8%E5%AE%9F%E9%9A%9B%E3%81%AE%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20rag.reset_thread()%0A%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20agent_graph.invoke(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%22messages%22%3A%20%5BHumanMessage(content%3Dquestion)%5D%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rag.get_config()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20answer%20%3D%20result%5B%22messages%22%5D%5B-1%5D.content%0A%20%20%20%20%20%20%20%20%20%20%20%20ordered_answers%20%3D%20sorted(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result.get(%22agent_answers%22%2C%20%5B%5D)%2C%20key%3Dlambda%20item%3A%20item%5B%22index%22%5D%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%20contexts%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20agent_answer%20in%20ordered_answers%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20context%20in%20agent_answer.get(%22contexts%22%2C%20%5B%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%22answer%22%3A%20answer%2C%20%22contexts%22%3A%20list(dict.fromkeys(contexts))%7D%0A%0A%20%20%20%20%20%20%20%20inference_rows%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20with%20mo.status.progress_bar(%0A%20%20%20%20%20%20%20%20%20%20%20%20total%3Dlen(curated_records)%2C%20title%3D%22RAG%20%E3%81%AB%E8%B3%AA%E5%95%8F%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%22%0A%20%20%20%20%20%20%20%20)%20as%20_inference_progress%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20record%20in%20curated_records%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rag_output%20%3D%20query_rag(record%5B%22question%22%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inference_rows.append(%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%7B%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%20%20%20%20%22source%22%3A%20record%5B%22source%22%5D%2C%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%20%20%20%20%22user_input%22%3A%20record%5B%22question%22%5D%2C%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%20%20%20%20%22retrieved_contexts%22%3A%20rag_output%5B%22contexts%22%5D%2C%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%20%20%20%20%22reference_contexts%22%3A%20record%5B%22reference_contexts%22%5D%2C%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%20%20%20%20%22response%22%3A%20rag_output%5B%22answer%22%5D%2C%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%20%20%20%20%22reference%22%3A%20record%5B%22reference%22%5D%2C%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%20%20%20%20%22run_error%22%3A%20%22%22%2C%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%7D%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%20except%20Exception%20as%20exc%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inference_rows.append(%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%7B%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%20%20%20%20%22source%22%3A%20record%5B%22source%22%5D%2C%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%20%20%20%20%22user_input%22%3A%20record%5B%22question%22%5D%2C%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%20%20%20%20%22retrieved_contexts%22%3A%20%5B%5D%2C%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%20%20%20%20%22reference_contexts%22%3A%20record%5B%22reference_contexts%22%5D%2C%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%20%20%20%20%22response%22%3A%20%22%22%2C%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%20%20%20%20%22reference%22%3A%20record%5B%22reference%22%5D%2C%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%20%20%20%20%22run_error%22%3A%20f%22RAG%20%E5%AE%9F%E8%A1%8C%E3%82%A8%E3%83%A9%E3%83%BC%3A%20%7Bexc%7D%22%2C%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%7D%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_inference_progress.update()%0A%0A%20%20%20%20%20%20%20%20ragas_df%20%3D%20pd.DataFrame(inference_rows)%0A%20%20%20%20%20%20%20%20assert_saved_outputs_match_dataset(ragas_df%2C%20curated_records)%0A%20%20%20%20%20%20%20%20failed_count%20%3D%20int(ragas_df%5B%22run_error%22%5D.ne(%22%22).sum())%0A%20%20%20%20%20%20%20%20output_status%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E2%9C%85%20RAG%20%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%A6%E8%B3%AA%E5%95%8F%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%22%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%20%7Blen(ragas_df)%7D%20%E4%BB%B6%E4%B8%AD%20%7Bfailed_count%7D%20%E4%BB%B6%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%22%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%7Boutput_status%7D%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%20(ragas_df%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%206.5%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%20CSV%20%E3%81%AB%E4%BF%9D%E5%AD%98%0A%0A%20%20%20%20%E3%81%84%E3%81%BE%E6%BA%96%E5%82%99%E3%81%97%E3%81%9F%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%20%60notebooks%2Fragas_evaluation_dataset.csv%60%20%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%0A%20%20%20%20%E6%AC%A1%E5%9B%9E%E4%BB%A5%E9%99%8D%E3%81%AF%E3%80%8C%E4%BF%9D%E5%AD%98%E6%B8%88%E3%81%BF%E3%81%AE%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%80%8D%E3%81%A7%E5%90%8C%E3%81%98%E5%87%BA%E5%8A%9B%E3%82%92%E6%8E%A1%E7%82%B9%E3%81%97%E7%9B%B4%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20QA%20%E3%83%87%E3%83%BC%E3%82%BF%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%80%81%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E5%8C%96%E3%80%81%E6%A4%9C%E7%B4%A2%E8%A8%AD%E5%AE%9A%E3%82%92%E5%A4%89%E3%81%88%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AF%E4%BF%9D%E5%AD%98%E3%81%97%E7%9B%B4%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20save_rag_outputs_button%20%3D%20mo.ui.run_button(label%3D%22RAG%20%E5%87%BA%E5%8A%9B%20CSV%20%E3%82%92%E4%BF%9D%E5%AD%98%22)%0A%20%20%20%20save_rag_outputs_button%0A%20%20%20%20return%20(save_rag_outputs_button%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%A0%E3%81%91%E3%80%81%60ragas_df%60%20%E3%82%92%20CSV%20%E3%81%B8%E6%9B%B8%E3%81%8D%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_(NOTEBOOK_DIR%2C%20mo%2C%20ragas_df%2C%20save_rag_outputs_button)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20save_rag_outputs_button.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20rag_outputs_path%20%3D%20NOTEBOOK_DIR%20%2F%20%22ragas_evaluation_dataset.csv%22%0A%20%20%20%20ragas_df.to_csv(rag_outputs_path%2C%20index%3DFalse)%0A%20%20%20%20mo.md(f%22%E2%9C%85%20RAG%20%E5%87%BA%E5%8A%9B%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%60%7Brag_outputs_path%7D%60%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%207.%20RAGAS%20%E6%8C%87%E6%A8%99%E3%82%92%E8%A8%88%E7%AE%97%0A%0A%20%20%20%20%7C%20%E6%8C%87%E6%A8%99%20%7C%20%E7%B3%BB%E7%B5%B1%20%7C%20%E8%AA%AC%E6%98%8E%20%7C%20%E7%AF%84%E5%9B%B2%20%7C%0A%20%20%20%20%7C---%7C---%7C---%7C---%7C%0A%20%20%20%20%7C%20**Answer%20Accuracy**%20%7C%20NVIDIA%20metric%20%7C%20%E7%94%9F%E6%88%90%E5%9B%9E%E7%AD%94%E3%81%A8%E5%8F%82%E7%85%A7%E5%9B%9E%E7%AD%94%E3%81%AE%E4%B8%80%E8%87%B4%E5%BA%A6%20%7C%200%E2%80%931%20%7C%0A%20%20%20%20%7C%20**Context%20Relevance**%20%7C%20NVIDIA%20metric%20%7C%20%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%A8%E8%B3%AA%E5%95%8F%E3%81%AE%E9%96%A2%E9%80%A3%E6%80%A7%20%7C%200%E2%80%931%20%7C%0A%20%20%20%20%7C%20**Response%20Groundedness**%20%7C%20NVIDIA%20metric%20%7C%20%E5%9B%9E%E7%AD%94%E3%81%AE%E4%B8%BB%E5%BC%B5%E3%81%8C%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AB%E3%82%88%E3%82%8A%E8%A3%8F%E4%BB%98%E3%81%91%E3%82%89%E3%82%8C%E3%82%8B%E5%BA%A6%E5%90%88%E3%81%84%20%7C%200%E2%80%931%20%7C%0A%20%20%20%20%7C%20**Context%20Precision**%20%7C%20%E6%A4%9C%E7%B4%A2%E6%8C%87%E6%A8%99%20%7C%20%E9%96%A2%E9%80%A3%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%8C%E7%84%A1%E9%96%A2%E4%BF%82%E3%81%AA%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%88%E3%82%8A%E4%B8%8A%E4%BD%8D%E3%81%AB%E3%81%82%E3%82%8B%E3%81%8B%20%7C%200%E2%80%931%20%7C%0A%20%20%20%20%7C%20**Context%20Recall**%20%7C%20%E6%A4%9C%E7%B4%A2%E6%8C%87%E6%A8%99%20%7C%20%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E5%8F%82%E7%85%A7%E5%9B%9E%E7%AD%94%E3%82%92%E3%82%AB%E3%83%90%E3%83%BC%E3%81%99%E3%82%8B%E3%81%8B%20%7C%200%E2%80%931%20%7C%0A%0A%20%20%20%20%E5%90%84%20scorer%20%E3%81%AF%20RAGAS%20collection-metric%20%E3%81%AE%E4%BE%8B%E3%81%AB%E5%BE%93%E3%81%84%E3%80%81%E6%8C%87%E6%A8%99%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%0A%20%20%20%20%60await%20scorer.ascore(...)%60%20%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%80%81%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E4%BF%9D%E6%8C%81%E3%81%97%E3%81%A6%E6%9C%80%E5%BE%8C%E3%81%AB%E5%B9%B3%E5%9D%87%E3%82%92%E7%AE%97%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%8E%A1%E7%82%B9%E3%81%AB%E3%81%AF%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AE%20Ollama%20%E3%81%A7%E5%8B%95%E3%81%8F%E5%88%A4%E5%AE%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%E6%BA%96%E5%82%99%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%9F%E3%82%89%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20score_ragas_button%20%3D%20mo.ui.run_button(label%3D%22RAGAS%20%E6%8C%87%E6%A8%99%E3%82%92%E8%A8%88%E7%AE%97%22)%0A%20%20%20%20score_ragas_button%0A%20%20%20%20return%20(score_ragas_button%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%207.1%20%E5%88%A4%E5%AE%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%20scorer%20%E3%81%AE%E6%BA%96%E5%82%99%0A%0A%20%20%20%20%E5%9B%9E%E7%AD%94%E7%94%9F%E6%88%90%E3%81%AB%E4%BD%BF%E3%81%86%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%AF**%E5%88%A5%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB**%E3%82%92%E5%88%A4%E5%AE%9A%E5%81%B4%E3%81%AB%E4%BD%BF%E3%81%84%E3%80%81%E8%87%AA%E5%B7%B1%E6%8E%A1%E7%82%B9%E3%83%90%E3%82%A4%E3%82%A2%E3%82%B9%E3%82%92%E6%8A%91%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20RAGAS%20%E3%81%AE%20%60llm_factory%60%20%E3%81%AB%20OpenAI%20%E4%BA%92%E6%8F%9B%E3%81%AE%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%20Ollama%20%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%92%E6%B8%A1%E3%81%97%E3%81%A6%205%20%E6%8C%87%E6%A8%99%E3%81%AE%0A%20%20%20%20scorer%20%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%88%A4%E5%AE%9A%E3%81%AE%E6%8F%BA%E3%82%8C%E3%82%92%E6%8A%91%E3%81%88%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%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%20AnswerAccuracy%2C%0A%20%20%20%20AsyncOpenAI%2C%0A%20%20%20%20ContextPrecision%2C%0A%20%20%20%20ContextRecall%2C%0A%20%20%20%20ContextRelevance%2C%0A%20%20%20%20ResponseGroundedness%2C%0A%20%20%20%20llm_factory%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20project_config%2C%0A%20%20%20%20score_ragas_button%2C%0A)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20score_ragas_button.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22RAGAS%20%E6%8C%87%E6%A8%99%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20%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%81%AE%E5%9B%9E%E7%AD%94%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E5%88%A4%E5%AE%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E5%88%86%E3%81%91%E3%81%A6%E3%80%81%E8%87%AA%E5%B7%B1%E6%8E%A1%E7%82%B9%E3%83%90%E3%82%A4%E3%82%A2%E3%82%B9%E3%82%92%E6%8A%91%E3%81%88%E3%82%8B%E3%80%82%0A%20%20%20%20ollama_client%20%3D%20AsyncOpenAI(%0A%20%20%20%20%20%20%20%20base_url%3D%22http%3A%2F%2Flocalhost%3A11434%2Fv1%2F%22%2C%0A%20%20%20%20%20%20%20%20api_key%3D%22ollama%22%2C%0A%20%20%20%20)%0A%20%20%20%20ragas_llm%20%3D%20llm_factory(%0A%20%20%20%20%20%20%20%20project_config.JUDGE_MODEL%2C%0A%20%20%20%20%20%20%20%20client%3Dollama_client%2C%0A%20%20%20%20%20%20%20%20temperature%3D0%2C%0A%20%20%20%20)%0A%20%20%20%20metric_scorers%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22answer_accuracy%22%3A%20AnswerAccuracy(llm%3Dragas_llm)%2C%0A%20%20%20%20%20%20%20%20%22context_relevance%22%3A%20ContextRelevance(llm%3Dragas_llm)%2C%0A%20%20%20%20%20%20%20%20%22response_groundedness%22%3A%20ResponseGroundedness(llm%3Dragas_llm)%2C%0A%20%20%20%20%20%20%20%20%22context_precision%22%3A%20ContextPrecision(llm%3Dragas_llm)%2C%0A%20%20%20%20%20%20%20%20%22context_recall%22%3A%20ContextRecall(llm%3Dragas_llm)%2C%0A%20%20%20%20%7D%0A%20%20%20%20return%20(metric_scorers%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%207.2%201%20%E8%A1%8C%E5%88%86%E3%81%AE%E6%8E%A1%E7%82%B9%EF%BC%88%60score_answer%60%EF%BC%89%0A%0A%20%20%20%20%E6%8C%87%E6%A8%99%E3%81%94%E3%81%A8%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E5%85%A5%E5%8A%9B%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%60metric_inputs%60%20%E3%81%A7%E6%8C%87%E6%A8%99%E5%90%8D%E3%81%8B%E3%82%89%E5%BC%95%E6%95%B0%E3%82%92%E5%BC%95%E3%81%91%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60run_error%60%20%E3%81%8C%E3%81%82%E3%82%8B%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E4%BD%8E%E5%93%81%E8%B3%AA%E3%81%AA%E5%9B%9E%E7%AD%94%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F**%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E9%9A%9C%E5%AE%B3**%E3%81%AA%E3%81%AE%E3%81%A7%20%60NaN%60%20%E3%81%A8%E3%81%97%E3%81%A6%0A%20%20%20%20%E9%99%A4%E5%A4%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%BE%E3%81%9F%E3%80%81%E3%81%82%E3%82%8B%E6%8C%87%E6%A8%99%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%97%E3%81%A6%E3%82%82%E6%AE%8B%E3%82%8A%E3%81%AE%E6%8C%87%E6%A8%99%E3%81%AF%E7%B6%9A%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%E5%89%8D%E3%82%BB%E3%83%AB%E3%81%AE%20%60metric_scorers%60%20%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E3%83%9C%E3%82%BF%E3%83%B3%E6%9C%AA%E6%8A%BC%E4%B8%8B%E6%99%82%E3%81%AF%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(metric_scorers%2C%20np%2C%20pd)%3A%0A%20%20%20%20async%20def%20score_answer(row%3A%20pd.Series)%20-%3E%20tuple%5Bdict%5Bstr%2C%20float%5D%2C%20list%5Bstr%5D%5D%3A%0A%20%20%20%20%20%20%20%20if%20row.get(%22run_error%22)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bmetric_name%3A%20np.nan%20for%20metric_name%20in%20metric_scorers%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bf%22%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E9%9A%9C%E5%AE%B3%E3%81%AE%E3%81%9F%E3%82%81%E8%A1%8C%E3%82%92%E9%99%A4%E5%A4%96%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%7Brow%5B'run_error'%5D%7D%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20metric_inputs%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22answer_accuracy%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22user_input%22%3A%20row%5B%22user_input%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22response%22%3A%20row%5B%22response%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22reference%22%3A%20row%5B%22reference%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22context_relevance%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22user_input%22%3A%20row%5B%22user_input%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22retrieved_contexts%22%3A%20row%5B%22retrieved_contexts%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22response_groundedness%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22response%22%3A%20row%5B%22response%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22retrieved_contexts%22%3A%20row%5B%22retrieved_contexts%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22context_precision%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22user_input%22%3A%20row%5B%22user_input%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22reference%22%3A%20row%5B%22reference%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22retrieved_contexts%22%3A%20row%5B%22retrieved_contexts%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22context_recall%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22user_input%22%3A%20row%5B%22user_input%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22retrieved_contexts%22%3A%20row%5B%22retrieved_contexts%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22reference%22%3A%20row%5B%22reference%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20score_values%20%3D%20%7B%7D%0A%20%20%20%20%20%20%20%20score_messages%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20for%20metric_name%2C%20scorer%20in%20metric_scorers.items()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scored_result%20%3D%20await%20scorer.ascore(**metric_inputs%5Bmetric_name%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20score_values%5Bmetric_name%5D%20%3D%20scored_result.value%0A%20%20%20%20%20%20%20%20%20%20%20%20except%20Exception%20as%20exc%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20score_values%5Bmetric_name%5D%20%3D%20np.nan%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20score_messages.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%7Bmetric_name%7D%20%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%7Bexc%7D%22%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%20return%20score_values%2C%20score_messages%0A%0A%20%20%20%20return%20(score_answer%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%207.3%20%E5%85%A8%E8%A1%8C%E3%81%AE%E6%8E%A1%E7%82%B9%E3%81%A8%E5%B9%B3%E5%9D%87%E3%82%B9%E3%82%B3%E3%82%A2%0A%0A%20%20%20%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%20QA%20%E8%A1%8C%E3%82%92%E9%80%B2%E6%8D%97%E3%83%90%E3%83%BC%E4%BB%98%E3%81%8D%E3%81%A7%E6%8E%A1%E7%82%B9%E3%81%97%E3%81%A6%20%60scores_df%60%20%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%80%81%60NaN%60%EF%BC%88%E9%99%A4%E5%A4%96%E8%A1%8C%E3%82%84%E5%A4%B1%E6%95%97%E3%81%97%E3%81%9F%E6%8C%87%E6%A8%99%EF%BC%89%E3%82%92%0A%20%20%20%20%E7%84%A1%E8%A6%96%E3%81%97%E3%81%9F%E5%B9%B3%E5%9D%87%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%88%A4%E5%AE%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%201%20%E8%A1%8C%E3%81%9A%E3%81%A4%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%81%9F%E3%82%81%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%AE%E8%A6%8F%E6%A8%A1%E3%81%A8%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E9%80%9F%E5%BA%A6%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%81%AF%0A%20%20%20%20%E6%99%82%E9%96%93%E3%81%8C%E3%81%8B%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%0Aasync%20def%20_(mo%2C%20pd%2C%20ragas_df%2C%20score_answer)%3A%0A%20%20%20%20score_rows%20%3D%20%5B%5D%0A%20%20%20%20scoring_messages%20%3D%20%5B%5D%0A%20%20%20%20with%20mo.status.progress_bar(%0A%20%20%20%20%20%20%20%20total%3Dlen(ragas_df)%2C%20title%3D%22RAGAS%20%E6%8C%87%E6%A8%99%E3%82%92%E8%A8%88%E7%AE%97%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%22%0A%20%20%20%20)%20as%20_scoring_progress%3A%0A%20%20%20%20%20%20%20%20for%20_%2C%20scoring_row%20in%20ragas_df.iterrows()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20score_values%2C%20row_messages%20%3D%20await%20score_answer(scoring_row)%0A%20%20%20%20%20%20%20%20%20%20%20%20score_rows.append(score_values)%0A%20%20%20%20%20%20%20%20%20%20%20%20scoring_messages.extend(row_messages)%0A%20%20%20%20%20%20%20%20%20%20%20%20_scoring_progress.update()%0A%0A%20%20%20%20scores_df%20%3D%20pd.DataFrame(score_rows)%0A%20%20%20%20mean_scores%20%3D%20scores_df.mean(numeric_only%3DTrue).round(3)%0A%20%20%20%20message_text%20%3D%20(%0A%20%20%20%20%20%20%20%20%22%5Cn%22.join(f%22-%20%7Bmessage%7D%22%20for%20message%20in%20scoring_messages)%0A%20%20%20%20%20%20%20%20if%20scoring_messages%0A%20%20%20%20%20%20%20%20else%20%22%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E8%A1%8C%E3%81%AE%E6%8C%87%E6%A8%99%E8%A8%88%E7%AE%97%E3%81%8C%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%22%0A%20%20%20%20)%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%E2%9C%85%20RAGAS%20%E6%8C%87%E6%A8%99%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%8C%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%0A%20%20%20%20%20%20%20%20**%E5%B9%B3%E5%9D%87%E3%82%B9%E3%82%B3%E3%82%A2**%0A%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%7Bmean_scores.to_string()%7D%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20%20%20%20%20**%E8%A8%88%E7%AE%97%E6%99%82%E3%81%AE%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8**%0A%0A%20%20%20%20%20%20%20%20%7Bmessage_text%7D%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%20(scores_df%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%208.%20DataFrame%20%E5%BD%A2%E5%BC%8F%E3%81%AE%E7%B5%90%E6%9E%9C%0A%0A%20%20%20%20RAG%20%E5%87%BA%E5%8A%9B%EF%BC%88%60ragas_df%60%EF%BC%89%E3%81%A8%E6%8E%A1%E7%82%B9%E7%B5%90%E6%9E%9C%EF%BC%88%60scores_df%60%EF%BC%89%E3%82%92%E6%A8%AA%E3%81%AB%E9%80%A3%E7%B5%90%E3%81%97%E3%80%811%20%E8%A1%8C%E3%81%8C%201%20%E3%81%A4%E3%81%AE%20QA%20%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%60question%60%20%2F%20%60answer%60%20%2F%20%60ground_truth%60%20%E3%81%AF%E3%80%81%E5%BE%8C%E6%AE%B5%E3%81%AE%20CSV%20%E5%87%BA%E5%8A%9B%E3%81%A7%E6%89%B1%E3%81%84%E3%82%84%E3%81%99%E3%81%8F%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%88%A5%E5%90%8D%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E6%8E%A1%E7%82%B9%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B%E3%81%AA%E3%81%A9%E3%81%97%E3%81%A6%E6%AC%A0%E3%81%91%E3%81%A6%E3%81%84%E3%82%8B%E6%8C%87%E6%A8%99%E5%88%97%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E8%AD%A6%E5%91%8A%E3%81%A8%E3%81%97%E3%81%A6%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_(pd%2C%20ragas_df%2C%20scores_df)%3A%0A%20%20%20%20metric_columns%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%22answer_accuracy%22%2C%0A%20%20%20%20%20%20%20%20%22context_relevance%22%2C%0A%20%20%20%20%20%20%20%20%22response_groundedness%22%2C%0A%20%20%20%20%20%20%20%20%22context_precision%22%2C%0A%20%20%20%20%20%20%20%20%22context_recall%22%2C%0A%20%20%20%20%5D%0A%20%20%20%20evaluation_results_df%20%3D%20pd.concat(%0A%20%20%20%20%20%20%20%20%5Bragas_df.reset_index(drop%3DTrue)%2C%20scores_df.reset_index(drop%3DTrue)%5D%2C%0A%20%20%20%20%20%20%20%20axis%3D1%2C%0A%20%20%20%20).assign(%0A%20%20%20%20%20%20%20%20question%3Dlambda%20frame%3A%20frame%5B%22user_input%22%5D%2C%0A%20%20%20%20%20%20%20%20answer%3Dlambda%20frame%3A%20frame%5B%22response%22%5D%2C%0A%20%20%20%20%20%20%20%20ground_truth%3Dlambda%20frame%3A%20frame%5B%22reference%22%5D%2C%0A%20%20%20%20)%0A%20%20%20%20available_metric_columns%20%3D%20%5B%0A%20%20%20%20%20%20%20%20column%20for%20column%20in%20metric_columns%20if%20column%20in%20evaluation_results_df.columns%0A%20%20%20%20%5D%0A%20%20%20%20missing_metric_columns%20%3D%20%5B%0A%20%20%20%20%20%20%20%20column%20for%20column%20in%20metric_columns%20if%20column%20not%20in%20available_metric_columns%0A%20%20%20%20%5D%0A%20%20%20%20missing_metrics_text%20%3D%20(%0A%20%20%20%20%20%20%20%20f%22%5Cn%5Cn%E2%9A%A0%EF%B8%8F%20%E6%8C%87%E6%A8%99%E5%88%97%E3%81%8C%E4%B8%8D%E8%B6%B3%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%3A%20%60%7Bmissing_metric_columns%7D%60%22%0A%20%20%20%20%20%20%20%20if%20missing_metric_columns%0A%20%20%20%20%20%20%20%20else%20%22%22%0A%20%20%20%20)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20available_metric_columns%2C%0A%20%20%20%20%20%20%20%20evaluation_results_df%2C%0A%20%20%20%20%20%20%20%20missing_metrics_text%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%208.1%20%E5%85%88%E9%A0%AD%E6%95%B0%E4%BB%B6%E3%81%AE%E7%A2%BA%E8%AA%8D%0A%0A%20%20%20%20%E9%80%A3%E7%B5%90%E5%BE%8C%E3%81%AE%20DataFrame%20%E3%81%AE%E5%85%88%E9%A0%AD%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%80%81%E8%B3%AA%E5%95%8F%E3%83%BB%E5%9B%9E%E7%AD%94%E3%83%BB%E5%8F%82%E7%85%A7%E5%9B%9E%E7%AD%94%E3%81%A8%E5%90%84%E6%8C%87%E6%A8%99%E3%81%AE%E5%80%A4%E3%81%8C%0A%20%20%20%20%E6%AD%A3%E3%81%97%E3%81%8F%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%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_(evaluation_results_df%2C%20missing_metrics_text%2C%20mo)%3A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(missing_metrics_text)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.table(evaluation_results_df.head())%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%209.%20%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%94%E3%81%A8%E3%81%AE%E9%9B%86%E8%A8%88%E3%82%B9%E3%82%B3%E3%82%A2%0A%0A%20%20%20%20%E6%8C%87%E6%A8%99%E3%82%92%E6%96%87%E6%9B%B8%EF%BC%88%60source%60%EF%BC%89%E3%81%94%E3%81%A8%E3%81%AB%E5%B9%B3%E5%9D%87%E3%81%97%E3%80%81%E6%9C%80%E5%BE%8C%E3%81%AB%E5%85%A8%E4%BD%93%E5%B9%B3%E5%9D%87%EF%BC%88%60OVERALL%60%EF%BC%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%A9%E3%81%AE%E6%96%87%E6%9B%B8%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%82%84%E5%9B%9E%E7%AD%94%E3%81%8C%E5%BC%B1%E3%81%84%E3%81%AE%E3%81%8B%E3%82%92%E6%AF%94%E8%BC%83%E3%81%A7%E3%81%8D%E3%80%81%E6%AC%A1%E3%81%AB%E6%89%8B%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B%E3%81%B9%E3%81%8D%E7%AE%87%E6%89%80%E3%82%92%E7%B5%9E%E3%82%8A%E8%BE%BC%E3%82%81%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_(available_metric_columns%2C%20evaluation_results_df%2C%20mo%2C%20pd)%3A%0A%20%20%20%20source_scores%20%3D%20(%0A%20%20%20%20%20%20%20%20evaluation_results_df.groupby(%22source%22)%5Bavailable_metric_columns%5D%0A%20%20%20%20%20%20%20%20.mean()%0A%20%20%20%20%20%20%20%20.round(3)%0A%20%20%20%20)%0A%20%20%20%20overall_scores%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%5Bevaluation_results_df%5Bavailable_metric_columns%5D.mean().round(3)%5D%2C%0A%20%20%20%20%20%20%20%20index%3D%5B%22OVERALL%22%5D%2C%0A%20%20%20%20)%0A%20%20%20%20aggregate_scores%20%3D%20pd.concat(%5Bsource_scores%2C%20overall_scores%5D)%0A%0A%20%20%20%20mo.ui.table(aggregate_scores.reset_index(names%3D%22source%22))%0A%20%20%20%20return%20(aggregate_scores%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%2010.%20%E5%8F%AF%E8%A6%96%E5%8C%96%0A%0A%20%20%20%20%23%23%23%2010.1%20%E3%83%92%E3%83%BC%E3%83%88%E3%83%9E%E3%83%83%E3%83%97%20%E2%80%94%20%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%94%E3%81%A8%E3%81%AE%E5%B9%B3%E5%9D%87%E3%82%B9%E3%82%B3%E3%82%A2%0A%0A%20%20%20%20%E3%80%8C**%E3%81%A9%E3%81%AE%E6%96%87%E6%9B%B8%E3%81%AE%E3%81%A9%E3%81%AE%E6%8C%87%E6%A8%99%E3%81%8C%E5%BC%B1%E3%81%84%E3%81%AE%E3%81%8B**%E3%80%8D%E3%82%92%E4%B8%80%E7%9B%AE%E3%81%A7%E6%8A%8A%E6%8F%A1%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%9B%B3%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E8%A1%8C%E3%81%8C%E6%96%87%E6%9B%B8%E3%80%81%E5%88%97%E3%81%8C%E6%8C%87%E6%A8%99%E3%81%A7%E3%80%81%E8%89%B2%E3%81%8C%E6%BF%83%E3%81%84%E7%B7%91%E3%81%BB%E3%81%A9%E9%AB%98%E3%82%B9%E3%82%B3%E3%82%A2%E3%80%81%E8%B5%A4%E3%81%AB%E8%BF%91%E3%81%84%E3%81%BB%E3%81%A9%E4%BD%8E%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E8%A1%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%83%92%E3%83%BC%E3%83%88%E3%83%9E%E3%83%83%E3%83%97%E3%81%A8%E6%AC%A1%E3%81%AE%E6%A3%92%E3%82%B0%E3%83%A9%E3%83%95%E3%81%AF%201%20%E3%81%A4%E3%81%AE%20Figure%20%E3%81%AB%E5%B7%A6%E5%8F%B3%E3%81%A7%E4%B8%A6%E3%81%B9%E3%81%A6%E6%8F%8F%E3%81%8F%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E6%8F%8F%E7%94%BB%E7%B5%90%E6%9E%9C%E3%81%AF%2010.2%20%E3%81%AE%E6%9C%80%E5%BE%8C%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%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_(aggregate_scores%2C%20plt%2C%20sns)%3A%0A%20%20%20%20%23%2010.1%20%E3%83%92%E3%83%BC%E3%83%88%E3%83%9E%E3%83%83%E3%83%97%0A%20%20%20%20heatmap_bar_fig%2C%20heatmap_bar_axes%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(18%2C%205))%0A%20%20%20%20chart_source_scores%20%3D%20aggregate_scores.drop(index%3D%22OVERALL%22)%0A%0A%20%20%20%20sns.heatmap(%0A%20%20%20%20%20%20%20%20chart_source_scores%2C%0A%20%20%20%20%20%20%20%20ax%3Dheatmap_bar_axes%5B0%5D%2C%0A%20%20%20%20%20%20%20%20annot%3DTrue%2C%0A%20%20%20%20%20%20%20%20fmt%3D%22.3f%22%2C%0A%20%20%20%20%20%20%20%20cmap%3D%22RdYlGn%22%2C%0A%20%20%20%20%20%20%20%20vmin%3D0%2C%0A%20%20%20%20%20%20%20%20vmax%3D1%2C%0A%20%20%20%20%20%20%20%20linewidths%3D0.5%2C%0A%20%20%20%20%20%20%20%20cbar_kws%3D%7B%22label%22%3A%20%22%E3%82%B9%E3%82%B3%E3%82%A2%22%7D%2C%0A%20%20%20%20)%0A%20%20%20%20heatmap_bar_axes%5B0%5D.set_title(%0A%20%20%20%20%20%20%20%20%22RAGAS%20%E6%8C%87%E6%A8%99%20%E2%80%94%20%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%94%E3%81%A8%E3%81%AE%E5%B9%B3%E5%9D%87%E3%82%B9%E3%82%B3%E3%82%A2%22%2C%0A%20%20%20%20%20%20%20%20fontsize%3D13%2C%0A%20%20%20%20%20%20%20%20fontweight%3D%22bold%22%2C%0A%20%20%20%20)%0A%20%20%20%20heatmap_bar_axes%5B0%5D.tick_params(axis%3D%22x%22%2C%20rotation%3D20)%0A%20%20%20%20return%20chart_source_scores%2C%20heatmap_bar_axes%2C%20heatmap_bar_fig%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%2010.2%20%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%E6%A3%92%E3%82%B0%E3%83%A9%E3%83%95%20%E2%80%94%20%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%94%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83%0A%0A%20%20%20%20%E3%80%8C**%E5%90%8C%E3%81%98%E6%8C%87%E6%A8%99%E3%82%92%E3%82%BD%E3%83%BC%E3%82%B9%E9%96%93%E3%81%A7%E6%AF%94%E3%81%B9%E3%82%8B%E3%81%A8%E3%81%A9%E3%82%8C%E3%81%A0%E3%81%91%E5%B7%AE%E3%81%8C%E3%81%82%E3%82%8B%E3%81%8B**%E3%80%8D%E3%82%92%E8%A6%8B%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%9B%B3%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E6%8C%87%E6%A8%99%E3%81%94%E3%81%A8%E3%81%AB%E6%96%87%E6%9B%B8%E3%82%92%E6%A8%AA%E4%B8%A6%E3%81%B3%E3%81%AE%E6%A3%92%E3%81%A7%E7%A4%BA%E3%81%97%E3%80%81%E7%A0%B4%E7%B7%9A%E3%81%A7%E5%85%A8%E4%BD%93%E5%B9%B3%E5%9D%87%E3%82%92%E9%87%8D%E3%81%AD%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%82%E3%82%8B%E6%8C%87%E6%A8%99%E3%81%A0%E3%81%91%E7%89%B9%E5%AE%9A%E3%81%AE%E6%96%87%E6%9B%B8%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%8F%E8%90%BD%E3%81%A1%E8%BE%BC%E3%82%93%E3%81%A7%E3%81%84%E3%82%8C%E3%81%B0%E3%80%81%E3%81%9D%E3%81%AE%E6%96%87%E6%9B%B8%E3%81%AE%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF%E8%A8%AD%E5%AE%9A%E3%82%84%0A%20%20%20%20%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E5%8C%96%E3%82%92%E5%84%AA%E5%85%88%E7%9A%84%E3%81%AB%E8%A6%8B%E7%9B%B4%E3%81%99%E4%BE%A1%E5%80%A4%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%BE%E3%81%9A%E3%81%AF%E6%A3%92%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%82%92%E6%8F%8F%E7%94%BB%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%20aggregate_scores%2C%0A%20%20%20%20available_metric_columns%2C%0A%20%20%20%20chart_source_scores%2C%0A%20%20%20%20heatmap_bar_axes%2C%0A)%3A%0A%20%20%20%20%23%2010.2%20%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%E6%A3%92%E3%82%B0%E3%83%A9%E3%83%95%0A%20%20%20%20chart_sources%20%3D%20chart_source_scores.index.tolist()%0A%20%20%20%20chart_positions%20%3D%20range(len(available_metric_columns))%0A%20%20%20%20chart_width%20%3D%200.8%20%2F%20max(len(chart_sources)%2C%201)%0A%20%20%20%20chart_colors%20%3D%20%5B%22%234e79a7%22%2C%20%22%23f28e2b%22%2C%20%22%23e15759%22%2C%20%22%2376b7b2%22%2C%20%22%2359a14f%22%5D%0A%20%20%20%20for%20source_index%2C%20source_name%20in%20enumerate(chart_sources)%3A%0A%20%20%20%20%20%20%20%20source_values%20%3D%20aggregate_scores.loc%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20source_name%2C%20available_metric_columns%0A%20%20%20%20%20%20%20%20%5D.values%0A%20%20%20%20%20%20%20%20heatmap_bar_axes%5B1%5D.bar(%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%20position%20%2B%20source_index%20*%20chart_width%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20position%20in%20chart_positions%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20source_values%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20width%3Dchart_width%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20label%3Dsource_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dchart_colors%5Bsource_index%20%25%20len(chart_colors)%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20alpha%3D0.85%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20edgecolor%3D%22white%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20return%20chart_positions%2C%20chart_sources%2C%20chart_width%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B6%9A%E3%81%84%E3%81%A6%E3%80%81%E5%85%A8%E4%BD%93%E5%B9%B3%E5%9D%87%E3%81%AE%E7%A0%B4%E7%B7%9A%E3%83%BB%E7%9B%AE%E7%9B%9B%E3%82%8A%E3%83%BB%E5%87%A1%E4%BE%8B%E3%81%AA%E3%81%A9%E8%BB%B8%E3%81%AE%E4%BD%93%E8%A3%81%E3%82%92%E6%95%B4%E3%81%88%E3%80%81%0A%20%20%20%2010.1%20%E3%81%AE%E3%83%92%E3%83%BC%E3%83%88%E3%83%9E%E3%83%83%E3%83%97%E3%81%A8%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%201%20%E3%81%A4%E3%81%AE%20Figure%20%E3%81%A8%E3%81%97%E3%81%A6%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_(%0A%20%20%20%20aggregate_scores%2C%0A%20%20%20%20available_metric_columns%2C%0A%20%20%20%20chart_positions%2C%0A%20%20%20%20chart_sources%2C%0A%20%20%20%20chart_width%2C%0A%20%20%20%20heatmap_bar_axes%2C%0A%20%20%20%20heatmap_bar_fig%2C%0A%20%20%20%20mo%2C%0A)%3A%0A%20%20%20%20heatmap_bar_axes%5B1%5D.axhline(%0A%20%20%20%20%20%20%20%20y%3Daggregate_scores.loc%5B%22OVERALL%22%2C%20available_metric_columns%5D.mean()%2C%0A%20%20%20%20%20%20%20%20color%3D%22gray%22%2C%0A%20%20%20%20%20%20%20%20linestyle%3D%22--%22%2C%0A%20%20%20%20%20%20%20%20linewidth%3D1%2C%0A%20%20%20%20%20%20%20%20label%3D%22%E5%85%A8%E4%BD%93%E5%B9%B3%E5%9D%87%22%2C%0A%20%20%20%20)%0A%20%20%20%20heatmap_bar_axes%5B1%5D.set_xticks(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20position%20%2B%20chart_width%20*%20max(len(chart_sources)%20-%201%2C%200)%20%2F%202%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20position%20in%20chart_positions%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20heatmap_bar_axes%5B1%5D.set_xticklabels(%0A%20%20%20%20%20%20%20%20%5Bcolumn.replace(%22_%22%2C%20%22%5Cn%22)%20for%20column%20in%20available_metric_columns%5D%2C%0A%20%20%20%20%20%20%20%20fontsize%3D9%2C%0A%20%20%20%20)%0A%20%20%20%20heatmap_bar_axes%5B1%5D.set_ylim(0%2C%201.05)%0A%20%20%20%20heatmap_bar_axes%5B1%5D.set_ylabel(%22%E3%82%B9%E3%82%B3%E3%82%A2%22)%0A%20%20%20%20heatmap_bar_axes%5B1%5D.set_title(%0A%20%20%20%20%20%20%20%20%22RAGAS%20%E6%8C%87%E6%A8%99%20%E2%80%94%20%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%94%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83%22%2C%0A%20%20%20%20%20%20%20%20fontsize%3D13%2C%0A%20%20%20%20%20%20%20%20fontweight%3D%22bold%22%2C%0A%20%20%20%20)%0A%20%20%20%20heatmap_bar_axes%5B1%5D.legend(loc%3D%22lower%20right%22%2C%20fontsize%3D8)%0A%20%20%20%20heatmap_bar_axes%5B1%5D.grid(axis%3D%22y%22%2C%20alpha%3D0.3)%0A%20%20%20%20heatmap_bar_fig.tight_layout()%0A%0A%20%20%20%20mo.mpl.interactive(heatmap_bar_fig)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%2010.3%20%E3%83%AC%E3%83%BC%E3%83%80%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%20%E2%80%94%20%E5%85%A8%E4%BD%93%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%0A%0A%20%20%20%20%E3%80%8C**5%20%E3%81%A4%E3%81%AE%E6%8C%87%E6%A8%99%E3%81%AE%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%8C%E5%8F%96%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B**%E3%80%8D%E3%82%92%E8%A6%8B%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%9B%B3%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E5%85%A8%E4%BD%93%E5%B9%B3%E5%9D%87%EF%BC%88%60OVERALL%60%EF%BC%89%E3%81%A0%E3%81%91%E3%82%92%201%20%E3%81%A4%E3%81%AE%E5%A4%9A%E8%A7%92%E5%BD%A2%E3%81%A8%E3%81%97%E3%81%A6%E6%8F%8F%E3%81%8F%E3%81%9F%E3%82%81%E3%80%81%E6%A4%9C%E7%B4%A2%E5%AF%84%E3%82%8A%EF%BC%88Context%20Precision%20%2F%20Recall%EF%BC%89%E3%81%A8%0A%20%20%20%20%E7%94%9F%E6%88%90%E5%AF%84%E3%82%8A%EF%BC%88Answer%20Accuracy%20%2F%20Response%20Groundedness%EF%BC%89%E3%81%AE%E3%81%A9%E3%81%A1%E3%82%89%E3%81%8C%E5%87%B9%E3%82%93%E3%81%A7%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E7%9B%B4%E6%84%9F%E7%9A%84%E3%81%AB%E6%8A%8A%E6%8F%A1%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%BE%E3%81%9A%E3%81%AF%E3%83%97%E3%83%AD%E3%83%83%E3%83%88%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E8%A7%92%E5%BA%A6%E3%81%A8%E5%80%A4%E3%82%92%E8%A8%88%E7%AE%97%E3%81%97%E3%80%81%E5%A4%9A%E8%A7%92%E5%BD%A2%E3%82%92%E9%96%89%E3%81%98%E3%81%A6%E6%8F%8F%E7%94%BB%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_(aggregate_scores%2C%20available_metric_columns%2C%20np%2C%20plt)%3A%0A%20%20%20%20%23%2010.3%20%E3%83%AC%E3%83%BC%E3%83%80%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%3A%20%E5%85%A8%E4%BD%93%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%0A%20%20%20%20radar_labels%20%3D%20%5B%0A%20%20%20%20%20%20%20%20column.replace(%22_%22%2C%20%22%5Cn%22)%20for%20column%20in%20available_metric_columns%0A%20%20%20%20%5D%0A%20%20%20%20radar_values%20%3D%20aggregate_scores.loc%5B%0A%20%20%20%20%20%20%20%20%22OVERALL%22%2C%20available_metric_columns%0A%20%20%20%20%5D.values.tolist()%0A%20%20%20%20closed_radar_values%20%3D%20radar_values%20%2B%20radar_values%5B%3A1%5D%0A%20%20%20%20radar_angles%20%3D%20np.linspace(%0A%20%20%20%20%20%20%20%200%2C%202%20*%20np.pi%2C%20len(available_metric_columns)%2C%20endpoint%3DFalse%0A%20%20%20%20).tolist()%0A%20%20%20%20closed_radar_angles%20%3D%20radar_angles%20%2B%20radar_angles%5B%3A1%5D%0A%0A%20%20%20%20radar_fig%2C%20radar_axis%20%3D%20plt.subplots(%0A%20%20%20%20%20%20%20%20figsize%3D(6%2C%206)%2C%0A%20%20%20%20%20%20%20%20subplot_kw%3D%7B%22polar%22%3A%20True%7D%2C%0A%20%20%20%20)%0A%20%20%20%20radar_axis.plot(%0A%20%20%20%20%20%20%20%20closed_radar_angles%2C%0A%20%20%20%20%20%20%20%20closed_radar_values%2C%0A%20%20%20%20%20%20%20%20color%3D%22steelblue%22%2C%0A%20%20%20%20%20%20%20%20linewidth%3D2%2C%0A%20%20%20%20)%0A%20%20%20%20radar_axis.fill(%0A%20%20%20%20%20%20%20%20closed_radar_angles%2C%0A%20%20%20%20%20%20%20%20closed_radar_values%2C%0A%20%20%20%20%20%20%20%20color%3D%22steelblue%22%2C%0A%20%20%20%20%20%20%20%20alpha%3D0.25%2C%0A%20%20%20%20)%0A%20%20%20%20return%20radar_angles%2C%20radar_axis%2C%20radar_fig%2C%20radar_labels%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%BB%B8%E3%83%A9%E3%83%99%E3%83%AB%E3%80%81%E7%9B%AE%E7%9B%9B%E3%82%8A%E3%80%81%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AA%E3%81%A9%E3%81%AE%E4%BD%93%E8%A3%81%E3%82%92%E6%95%B4%E3%81%88%E3%81%A6%E3%83%AC%E3%83%BC%E3%83%80%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%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%E5%8D%8A%E5%BE%84%E6%96%B9%E5%90%91%E3%81%AE%E7%9B%AE%E7%9B%9B%E3%82%8A%E3%81%AF%200.2%20%E5%88%BB%E3%81%BF%E3%81%A7%E3%80%81%E5%A4%96%E5%81%B4%E3%81%AB%E8%BF%91%E3%81%84%E3%81%BB%E3%81%A9%E8%89%AF%E3%81%84%E3%82%B9%E3%82%B3%E3%82%A2%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_(mo%2C%20np%2C%20radar_angles%2C%20radar_axis%2C%20radar_fig%2C%20radar_labels)%3A%0A%20%20%20%20radar_axis.set_thetagrids(%0A%20%20%20%20%20%20%20%20np.degrees(radar_angles)%2C%0A%20%20%20%20%20%20%20%20radar_labels%2C%0A%20%20%20%20%20%20%20%20fontsize%3D10%2C%0A%20%20%20%20)%0A%20%20%20%20radar_axis.set_ylim(0%2C%201)%0A%20%20%20%20radar_axis.set_yticks(%5B0.2%2C%200.4%2C%200.6%2C%200.8%2C%201.0%5D)%0A%20%20%20%20radar_axis.set_yticklabels(%0A%20%20%20%20%20%20%20%20%5B%220.2%22%2C%20%220.4%22%2C%20%220.6%22%2C%20%220.8%22%2C%20%221.0%22%5D%2C%0A%20%20%20%20%20%20%20%20fontsize%3D7%2C%0A%20%20%20%20)%0A%20%20%20%20radar_axis.set_title(%0A%20%20%20%20%20%20%20%20%22%E5%85%A8%E4%BD%93%20RAGAS%20%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%22%2C%0A%20%20%20%20%20%20%20%20fontsize%3D13%2C%0A%20%20%20%20%20%20%20%20fontweight%3D%22bold%22%2C%0A%20%20%20%20%20%20%20%20pad%3D20%2C%0A%20%20%20%20)%0A%20%20%20%20radar_axis.grid(color%3D%22grey%22%2C%20linestyle%3D%22--%22%2C%20alpha%3D0.5)%0A%20%20%20%20radar_fig.tight_layout()%0A%0A%20%20%20%20mo.mpl.interactive(radar_fig)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%2010.4%20%E3%82%B0%E3%83%A9%E3%83%95%E7%94%BB%E5%83%8F%E3%81%AE%E4%BF%9D%E5%AD%98%0A%0A%20%20%20%202%20%E3%81%A4%E3%81%AE%E5%8F%AF%E8%A6%96%E5%8C%96%E3%82%92%20%60notebooks%2Frag_evaluation_heatmap_bar.png%60%20%E3%81%A8%0A%20%20%20%20%60notebooks%2Frag_evaluation_radar.png%60%20%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20README%20%E3%82%84%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AB%E8%B2%BC%E3%82%8A%E4%BB%98%E3%81%91%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AB%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20save_charts_button%20%3D%20mo.ui.run_button(label%3D%22%E3%82%B0%E3%83%A9%E3%83%95%E7%94%BB%E5%83%8F%E3%82%92%E4%BF%9D%E5%AD%98%22)%0A%20%20%20%20save_charts_button%0A%20%20%20%20return%20(save_charts_button%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%A0%E3%81%91%E3%80%812%20%E3%81%A4%E3%81%AE%20Figure%20%E3%82%92%20PNG%20%E3%81%A8%E3%81%97%E3%81%A6%E6%9B%B8%E3%81%8D%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_(NOTEBOOK_DIR%2C%20heatmap_bar_fig%2C%20mo%2C%20radar_fig%2C%20save_charts_button)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20save_charts_button.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22%E3%82%B0%E3%83%A9%E3%83%95%E7%94%BB%E5%83%8F%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20heatmap_bar_path%20%3D%20NOTEBOOK_DIR%20%2F%20%22rag_evaluation_heatmap_bar.png%22%0A%20%20%20%20radar_path%20%3D%20NOTEBOOK_DIR%20%2F%20%22rag_evaluation_radar.png%22%0A%20%20%20%20heatmap_bar_fig.savefig(heatmap_bar_path%2C%20dpi%3D150%2C%20bbox_inches%3D%22tight%22)%0A%20%20%20%20radar_fig.savefig(radar_path%2C%20dpi%3D150%2C%20bbox_inches%3D%22tight%22)%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%F0%9F%93%8A%20%E3%82%B0%E3%83%A9%E3%83%95%E7%94%BB%E5%83%8F%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%22%0A%20%20%20%20%20%20%20%20f%22%60%7Bheatmap_bar_path%7D%60%E3%80%81%60%7Bradar_path%7D%60%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%2011.%20%E7%B5%90%E6%9E%9C%E3%82%92%20CSV%20%E3%81%AB%E4%BF%9D%E5%AD%98%0A%0A%20%20%20%20%E8%A1%8C%E5%8D%98%E4%BD%8D%E3%81%AE%E8%A9%95%E4%BE%A1%E7%B5%90%E6%9E%9C%E3%82%92%20%60notebooks%2Frag_evaluation_results.csv%60%20%E3%81%AB%E3%80%81%0A%20%20%20%20%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%94%E3%81%A8%E3%81%AE%E9%9B%86%E8%A8%88%E3%82%92%20%60notebooks%2Frag_evaluation_summary.csv%60%20%E3%81%AB%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E8%A8%AD%E5%AE%9A%E3%82%92%E5%A4%89%E3%81%88%E3%81%9F%E5%89%8D%E5%BE%8C%E3%81%AE%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E6%AF%94%E8%BC%83%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AF%E3%80%81%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%20CSV%20%E3%82%92%E6%AE%8B%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8F%E3%81%A8%E4%BE%BF%E5%88%A9%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_(mo)%3A%0A%20%20%20%20save_results_button%20%3D%20mo.ui.run_button(label%3D%22%E8%A9%95%E4%BE%A1%E7%B5%90%E6%9E%9C%20CSV%20%E3%82%92%E4%BF%9D%E5%AD%98%22)%0A%20%20%20%20save_results_button%0A%20%20%20%20return%20(save_results_button%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%A0%E3%81%91%E3%80%81%E8%A9%B3%E7%B4%B0%E7%B5%90%E6%9E%9C%E3%81%A8%E9%9B%86%E8%A8%88%E7%B5%90%E6%9E%9C%E3%81%AE%202%20%E3%81%A4%E3%81%AE%20CSV%20%E3%82%92%E6%9B%B8%E3%81%8D%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_(%0A%20%20%20%20NOTEBOOK_DIR%2C%0A%20%20%20%20aggregate_scores%2C%0A%20%20%20%20available_metric_columns%2C%0A%20%20%20%20evaluation_results_df%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20save_results_button%2C%0A)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20save_results_button.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22%E8%A9%95%E4%BE%A1%E7%B5%90%E6%9E%9C%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%0A%20%20%20%20results_path%20%3D%20NOTEBOOK_DIR%20%2F%20%22rag_evaluation_results.csv%22%0A%20%20%20%20summary_path%20%3D%20NOTEBOOK_DIR%20%2F%20%22rag_evaluation_summary.csv%22%0A%20%20%20%20result_columns%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%22source%22%2C%0A%20%20%20%20%20%20%20%20%22question%22%2C%0A%20%20%20%20%20%20%20%20%22answer%22%2C%0A%20%20%20%20%20%20%20%20%22ground_truth%22%2C%0A%20%20%20%20%20%20%20%20%22run_error%22%2C%0A%20%20%20%20%20%20%20%20*available_metric_columns%2C%0A%20%20%20%20%5D%0A%20%20%20%20evaluation_results_df%5Bresult_columns%5D.to_csv(results_path%2C%20index%3DFalse)%0A%20%20%20%20aggregate_scores.to_csv(summary_path)%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%E2%9C%85%20%E5%AE%8C%E5%85%A8%E3%81%AA%E8%A9%95%E4%BE%A1%E7%B5%90%E6%9E%9C%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%22%0A%20%20%20%20%20%20%20%20f%22%60%7Bresults_path%7D%60%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20f%22%E2%9C%85%20%E9%9B%86%E8%A8%88%E7%B5%90%E6%9E%9C%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%60%7Bsummary_path%7D%60%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%2012.%20%E8%A7%A3%E9%87%88%E3%82%AC%E3%82%A4%E3%83%89%0A%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%E2%94%8C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%90%0A%20%20%20%20%20%20%20%20%E2%94%82%20%20%E6%8C%87%E6%A8%99%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%E2%94%82%20%E3%82%B9%E3%82%B3%E3%82%A2%20%3C%200.4%20%E2%94%82%200.4-0.7%20(%E5%8F%AF)%20%E2%94%82%20%3E%200.7%20(%E8%89%AF)%20%20%20%20%E2%94%82%0A%20%20%20%20%20%20%20%20%E2%94%82%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%82%0A%20%20%20%20%20%20%20%20%E2%94%82%20%20Answer%20Accuracy%20%20%20%20%20%20%20%20%20%E2%94%82%20%E8%AA%A4%E7%AD%94%20%20%20%20%20%20%20%20%20%E2%94%82%20%E9%83%A8%E5%88%86%E4%B8%80%E8%87%B4%20%20%20%20%20%20%E2%94%82%20%E5%8F%82%E7%85%A7%E3%81%A8%E4%B8%80%E8%87%B4%20%20%20%20%E2%94%82%0A%20%20%20%20%20%20%20%20%E2%94%82%20%20Context%20Relevance%20%20%20%20%20%20%20%E2%94%82%20%E8%84%B1%E7%B7%9A%E3%81%97%E3%81%9F%20ctx%20%E2%94%82%20%E3%81%82%E3%82%8B%E7%A8%8B%E5%BA%A6%E7%84%A6%E7%82%B9%20%20%E2%94%82%20%E7%84%A6%E7%82%B9%E3%81%8C%E6%98%8E%E7%A2%BA%20%20%20%20%E2%94%82%0A%20%20%20%20%20%20%20%20%E2%94%82%20%20Response%20Groundedness%20%20%20%E2%94%82%20%E6%A0%B9%E6%8B%A0%E3%81%AA%E3%81%97%20%20%20%20%20%E2%94%82%20%E4%B8%80%E9%83%A8%E6%A0%B9%E6%8B%A0%E3%81%82%E3%82%8A%20%20%E2%94%82%20%E5%8D%81%E5%88%86%E3%81%AB%E6%A0%B9%E6%8B%A0%E3%81%82%E3%82%8A%E2%94%82%0A%20%20%20%20%20%20%20%20%E2%94%82%20%20Context%20Precision%20%20%20%20%20%20%20%E2%94%82%20%E3%83%8E%E3%82%A4%E3%82%BA%E3%81%AE%E5%A4%9A%E3%81%84%E9%A0%86%E2%94%82%20%E5%A4%9A%E5%B0%91%E3%83%8E%E3%82%A4%E3%82%BA%E3%81%82%E3%82%8A%E2%94%82%20%E9%96%A2%E9%80%A3%E9%A0%85%E7%9B%AE%E3%81%8C%E5%85%88%E9%A0%AD%E2%94%82%0A%20%20%20%20%20%20%20%20%E2%94%82%20%20Context%20Recall%20%20%20%20%20%20%20%20%20%20%E2%94%82%20%E6%83%85%E5%A0%B1%E4%B8%8D%E8%B6%B3%20%20%20%20%20%E2%94%82%20%E9%83%A8%E5%88%86%E7%9A%84%20%20%20%20%20%20%20%20%E2%94%82%20%E5%AE%8C%E5%85%A8%20%20%20%20%20%20%20%20%20%20%E2%94%82%0A%20%20%20%20%20%20%20%20%E2%94%94%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%98%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20%E6%8C%87%E6%A8%99%E3%81%94%E3%81%A8%E3%81%AE%E6%94%B9%E5%96%84%E6%96%B9%E6%B3%95%0A%0A%20%20%20%20%20%20%20%20%7C%20%E4%BD%8E%E3%81%84%E6%8C%87%E6%A8%99%20%7C%20%E8%80%83%E3%81%88%E3%82%89%E3%82%8C%E3%82%8B%E5%8E%9F%E5%9B%A0%20%7C%20%E5%AF%BE%E5%BF%9C%20%7C%0A%20%20%20%20%20%20%20%20%7C---%7C---%7C---%7C%0A%20%20%20%20%20%20%20%20%7C%20Answer%20Accuracy%20%7C%20%E7%94%9F%E6%88%90%E5%9B%9E%E7%AD%94%E3%81%8C%E5%8F%82%E7%85%A7%E5%9B%9E%E7%AD%94%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%97%E3%81%AA%E3%81%84%20%7C%20%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%80%81%E6%A4%9C%E7%B4%A2%E7%AF%84%E5%9B%B2%E3%82%92%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B%E3%81%8B%E3%80%81%E3%82%88%E3%82%8A%E5%BC%B7%E5%8A%9B%E3%81%AA%E5%9B%9E%E7%AD%94%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%86%20%7C%0A%20%20%20%20%20%20%20%20%7C%20Context%20Relevance%20%7C%20%E5%8F%96%E5%BE%97%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%8C%E8%B3%AA%E5%95%8F%E3%81%8B%E3%82%89%E5%A4%96%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%20%7C%20%60score_threshold%60%20%E3%82%92%E4%B8%8A%E3%81%92%E3%80%81%E3%82%AF%E3%82%A8%E3%83%AA%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%92%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B%E3%81%8B%E3%80%81%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%82%92%E8%AA%BF%E6%95%B4%E3%81%99%E3%82%8B%20%7C%0A%20%20%20%20%20%20%20%20%7C%20Response%20Groundedness%20%7C%20%E5%9B%9E%E7%AD%94%E3%81%AB%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%A7%E6%94%AF%E3%81%88%E3%82%89%E3%82%8C%E3%81%AA%E3%81%84%E4%B8%BB%E5%BC%B5%E3%81%8C%E3%81%82%E3%82%8B%20%7C%20%E6%A0%B9%E6%8B%A0%E4%BB%98%E3%81%91%E3%81%AE%E6%8C%87%E7%A4%BA%E3%82%92%E5%BC%B7%E3%82%81%E3%80%81%E8%A3%8F%E4%BB%98%E3%81%91%E3%81%AE%E3%81%AA%E3%81%84%E7%B5%B1%E5%90%88%E3%82%92%E6%B8%9B%E3%82%89%E3%81%99%20%7C%0A%20%20%20%20%20%20%20%20%7C%20Context%20Precision%20%7C%20%E9%96%A2%E9%80%A3%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%8C%E5%85%88%E9%A0%AD%E3%81%AB%E4%B8%A6%E3%81%B0%E3%81%AA%E3%81%84%20%7C%20%60k%60%20%E3%82%92%E6%B8%9B%E3%82%89%E3%81%97%E3%80%81%60score_threshold%60%20%E3%82%92%E4%B8%8A%E3%81%92%E3%82%8B%E3%81%8B%E3%80%81reranking%20%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%20%7C%0A%20%20%20%20%20%20%20%20%7C%20Context%20Recall%20%7C%20%E5%BF%85%E8%A6%81%E3%81%AA%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%20%7C%20%60score_threshold%60%20%E3%82%92%E4%B8%8B%E3%81%92%E3%80%81%60k%60%20%E3%82%92%E5%A2%97%E3%82%84%E3%81%97%E3%80%81%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%82%92%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B%E3%81%8B%E3%80%81%E6%96%87%E6%9B%B8%E3%82%92%E5%88%A5%E3%81%AE%E6%96%B9%E6%B3%95%E3%81%A7%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B%20%7C%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20RAGAS%20%E3%81%A7%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%A0%E3%81%8C%E3%80%81%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%AA%E3%81%84%20agentic%20%E6%8C%87%E6%A8%99%0A%0A%20%20%20%20%20%20%20%20RAGAS%20%E3%81%AF%E3%80%81%E6%9C%80%E7%B5%82%20RAG%20%E5%9B%9E%E7%AD%94%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AA%E3%81%8F%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AE%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%97%E3%81%9F%E3%81%84%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E5%90%91%E3%81%91%E3%81%AB%E3%80%81%0A%20%20%20%20%20%20%20%20%5Bagentic%2Ftool-use%20metrics%5D(https%3A%2F%2Fdocs.ragas.io%2Fen%2Flatest%2Fconcepts%2Fmetrics%2Favailable_metrics%2Fagents%2F)%20%E3%82%82%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%20%20%20%20%7C%20%E6%8C%87%E6%A8%99%20%7C%20%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E9%9D%A2%20%7C%0A%20%20%20%20%20%20%20%20%7C---%7C---%7C%0A%20%20%20%20%20%20%20%20%7C%20%60ToolCallAccuracy%60%20%7C%20%E6%9C%9F%E5%BE%85%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%8C%E3%81%82%E3%82%8A%E3%80%81%E9%A0%86%E5%BA%8F%E3%81%A8%E5%BC%95%E6%95%B0%E3%81%AE%E5%8E%B3%E5%AF%86%E3%81%AA%E4%B8%80%E8%87%B4%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60ToolCallF1%60%20%7C%20%E3%83%84%E3%83%BC%E3%83%AB%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%AE%20precision%2Frecall%20%E3%82%92%E3%82%88%E3%82%8A%E7%B7%A9%E3%82%84%E3%81%8B%E3%81%AB%E6%8E%A1%E7%82%B9%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60AgentGoalAccuracyWithReference%60%20%7C%20%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AE%E6%9C%80%E7%B5%82%E7%B5%90%E6%9E%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E5%8F%82%E7%85%A7%E7%B5%90%E6%9E%9C%E3%81%8C%E3%81%82%E3%82%8B%E5%A0%B4%E5%90%88%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60AgentGoalAccuracyWithoutReference%60%20%7C%20%E5%8F%82%E7%85%A7%E3%81%AA%E3%81%97%E3%81%A7%E3%80%81%E5%88%A4%E5%AE%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E7%9B%AE%E6%A8%99%E9%81%94%E6%88%90%E3%82%92%E5%88%A4%E6%96%AD%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60TopicAdherence%60%20%7C%20%E4%BC%9A%E8%A9%B1%E3%81%8C%E6%9C%9F%E5%BE%85%E3%81%95%E3%82%8C%E3%82%8B%E3%83%88%E3%83%94%E3%83%83%E3%82%AF%E3%81%AB%E7%95%99%E3%81%BE%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%20%7C%0A%0A%20%20%20%20%20%20%20%20%E3%81%93%E3%82%8C%E3%82%89%E3%81%AF%E3%83%9E%E3%83%AB%E3%83%81%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AE%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%80%81%E6%9C%9F%E5%BE%85%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E7%9B%AE%E6%A8%99%E7%8A%B6%E6%85%8B%E3%81%AE%E6%B3%A8%E9%87%88%E3%82%92%E5%BF%85%E8%A6%81%E3%81%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%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%AB%E3%81%AF%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%20%20%20%20%E6%9C%AC%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AF%E3%80%81%E5%8D%98%E4%B8%80%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AE%20RAG%20%E6%8C%87%E6%A8%99%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E6%9C%80%E7%B5%82%20RAG%20%E5%9B%9E%E7%AD%94%E3%81%A8%E5%8F%96%E5%BE%97%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%A0%E3%81%91%E3%82%92%E8%A9%95%E4%BE%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%B0%E3%83%A9%E3%83%95%E3%81%8C%E3%82%B9%E3%82%B3%E3%82%A2%E3%81%AB%E4%B8%8E%E3%81%88%E3%82%8B%E5%BD%B1%E9%9F%BF%0A%0A%20%20%20%20%20%20%20%20%7C%20%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%20%7C%20%E5%BD%B1%E9%9F%BF%E3%81%99%E3%82%8B%E6%8C%87%E6%A8%99%20%7C%20%E8%AA%BF%E6%95%B4%E3%83%AC%E3%83%90%E3%83%BC%20%7C%0A%20%20%20%20%20%20%20%20%7C---%7C---%7C---%7C%0A%20%20%20%20%20%20%20%20%7C%20%60search_child_chunks%60%20%E3%81%AE%20%60score_threshold%60%20%7C%20Context%20Precision%20%2F%20Recall%20%2F%20Relevance%20%7C%20%E4%B8%8A%E3%81%92%E3%82%8B%E3%81%A8%20precision%E3%80%81%E4%B8%8B%E3%81%92%E3%82%8B%E3%81%A8%20recall%20%E3%81%8C%E9%AB%98%E3%81%BE%E3%82%8B%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60MAX_TOOL_CALLS%60%20%2F%20%60MAX_ITERATIONS%60%20%7C%20Answer%20Accuracy%20%2F%20Context%20Recall%20%7C%20%E4%B8%8A%E3%81%92%E3%82%8B%E3%81%A8%E8%AA%BF%E6%9F%BB%E9%87%8F%E3%81%AF%E5%A2%97%E3%81%88%E3%82%8B%E3%81%8C%E9%81%85%E3%81%8F%E3%81%AA%E3%82%8B%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60compress_context%60%20%7C%20Response%20Groundedness%20%2F%20Answer%20Accuracy%20%7C%20%E5%9C%A7%E7%B8%AE%E3%81%AB%E3%82%88%E3%82%8A%E6%9C%80%E7%B5%82%E5%9B%9E%E7%AD%94%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E8%A9%B3%E7%B4%B0%E3%81%8C%E8%90%BD%E3%81%A1%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%8C%E3%81%82%E3%82%8B%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%E3%82%AF%E3%82%A8%E3%83%AA%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%20%7C%20Context%20Relevance%20%2F%20Context%20Recall%20%7C%20%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%AF%E6%A4%9C%E7%B4%A2%E7%AF%84%E5%9B%B2%E3%81%A8%E7%84%A6%E7%82%B9%E3%82%92%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B%20%7C%0A%20%20%20%20%20%20%20%20%22%22%22.strip()%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
e1a3dcbde29f7973ad371f7e93db8237