File size: 5,336 Bytes
acc4ffe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "bfe18e28",
   "metadata": {},
   "source": [
    "# Serialization\n",
    "\n",
    "This notebook goes over how to serialize agents. For this notebook, it is important to understand the distinction we draw between `agents` and `tools`. An agent is the LLM powered decision maker that decides which actions to take and in which order. Tools are various instruments (functions) an agent has access to, through which an agent can interact with the outside world. When people generally use agents, they primarily talk about using an agent WITH tools. However, when we talk about serialization of agents, we are talking about the agent by itself. We plan to add support for serializing an agent WITH tools sometime in the future.\n",
    "\n",
    "Let's start by creating an agent with tools as we normally do:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "eb729f16",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.agents import load_tools\n",
    "from langchain.agents import initialize_agent\n",
    "from langchain.llms import OpenAI\n",
    "\n",
    "llm = OpenAI(temperature=0)\n",
    "tools = load_tools([\"serpapi\", \"llm-math\"], llm=llm)\n",
    "agent = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0578f566",
   "metadata": {},
   "source": [
    "Let's now serialize the agent. To be explicit that we are serializing ONLY the agent, we will call the `save_agent` method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "dc544de6",
   "metadata": {},
   "outputs": [],
   "source": [
    "agent.save_agent('agent.json')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "62dd45bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\r\n",
      "    \"llm_chain\": {\r\n",
      "        \"memory\": null,\r\n",
      "        \"verbose\": false,\r\n",
      "        \"prompt\": {\r\n",
      "            \"input_variables\": [\r\n",
      "                \"input\",\r\n",
      "                \"agent_scratchpad\"\r\n",
      "            ],\r\n",
      "            \"output_parser\": null,\r\n",
      "            \"template\": \"Answer the following questions as best you can. You have access to the following tools:\\n\\nSearch: A search engine. Useful for when you need to answer questions about current events. Input should be a search query.\\nCalculator: Useful for when you need to answer questions about math.\\n\\nUse the following format:\\n\\nQuestion: the input question you must answer\\nThought: you should always think about what to do\\nAction: the action to take, should be one of [Search, Calculator]\\nAction Input: the input to the action\\nObservation: the result of the action\\n... (this Thought/Action/Action Input/Observation can repeat N times)\\nThought: I now know the final answer\\nFinal Answer: the final answer to the original input question\\n\\nBegin!\\n\\nQuestion: {input}\\nThought:{agent_scratchpad}\",\r\n",
      "            \"template_format\": \"f-string\",\r\n",
      "            \"validate_template\": true,\r\n",
      "            \"_type\": \"prompt\"\r\n",
      "        },\r\n",
      "        \"llm\": {\r\n",
      "            \"model_name\": \"text-davinci-003\",\r\n",
      "            \"temperature\": 0.0,\r\n",
      "            \"max_tokens\": 256,\r\n",
      "            \"top_p\": 1,\r\n",
      "            \"frequency_penalty\": 0,\r\n",
      "            \"presence_penalty\": 0,\r\n",
      "            \"n\": 1,\r\n",
      "            \"best_of\": 1,\r\n",
      "            \"request_timeout\": null,\r\n",
      "            \"logit_bias\": {},\r\n",
      "            \"_type\": \"openai\"\r\n",
      "        },\r\n",
      "        \"output_key\": \"text\",\r\n",
      "        \"_type\": \"llm_chain\"\r\n",
      "    },\r\n",
      "    \"allowed_tools\": [\r\n",
      "        \"Search\",\r\n",
      "        \"Calculator\"\r\n",
      "    ],\r\n",
      "    \"return_values\": [\r\n",
      "        \"output\"\r\n",
      "    ],\r\n",
      "    \"_type\": \"zero-shot-react-description\"\r\n",
      "}"
     ]
    }
   ],
   "source": [
    "!cat agent.json"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0eb72510",
   "metadata": {},
   "source": [
    "We can now load the agent back in"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "eb660b76",
   "metadata": {},
   "outputs": [],
   "source": [
    "agent = initialize_agent(tools, llm, agent_path=\"agent.json\", verbose=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aa624ea5",
   "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
}