{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from langchain.agents import Tool, AgentExecutor, BaseMultiActionAgent\n", "from langchain import OpenAI, SerpAPIWrapper" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def random_word(query: str) -> str:\n", " print(\"\\nNow I'm doing this!\")\n", " return f\"{query}, foo\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "search = SerpAPIWrapper()\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 = \"RandomWord\",\n", " func=random_word,\n", " description=\"call this to get a random word.\",\n", " )\n", "]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from langchain.tools import tool\n", "\n", "@tool\n", "def tool1(event) -> str:\n", " \"\"\"这里必须添加描述,不然AssertionError: Function must have a docstring if description not provided.\"\"\"\n", " return \"111\"\n", "\n", "from langchain.tools import tool\n", "\n", "@tool\n", "def tool2(event) -> str:\n", " \"\"\"这里必须添加描述,不然AssertionError: Function must have a docstring if description not provided.\"\"\"\n", " return \"222\"\n", "\n", "tools = [tool1, tool2]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from typing import List, Tuple, Any, Union\n", "from langchain.schema import AgentAction, AgentFinish\n", "\n", "class FakeAgent(BaseMultiActionAgent):\n", " \"\"\"Fake Custom Agent.\"\"\"\n", " \n", " @property\n", " def input_keys(self):\n", " return [\"input\"]\n", " \n", " def plan(\n", " self, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any\n", " ) -> Union[List[AgentAction], AgentFinish]:\n", " \"\"\"Given input, decided what to do.\n", "\n", " Args:\n", " intermediate_steps: Steps the LLM has taken to date,\n", " along with observations\n", " **kwargs: User inputs.\n", "\n", " Returns:\n", " Action specifying what tool to use.\n", " \"\"\"\n", " print(\"lizhen0\",intermediate_steps)\n", " if len(intermediate_steps) == 0:\n", " print(\"lizhen1\",intermediate_steps)\n", " return [\n", " AgentAction(tool=\"tool1\", tool_input=kwargs[\"input\"], log=\"\"),\n", " AgentAction(tool=\"tool2\", tool_input=kwargs[\"input\"], log=\"\"),\n", " ]\n", " else:\n", " for tuple in intermediate_steps:\n", " print(tuple[0].tool, tuple[1])\n", " return AgentFinish(return_values={\"output\": \"bar\"}, log=\"\")\n", "\n", " async def aplan(\n", " self, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any\n", " ) -> Union[List[AgentAction], AgentFinish]:\n", " \"\"\"Given input, decided what to do.\n", "\n", " Args:\n", " intermediate_steps: Steps the LLM has taken to date,\n", " along with observations\n", " **kwargs: User inputs.\n", "\n", " Returns:\n", " Action specifying what tool to use.\n", " \"\"\"\n", " if len(intermediate_steps) == 0:\n", " return [\n", " AgentAction(tool=\"tool1\", tool_input=kwargs[\"input\"], log=\"\"),\n", " AgentAction(tool=\"tool2\", tool_input=kwargs[\"input\"], log=\"\"),\n", " ]\n", " else:\n", " return AgentFinish(return_values={\"output\": \"bar\"}, log=\"\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "agent = FakeAgent()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "lizhen0 []\n", "lizhen1 []\n", "\u001b[32;1m\u001b[1;3m\u001b[0m\u001b[36;1m\u001b[1;3m111\u001b[0m\u001b[32;1m\u001b[1;3m\u001b[0m\u001b[33;1m\u001b[1;3m222\u001b[0mlizhen0 [(AgentAction(tool='tool1', tool_input='How many people live in canada as of 2023?', log=''), '111'), (AgentAction(tool='tool2', tool_input='How many people live in canada as of 2023?', log=''), '222')]\n", "tool1 111\n", "tool2 222\n", "\u001b[32;1m\u001b[1;3m\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] }, { "data": { "text/plain": [ "'bar'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "agent_executor.run(\"How many people live in canada as of 2023?\")" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.10" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }