上源碼尺锚,位于 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 模型去決定接下來(lái)采取什么樣的行動(dòng)。An Action 不僅能夠使用工具,同時(shí)還能夠觀察到工具的輸出熬词。或者向用戶返回辜昵。接下來(lái)展示一些常見(jiàn)的 Agents掉弛。
This agent uses the ReAct framework to determine which tool to use based solely on the tool's description. 任何一個(gè)工具都可以∪燃啵可參考上一篇文檔如何使用 Tool捺弦。
Note: 這是最通用的 Agent action.
agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=False
)
這里采用 multi-input tools 多個(gè)輸入工具。原先的 agents 能夠被配置為指定的 Action input 作為單獨(dú)的字符串。但此代理可以使用工具的參數(shù)架構(gòu)來(lái)創(chuàng)建結(jié)構(gòu)化的操作輸入列吼。這對(duì)于更復(fù)雜的工具使用非常有用幽崩,比如在瀏覽器中精確導(dǎo)航。
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,
)
可見(jiàn)前文中關(guān)于 Tools 的案例中的詳細(xì)使用寞钥。
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這樣一個(gè)變量理郑,使得最后prompt會(huì)帶上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.
通過(guò)確定首先做什么然后讓 agents 計(jì)劃和執(zhí)行完成一個(gè)目標(biāo)任務(wù),再執(zhí)行子任務(wù)您炉∑饩簦可以參考案例 BabyAGI 和論文 "Plan-and-Solve".