基于Langchain框架的Agent智能體實現(xiàn)之工具集成 原創(chuàng)
“ 工具調(diào)用是大模型智能體的核心理念,沒有工具就沒有智能體的存在。”
智能體開發(fā)是大模型應(yīng)用中一個重要的概念,也是大模型應(yīng)用的未來;而關(guān)于智能體的開發(fā)有各種各樣的概念,但核心無非有兩個一個是函數(shù)調(diào)用,另一個就是工具的實現(xiàn)。
關(guān)于函數(shù)調(diào)用有兩種方式,其一是之前的function call,其二是現(xiàn)在比較火的MCP協(xié)議;不管是fc還是MCP目的都是讓大模型能夠調(diào)用外部的工具來實現(xiàn)具體的功能。而今天我們主要介紹的就是基于Langchain框架來實現(xiàn)各種工具。
基于Langchain的工具開發(fā)
在智能體開發(fā)中,工具是一個很重要的概念,操作數(shù)據(jù)庫需要數(shù)據(jù)庫工具,訪問搜索引擎需要搜索工具等等;可以說在智能體中所有的外部調(diào)用都是以工具的形式來體現(xiàn)的。
而在實際的開發(fā)過程中,工具主要是以函數(shù)和服務(wù)的形式出現(xiàn);比如說定義一個訪問搜索引擎的工具,只需要封裝一個函數(shù);讓大模型自己去生成函數(shù)需要的參數(shù),最后再交給python引擎執(zhí)行,然后獲取結(jié)果。
而在Langchain中提供了大量的封裝好的工具給我們使用,如下圖所示:
Langchain中集成和封裝了大量的工具供大家使用,可以滿足不同的業(yè)務(wù)場景,比如說有搜索,代碼解釋器,數(shù)據(jù)庫訪問等多種類型。
下面以基于pandas的智能數(shù)據(jù)分析為例,演示怎么實現(xiàn)一個簡單的excel數(shù)據(jù)分析。
首先需要安裝langchain相關(guān)的包
# 安裝包
pip install --upgrade langchain_openai pip install --upgrade langchain
langchain提供的操作pandas的函數(shù)主要是
create_pandas_dataframe_agent實例化pandas Agent
agent = create_pandas_dataframe_agent(self.llm, df_list, allow_dangerous_code=True, verbose=True)
完整代碼如下,當(dāng)然用戶也可以直接查看官方文檔自己手動實現(xiàn)
文檔地址如下:
??https://python.langchain.ac.cn/docs/integrations/tools/pandas/??
import os
import logging
import pandas as pd
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
from langchain_openai import ChatOpenAI,OpenAI
# 需要換成你自己的參數(shù)
openai_api_key = "api_key"
openai_api_base = "openai_url"
model = "model"
# Adjust logging levels for specific libraries to reduce noise
logging.getLogger("openai").setLevel(logging.DEBUG)
logging.getLogger("langchain").setLevel(logging.DEBUG)
logging.getLogger("httpx").setLevel(logging.DEBUG)
logging.getLogger("httpcore").setLevel(logging.DEBUG)
logger = logging.getLogger(__name__)
logging.basicConfig(
level=logging.INFO, # 設(shè)置日志級別為DEBUG
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 定義日志格式
datefmt='%Y-%m-%d %H:%M:%S' # 定義時間格式
)
class LangChainPandas:
def __init__(self, model, temperature=0.8):
os.environ['OPENAI_API_KEY'] = openai_api_key
os.environ['OPENAI_API_BASE'] = openai_api_base
# self.llm = ChatOpenAI(model_name=model, verbose=True, temperature=temperature)
self.llm = OpenAI(model_name=model, openai_api_base=openai_api_base, openai_api_key=openai_api_key, temperature=temperature)
def create_agent(self, path_list):
df_list = [pd.read_excel(path) for path in path_list]
agent = create_pandas_dataframe_agent(self.llm, df_list, allow_dangerous_code=True, verbose=True)
# agent = create_pandas_dataframe_agent(
# self.llm,
# df,
# verbose=True,
# allow_dangerous_code=True,
# agent_type=AgentType.OPENAI_FUNCTIONS,
# )
return agent
def chat(self, query, path_list):
agent = self.create_agent(path_list)
result = agent.invoke(query)
return result.get('output', "")
if __name__ == "__main__":
agent = LangChainPandas(model)
# excel文件路徑
path_list = ["path1", "path2"]
while True:
query = input("請輸入您的問題: ")
result = agent.chat(query, path_list)
print(f"result: {result}")
?
本文轉(zhuǎn)載自??AI探索時代??? 作者:DFires
