關(guān)于Langgraph開發(fā)框架工具綁定和工具節(jié)點的說明 原創(chuàng)
“ 如果說大模型是智能體的大腦,那么工具就是大模型的手和腳。”
在Langgraph智能體開發(fā)框架中有幾個核心概念,分別是狀態(tài)圖,節(jié)點和邊;但在此之外還有其它的一些概念如工具,工具在智能體開發(fā)中的重要性就不言而喻了。
雖然這些概念說起來很簡單,但在實際操作過程中卻面臨著各種各樣的問題。
今天我們就主要介紹一下關(guān)于Langgraph中的工具的使用和注意事項。
Langgraph中的工具
工具是智能體開發(fā)過程中的核心,雖然大模型也很重要,但如果沒有好的工具以及工具管理方式;在強大的大模型也是巧婦難為無米之炊,英雄無用武之地。
工具在智能體開發(fā)過程中主要扮演著大模型的手和腳的作用;而在Langgraph中工具是怎么管理的呢?
在前面的文章中介紹過,狀態(tài)圖是Langgraph中數(shù)據(jù)流轉(zhuǎn)的載體,任何節(jié)點的操作結(jié)果都將被保存在狀態(tài)圖中;而邊表示著節(jié)點之間的流轉(zhuǎn)關(guān)系,某個節(jié)點執(zhí)行完成之后就會順著邊流轉(zhuǎn)到下一個節(jié)點或多個節(jié)點中。
如上圖所示,就是一個簡單的Langgraph流程圖,圖中存在start和end兩個必須節(jié)點;以及chatbot機器人節(jié)點和tools工具節(jié)點。
@tool
def human_assistance(query: str) -> str:
"""Request assistance from a human."""
human_response = interrupt({"query": query})
return human_response["data"]
tool = TavilySearch(max_results=2)
tools = [tool, human_assistance]
llm = init_chat_model("anthropic:claude-3-5-sonnet-latest")
# 模型綁定節(jié)點
llm_with_tools = llm.bind_tools(tools)
如官網(wǎng)代碼所示,聲明了兩個工具h(yuǎn)uman_assistance和TavilySearch;在最后一行代碼中,需要使用bind_tools對工具列表進行綁定;這個綁定的作用是什么?
剛開始看到這段代碼以為其就類似于智能體開發(fā)過程中,工具函數(shù)的聲明和實現(xiàn),然后大模型就可以根據(jù)這些工具進行功能調(diào)用。
但在后面的代碼中又出現(xiàn)了一個工具節(jié)點ToolNode,看到這里就覺得有點奇怪了,明明前面已經(jīng)把工具綁定到了大模型上,為什么現(xiàn)在在這里還需要一個工具節(jié)點;那么它的作用是什么?
tool_node = ToolNode(tools=tools)
graph_builder.add_node("tools", tool_node)
事實上,在上面bind_tools的方法中,其作用類似于傳統(tǒng)fc開發(fā)中的函數(shù)聲明,即告訴大模型有哪些函數(shù)可以使用;但具體的調(diào)用工具并不是由大模型實現(xiàn)。
這里也是如此,在bind_tools綁定工具列表之后,在ToolNode節(jié)點負(fù)責(zé)工具的調(diào)用。
大模型會根據(jù)綁定的工具列表,然后根據(jù)自己的理解和判斷去選擇合適的工具函數(shù)。
工具的聲明
在Langgraph中,工具函數(shù)聲明使用@tool注解實現(xiàn),其會根據(jù)函數(shù)名稱和參數(shù)自動判斷工具的作用并生成調(diào)用參數(shù);如下代碼所示:
而在函數(shù)的第一行有一個三引號注釋符,其作用就類似于fc中的desc,用來描述函數(shù)的功能。通過這種方式就可以聲明一個工具類。
@tool
def get_weather(location: str):
"""Call to get the current weather."""
if location.lower() in ["sf", "san francisco"]:
return "It's 60 degrees and foggy."
else:
return "It's 90 degrees and sunny."
當(dāng)然,這只是簡單的工具函數(shù)的使用;如果在Langgraph中的節(jié)點中需要實現(xiàn)多個智能體應(yīng)該怎么辦?其工具應(yīng)該怎么管理,是分開管理還是集中管理?
比如說有的智能體節(jié)點需要調(diào)用地圖和天氣工具用來確定旅行計劃和路線;而有的智能體需要訂票訂酒店,這樣需要多個工具進行協(xié)作的情況下,應(yīng)該怎么處理。
本文轉(zhuǎn)載自??AI探索時代?? 作者:DFires
