{ "cells": [ { "cell_type": "markdown", "id": "aa309a80", "metadata": {}, "source": [ "# QA Eval" ] }, { "cell_type": "code", "execution_count": 1, "id": "9c01a3a5", "metadata": {}, "outputs": [], "source": [ "from langchain.evaluation.qa.chat_eval_chain import QAEvalChatChain\n", "from langchain.chat_models import ChatOpenAI\n", "\n", "model = ChatOpenAI(temperature=0)\n", "\n", "eval_chain = QAEvalChatChain.from_model(model)" ] }, { "cell_type": "code", "execution_count": 4, "id": "c12568a6", "metadata": {}, "outputs": [], "source": [ "examples = [\n", " {\n", " \"question\": \"Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?\",\n", " \"answer\": \"11\"\n", " },\n", " {\n", " \"question\": 'Is the following sentence plausible? \"Joao Moutinho caught the screen pass in the NFC championship.\"',\n", " \"answer\": \"No\"\n", " }\n", "]" ] }, { "cell_type": "code", "execution_count": 5, "id": "207bb5b6", "metadata": {}, "outputs": [], "source": [ "from langchain.prompts import PromptTemplate\n", "from langchain.chains import LLMChain\n", "from langchain.llms import OpenAI" ] }, { "cell_type": "code", "execution_count": 6, "id": "3d4b9cda", "metadata": {}, "outputs": [], "source": [ "prompt = PromptTemplate(template=\"Question: {question}\\nAnswer:\", input_variables=[\"question\"])\n", "llm = OpenAI(model_name=\"text-davinci-003\", temperature=0)\n", "chain = LLMChain(llm=llm, prompt=prompt)" ] }, { "cell_type": "code", "execution_count": 7, "id": "c03c4047", "metadata": {}, "outputs": [], "source": [ "predictions = chain.apply(examples)" ] }, { "cell_type": "code", "execution_count": 8, "id": "3871729e", "metadata": {}, "outputs": [], "source": [ "graded_outputs = eval_chain.evaluate(examples, predictions, question_key=\"question\", prediction_key=\"text\")" ] }, { "cell_type": "code", "execution_count": 9, "id": "788f841a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Example 0:\n", "Question: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?\n", "Real Answer: 11\n", "Predicted Answer: 11 tennis balls\n", "Predicted Grade: GRADE: CORRECT\n", "\n", "Example 1:\n", "Question: Is the following sentence plausible? \"Joao Moutinho caught the screen pass in the NFC championship.\"\n", "Real Answer: No\n", "Predicted Answer: No, this sentence is not plausible. Joao Moutinho is a professional soccer player, not an American football player, so it is not likely that he would be catching a screen pass in the NFC championship.\n", "Predicted Grade: GRADE: CORRECT\n", "\n" ] } ], "source": [ "for i, eg in enumerate(examples):\n", " print(f\"Example {i}:\")\n", " print(\"Question: \" + eg['question'])\n", " print(\"Real Answer: \" + eg['answer'])\n", " print(\"Predicted Answer: \" + predictions[i]['text'])\n", " print(\"Predicted Grade: \" + graded_outputs[i]['text'])\n", " print()" ] }, { "cell_type": "code", "execution_count": null, "id": "2a8d822c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" } }, "nbformat": 4, "nbformat_minor": 5 }