diff --git a/docs/extras/guides/expression_language/cookbook.ipynb b/docs/extras/guides/expression_language/cookbook.ipynb index 3d46843b335..57c74ff3164 100644 --- a/docs/extras/guides/expression_language/cookbook.ipynb +++ b/docs/extras/guides/expression_language/cookbook.ipynb @@ -1238,10 +1238,163 @@ "chain.invoke({\"input\": \"whats 2 plus 2\"})" ] }, + { + "cell_type": "markdown", + "id": "5062941a", + "metadata": {}, + "source": [ + "## Memory\n", + "\n", + "This shows how to add memory to an arbitrary chain. Right now, you can use the memory classes but need to hook it up manually" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "7998efd8", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.memory import ConversationBufferMemory\n", + "from langchain.schema.runnable import RunnableMap\n", + "from langchain.prompts import MessagesPlaceholder\n", + "model = ChatOpenAI()\n", + "prompt = ChatPromptTemplate.from_messages([\n", + " (\"system\", \"You are a helpful chatbot\"),\n", + " MessagesPlaceholder(variable_name=\"history\"),\n", + " (\"human\", \"{input}\")\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "fa0087f3", + "metadata": {}, + "outputs": [], + "source": [ + "memory = ConversationBufferMemory(return_messages=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "06b531ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'history': []}" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "memory.load_memory_variables({})" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "d9437af6", + "metadata": {}, + "outputs": [], + "source": [ + "chain = RunnableMap({\n", + " \"input\": lambda x: x[\"input\"],\n", + " \"memory\": memory.load_memory_variables\n", + "}) | {\n", + " \"input\": lambda x: x[\"input\"],\n", + " \"history\": lambda x: x[\"memory\"][\"history\"]\n", + "} | prompt | model" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "bed1e260", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='Hello Bob! How can I assist you today?', additional_kwargs={}, example=False)" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inputs = {\"input\": \"hi im bob\"}\n", + "response = chain.invoke(inputs)\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "890475b4", + "metadata": {}, + "outputs": [], + "source": [ + "memory.save_context(inputs, {\"output\": response.content})" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "e8fcb77f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'history': [HumanMessage(content='hi im bob', additional_kwargs={}, example=False),\n", + " AIMessage(content='Hello Bob! How can I assist you today?', additional_kwargs={}, example=False)]}" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "memory.load_memory_variables({})" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "d837d5c3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='Your name is Bob. You mentioned it in your previous message. Is there anything else I can help you with, Bob?', additional_kwargs={}, example=False)" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inputs = {\"input\": \"whats my name\"}\n", + "response = chain.invoke(inputs)\n", + "response" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "9be88499", + "id": "179d3c03", "metadata": {}, "outputs": [], "source": []