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 模型去決定接下來(lái)采取什么樣的行動(dòng)。An Action 不僅能夠使用工具,同時(shí)還能夠觀察到工具的輸出熬词。或者向用戶返回辜昵。接下來(lái)展示一些常見(jiàn)的 Agents掉弛。

  1. Zero-shot ReAct

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
)

  1. Structured input ReAct

這里采用 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)

  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,
)

可見(jiàn)前文中關(guān)于 Tools 的案例中的詳細(xì)使用寞钥。


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這樣一個(gè)變量理郑,使得最后prompt會(huì)帶上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

通過(guò)確定首先做什么然后讓 agents 計(jì)劃和執(zhí)行完成一個(gè)目標(biāo)任務(wù),再執(zhí)行子任務(wù)您炉∑饩簦可以參考案例 BabyAGI 和論文 "Plan-and-Solve".

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赚爵,隨后出現(xiàn)的幾起案子棉胀,更是在濱河造成了極大的恐慌,老刑警劉巖囱晴,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膏蚓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡畸写,警方通過(guò)查閱死者的電腦和手機(jī)驮瞧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枯芬,“玉大人论笔,你說(shuō)我怎么就攤上這事∏” “怎么了狂魔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)淫痰。 經(jīng)常有香客問(wèn)我最楷,道長(zhǎng),這世上最難降的妖魔是什么待错? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任籽孙,我火速辦了婚禮,結(jié)果婚禮上火俄,老公的妹妹穿的比我還像新娘犯建。我一直安慰自己,他們只是感情好瓜客,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布适瓦。 她就那樣靜靜地躺著竿开,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玻熙。 梳的紋絲不亂的頭發(fā)上否彩,一...
    開(kāi)封第一講書(shū)人閱讀 52,166評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音揭芍,去河邊找鬼胳搞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛称杨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筷转,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姑原,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了呜舒?” 一聲冷哼從身側(cè)響起锭汛,我...
    開(kāi)封第一講書(shū)人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袭蝗,沒(méi)想到半個(gè)月后唤殴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡到腥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年朵逝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乡范。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡配名,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晋辆,到底是詐尸還是另有隱情渠脉,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布瓶佳,位于F島的核電站芋膘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霸饲。R本人自食惡果不足惜为朋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贴彼。 院中可真熱鬧潜腻,春花似錦、人聲如沸器仗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至威鹿,卻和暖如春剃斧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忽你。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工幼东, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人科雳。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓根蟹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親糟秘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子简逮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容