mirror of
https://github.com/hwchase17/langchain
synced 2024-10-29 17:07:25 +00:00
b4762dfff0
With the original prompt, the chain keeps trying to jump straight to doing math directly, without first looking up ages. With this two-part question, it behaves more as intended: > Entering new ZeroShotAgent chain... How old is Olivia Wilde's boyfriend? What is that number raised to the 0.23 power? Thought: I need to find out how old Olivia Wilde's boyfriend is, and then use a calculator to calculate the power. Action: Search Action Input: Olivia Wilde's boyfriend age Observation: While Wilde, 37, and Styles, 27, have both kept a low profile when it comes to talking about their relationship, Wilde did address their ... Thought: Olivia Wilde's boyfriend is 27 years old. Action: Calculator Action Input: 27^0.23 > Entering new LLMMathChain chain... 27^0.23 ```python import math print(math.pow(27, 0.23)) ``` Answer: 2.1340945944237553 > Finished LLMMathChain chain. Observation: Answer: 2.1340945944237553 Thought: I now know the final answer. Final Answer: 2.1340945944237553 > Finished ZeroShotAgent chain.
197 lines
6.2 KiB
Plaintext
197 lines
6.2 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "5436020b",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Agents\n",
|
|
"\n",
|
|
"Agents use an LLM to determine which actions to take and in what order.\n",
|
|
"An action can either be using a tool and observing its output, or returning to the user.\n",
|
|
"\n",
|
|
"When used correctly agents can be extremely powerful. The purpose of this notebook is to show you how to easily use agents through the simplest, highest level API. If you want more low level control over various components, check out the documentation for custom agents (coming soon)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "3c6226b9",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Concepts\n",
|
|
"\n",
|
|
"In order to load agents, you should understand the following concepts:\n",
|
|
"\n",
|
|
"- Tool: A function that performs a specific duty. This can be things like: Google Search, Database lookup, Python REPL, other chains. The interface for a tool is currently a function that is expected to have a string as an input, with a string as an output.\n",
|
|
"- LLM: The language model powering the agent.\n",
|
|
"- Agent: The agent to use. This should be a string that references a support agent class. Because this notebook focuses on the simplest, highest level API, this only covers using the standard supported agents. If you want to implement a custom agent, see the documentation for custom agents (coming soon).\n",
|
|
"\n",
|
|
"**For a list of supported agents and their specifications, see [here](../explanation/agents.md)**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "05d4b21e",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Tools\n",
|
|
"When constructing your own agent, you will need to provide it with a list of Tools that it can use. A Tool is defined as below.\n",
|
|
"\n",
|
|
"```python\n",
|
|
"class Tool(NamedTuple):\n",
|
|
" \"\"\"Interface for tools.\"\"\"\n",
|
|
"\n",
|
|
" name: str\n",
|
|
" func: Callable[[str], str]\n",
|
|
" description: Optional[str] = None\n",
|
|
"```\n",
|
|
"\n",
|
|
"The two required components of a Tool are the name and then the tool itself. A tool description is optional, as it is needed for some agents but not all."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2558a02d",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Loading an agent\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "36ed392e",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Import things that are needed generically\n",
|
|
"from langchain.agents import initialize_agent, Tool\n",
|
|
"from langchain.llms import OpenAI"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "56ff7670",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load the tool configs that are needed.\n",
|
|
"from langchain import LLMMathChain, SerpAPIWrapper\n",
|
|
"llm = OpenAI(temperature=0)\n",
|
|
"search = SerpAPIWrapper()\n",
|
|
"llm_math_chain = LLMMathChain(llm=llm, verbose=True)\n",
|
|
"tools = [\n",
|
|
" Tool(\n",
|
|
" name = \"Search\",\n",
|
|
" func=search.run,\n",
|
|
" description=\"useful for when you need to answer questions about current events\"\n",
|
|
" ),\n",
|
|
" Tool(\n",
|
|
" name=\"Calculator\",\n",
|
|
" func=llm_math_chain.run,\n",
|
|
" description=\"useful for when you need to answer questions about math\"\n",
|
|
" )\n",
|
|
"]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "5b93047d",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Construct the agent. We will use the default agent type here.\n",
|
|
"# See documentation for a full list of options.\n",
|
|
"llm = OpenAI(temperature=0)\n",
|
|
"agent = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "6f96a891",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"What is the age of Olivia Wilde's boyfriend raised to the 0.23 power?\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I need to find the age of Olivia Wilde's boyfriend\n",
|
|
"Action: Search\n",
|
|
"Action Input: \"Olivia Wilde's boyfriend\"\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mOlivia Wilde started dating Harry Styles after ending her years-long engagement to Jason Sudeikis — see their relationship timeline.\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I need to find the age of Harry Styles\n",
|
|
"Action: Search\n",
|
|
"Action Input: \"Harry Styles age\"\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3m28 years\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I need to calculate 28 to the 0.23 power\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 28^0.23\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new chain...\u001b[0m\n",
|
|
"28^0.23\u001b[32;1m\u001b[1;3m\n",
|
|
"\n",
|
|
"```python\n",
|
|
"print(28**0.23)\n",
|
|
"```\n",
|
|
"\u001b[0m\n",
|
|
"Answer: \u001b[33;1m\u001b[1;3m2.1520202182226886\n",
|
|
"\u001b[0m\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n",
|
|
"\n",
|
|
"Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.1520202182226886\n",
|
|
"\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
|
|
"Final Answer: 2.1520202182226886\u001b[0m"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'2.1520202182226886'"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"agent.run(\"How old is Olivia Wilde's boyfriend? What is that number raised to the 0.23 power?\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "2f0852ff",
|
|
"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.7.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|