langchain 之 AgentType 解读(二)

上源码,位于 langchain/agents/agent_types.py 文件中。



class AgentType(str, Enum):
    """Enumerator with the Agent types."""

    ZERO_SHOT_REACT_DESCRIPTION = "zero-shot-react-description"
    REACT_DOCSTORE = "react-docstore"
    SELF_ASK_WITH_SEARCH = "self-ask-with-search"
    CONVERSATIONAL_REACT_DESCRIPTION = "conversational-react-description"
    CHAT_ZERO_SHOT_REACT_DESCRIPTION = "chat-zero-shot-react-description"
    CHAT_CONVERSATIONAL_REACT_DESCRIPTION = "chat-conversational-react-description"
    STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION = (
        "structured-chat-zero-shot-react-description"
    )
    OPENAI_FUNCTIONS = "openai-functions"
    OPENAI_MULTI_FUNCTIONS = "openai-multi-functions"


Agents 能利用 LLM 模型去决定接下来采取什么样的行动。An Action 不仅能够使用工具,同时还能够观察到工具的输出。或者向用户返回。接下来展示一些常见的 Agents。

  1. Zero-shot ReAct

This agent uses the ReAct framework to determine which tool to use based solely on the tool's description. 任何一个工具都可以。可参考上一篇文档如何使用 Tool。

Note: 这是最通用的 Agent action.


agent = initialize_agent(
    tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=False
)

  1. Structured input ReAct

这里采用 multi-input tools 多个输入工具。原先的 agents 能够被配置为指定的 Action input 作为单独的字符串。但此代理可以使用工具的参数架构来创建结构化的操作输入。这对于更复杂的工具使用非常有用,比如在浏览器中精确导航。

async_browser = create_async_playwright_browser()
browser_toolkit = PlayWrightBrowserToolkit.from_browser(async_browser=async_browser)
tools = browser_toolkit.get_tools()

llm = ChatOpenAI(temperature=0)  # Also works well with Anthropic models
agent_chain = initialize_agent(tools, llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
                               verbose=True)

  1. OpenAI Functions

Certain OpenAI models (like gpt-3.5-turbo-0613 and gpt-4-0613) have been explicitly fine-tuned to detect when a function should be called and respond with the inputs that should be passed to the function. The OpenAI Functions Agent is designed to work with these models.

db = SQLDatabase.from_uri("sqlite:///../../../../../notebooks/Chinook.db")
toolkit = SQLDatabaseToolkit(llm=ChatOpenAI(), db=db)

agent_kwargs = {
    "system_message": SystemMessage(content="You are an expert SQL data analyst.")
}

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
agent = initialize_agent(
    toolkit.get_tools(),
    llm,
    agent=AgentType.OPENAI_FUNCTIONS,
    verbose=True,
    agent_kwargs=agent_kwargs,
)

可见前文中关于 Tools 的案例中的详细使用。


agent = initialize_agent(
    toolkit.get_tools(),
    llm,
    agent=AgentType.OPENAI_FUNCTIONS,
    verbose=True,
    agent_kwargs=agent_kwargs,
)


  1. Conversational

This agent is designed to be used in conversational settings. The prompt is designed to make the agent helpful and conversational. It uses the ReAct framework to decide which tool to use, and uses memory to remember the previous conversation interactions.


conversation_memory = ConversationBufferWindowMemory(
    memory_key="chat_history",
    k=5,
    return_messages=True
)

agent_chain = initialize_agent(
    tools=tools, 
    llm=chat_llm, 
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, 
    verbose=True, 
    max_iterations=2,
    early_stopping_method='generate',
    memory=conversation_memory, 
    stream=True
)

这里采用的agent type是chat_conversation_react_description,和zero_shot_react_description相比,该方法只是在prompt中加上了chat_history这样一个变量,使得最后prompt会带上chat_history的历史记录。

  1. Self ask with search

This agent utilizes a single tool that should be named Intermediate Answer. This tool should be able to lookup factual answers to questions. This agent is equivalent to the original self ask with search paper, where a Google search API was provided as the tool.

  1. ReAct document store

This agent uses the ReAct framework to interact with a docstore. Two tools must be provided: a Search tool and a Lookup tool (they must be named exactly as so). The Search tool should search for a document, while the Lookup tool should lookup a term in the most recently found document. This agent is equivalent to the original ReAct paper, specifically the Wikipedia example.

  1. Plan-and-execute agents

通过确定首先做什么然后让 agents 计划和执行完成一个目标任务,再执行子任务。可以参考案例 BabyAGI 和论文 "Plan-and-Solve".

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容