自定义代理
本笔记本介绍如何创建自定义代理。
代理由两部分组成:
- 工具:代理可用的工具。
- 代理类本身:决定采取哪种行动。
在本笔记本中,我们将介绍如何创建自定义代理。
from langchain.agents import Tool, AgentExecutor, BaseSingleActionAgent
from langchain import OpenAI, SerpAPIWrapper
API 参考:
- Tool 来自 langchain.agents
- AgentExecutor 来自 langchain.agents
- BaseSingleActionAgent 来自 langchain.agents
search = SerpAPIWrapper()
tools = [
    Tool(
        name="Search",
        func=search.run,
        description="在需要回答有关当前事件的问题时很有用",
        return_direct=True,
    )
]
from typing import List, Tuple, Any, Union
from langchain.schema import AgentAction, AgentFinish
class FakeAgent(BaseSingleActionAgent):
    """Fake Custom Agent."""
    @property
    def input_keys(self):
        return ["input"]
    def plan(
        self, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any
    ) -> Union[AgentAction, AgentFinish]:
        """给定输入,决定要做什么。
        Args:
            intermediate_steps: LLM 到目前为止所采取的步骤,以及观察结果
            **kwargs: 用户输入。
        Returns:
            指定要使用的工具的行动。
        """
        return AgentAction(tool="Search", tool_input=kwargs["input"], log="")
    async def aplan(
        self, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any
    ) -> Union[AgentAction, AgentFinish]:
        """给定输入,决定要做什么。
        Args:
            intermediate_steps: LLM 到目前为止所采取的步骤,以及观察结果
            **kwargs: 用户输入。
        Returns:
            指定要使用的工具的行动。
        """
        return AgentAction(tool="Search", tool_input=kwargs["input"], log="")
API 参考:
- AgentAction 来自 langchain.schema
- AgentFinish 来自 langchain.schema
agent = FakeAgent()
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent, tools=tools, verbose=True
)
agent_executor.run("截至2023年加拿大有多少人口?")
> 进入新的 AgentExecutor 链...
根据世界米表对最新联合国数据的详细说明,截至2023年4月24日星期一,加拿大的当前人口为38,669,152。
> 完成链。
'The current population of Canada is 38,669,152 as of Monday, April 24, 2023, based on Worldometer elaboration of the latest United Nations data.'
