mirror of
https://github.com/hwchase17/langchain
synced 2024-10-29 17:07:25 +00:00
182 lines
5.2 KiB
Plaintext
182 lines
5.2 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "5436020b",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Defining Custom Tools\n",
|
||
|
"\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": "code",
|
||
|
"execution_count": 2,
|
||
|
"id": "1aaba18c",
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# Import things that are needed generically\n",
|
||
|
"from langchain.agents import initialize_agent, Tool\n",
|
||
|
"from langchain.llms import OpenAI\n",
|
||
|
"from langchain import LLMMathChain, SerpAPIWrapper"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "8e2c3874",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Initialize the LLM to use for the agent."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"id": "36ed392e",
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"llm = OpenAI(temperature=0)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 5,
|
||
|
"id": "56ff7670",
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# Load the tool configs that are needed.\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": 6,
|
||
|
"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": 7,
|
||
|
"id": "6f96a891",
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
||
|
"\u001b[32;1m\u001b[1;3m I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.\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 out Harry Styles' age.\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 raised to the 0.23 power.\n",
|
||
|
"Action: Calculator\n",
|
||
|
"Action Input: 28^0.23\u001b[0m\n",
|
||
|
"\n",
|
||
|
"\u001b[1m> Entering new LLMMathChain chain...\u001b[0m\n",
|
||
|
"28^0.23\u001b[32;1m\u001b[1;3m\n",
|
||
|
"\n",
|
||
|
"```python\n",
|
||
|
"import math\n",
|
||
|
"print(math.pow(28, 0.23))\n",
|
||
|
"```\n",
|
||
|
"\u001b[0m\n",
|
||
|
"Answer: \u001b[33;1m\u001b[1;3m2.1520202182226886\n",
|
||
|
"\u001b[0m\n",
|
||
|
"\u001b[1m> Finished LLMMathChain 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: Harry Styles, Olivia Wilde's boyfriend, is 28 years old and his age raised to the 0.23 power is 2.1520202182226886.\u001b[0m\n",
|
||
|
"\u001b[1m> Finished AgentExecutor chain.\u001b[0m\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"\"Harry Styles, Olivia Wilde's boyfriend, is 28 years old and his age raised to the 0.23 power is 2.1520202182226886.\""
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"agent.run(\"Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"id": "e7776981",
|
||
|
"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.10.8"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 5
|
||
|
}
|