上源码,位于 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。
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
)
这里采用 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)
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,
)
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的历史记录。
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.
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.
通过确定首先做什么然后让 agents 计划和执行完成一个目标任务,再执行子任务。可以参考案例 BabyAGI 和论文 "Plan-and-Solve".