From 675d86aa11ec70e3b87f081e3d192038397cbf1f Mon Sep 17 00:00:00 2001 From: Harrison Chase Date: Mon, 24 Apr 2023 13:29:51 -0700 Subject: [PATCH] show how to use memory in convo chain (#3463) --- .../index_examples/chat_vector_db.ipynb | 132 ++++++++++++++++-- 1 file changed, 117 insertions(+), 15 deletions(-) diff --git a/docs/modules/chains/index_examples/chat_vector_db.ipynb b/docs/modules/chains/index_examples/chat_vector_db.ipynb index b5e28b51..e86aa162 100644 --- a/docs/modules/chains/index_examples/chat_vector_db.ipynb +++ b/docs/modules/chains/index_examples/chat_vector_db.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "70c4e529", "metadata": { "tags": [] @@ -36,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "01c46e92", "metadata": { "tags": [] @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "id": "433363a5", "metadata": { "tags": [] @@ -81,18 +81,17 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "id": "a8930cf7", "metadata": { "tags": [] }, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Running Chroma using direct local API.\n", - "Using DuckDB in-memory for database. Data will be transient.\n" + "Using embedded DuckDB without persistence: data will be transient\n" ] } ], @@ -104,6 +103,25 @@ "vectorstore = Chroma.from_documents(documents, embeddings)" ] }, + { + "cell_type": "markdown", + "id": "898b574b", + "metadata": {}, + "source": [ + "We can now create a memory object, which is neccessary to track the inputs/outputs and hold a conversation." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "af803fee", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.memory import ConversationBufferMemory\n", + "memory = ConversationBufferMemory(memory_key=\"chat_history\", return_messages=True)" + ] + }, { "cell_type": "markdown", "id": "3c96b118", @@ -114,12 +132,96 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 21, "id": "7b4110f3", "metadata": { "tags": [] }, "outputs": [], + "source": [ + "qa = ConversationalRetrievalChain.from_llm(OpenAI(temperature=0), vectorstore.as_retriever(), memory=memory)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "e8ce4fe9", + "metadata": {}, + "outputs": [], + "source": [ + "query = \"What did the president say about Ketanji Brown Jackson\"\n", + "result = qa({\"question\": query})" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "4c79862b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\" The president said that Ketanji Brown Jackson is one of the nation's top legal minds, a former top litigator in private practice, a former federal public defender, and from a family of public school educators and police officers. He also said that she is a consensus builder and has received a broad range of support from the Fraternal Order of Police to former judges appointed by Democrats and Republicans.\"" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result[\"answer\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "c697d9d1", + "metadata": {}, + "outputs": [], + "source": [ + "query = \"Did he mention who she suceeded\"\n", + "result = qa({\"question\": query})" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "ba0678f3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "' Ketanji Brown Jackson succeeded Justice Stephen Breyer on the United States Supreme Court.'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result['answer']" + ] + }, + { + "cell_type": "markdown", + "id": "84426220", + "metadata": {}, + "source": [ + "## Pass in chat history\n", + "\n", + "In the above example, we used a Memory object to track chat history. We can also just pass it in explicitly. In order to do this, we need to initialize a chain without any memory object." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "676b8a36", + "metadata": {}, + "outputs": [], "source": [ "qa = ConversationalRetrievalChain.from_llm(OpenAI(temperature=0), vectorstore.as_retriever())" ] @@ -134,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "7fe3e730", "metadata": { "tags": [] @@ -148,7 +250,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "id": "bfff9cc8", "metadata": { "tags": [] @@ -160,7 +262,7 @@ "\" The president said that Ketanji Brown Jackson is one of the nation's top legal minds, a former top litigator in private practice, a former federal public defender, and from a family of public school educators and police officers. He also said that she is a consensus builder and has received a broad range of support from the Fraternal Order of Police to former judges appointed by Democrats and Republicans.\"" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -179,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "00b4cf00", "metadata": { "tags": [] @@ -193,7 +295,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "f01828d1", "metadata": { "tags": [] @@ -205,7 +307,7 @@ "' Ketanji Brown Jackson succeeded Justice Stephen Breyer on the United States Supreme Court.'" ] }, - "execution_count": 11, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -636,7 +738,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.9.1" } }, "nbformat": 4,