首页 > 其他分享 >大模型agent开发之toolkits使用

大模型agent开发之toolkits使用

时间:2025-01-19 15:10:09浏览次数:1  
标签:prompt toolkits 模型 agent llm memory print self

Toolkits用途

toolkit提供了预定义工具集合,专注于某些特定服务,比如数据库查询、文件处理、Python 代码执行、网络爬虫等任务。这些工具集为 Agent 提供了更高层次的抽象,简化了工具的使用过程。

常见的 Toolkit

SQLDatabaseToolkit:使用场景主要是要通过自然语言对数据库执行查询,可以查询和操作SQL数据库,进而与SQL数据库进行交互。

RequestsToolkit: 主要使用场景是通过Api获取请求,该工具功能可以发送 GET 和 POST 请求,能够处理HTTP任务。

AzureCognitiveServicesToolkit:该工具将 Azure Cognitive Services 提供的 AI 能力融入到 LangChain 框架中,并且非常适合需要多模态处理、语音支持或高级文本分析的场景,为构建智能应用程序提供了更丰富的选择和更高效的集成方式。

Toolkit 的通用使用步骤

1. 初始化工具集:根据任务选择合适的 Toolkit,并初始化。

2. 加载工具到 Agent:将 Toolkit 的工具集成到 Agent 中。

3. 使用 Agent:通过自然语言与 Agent 交互,完成指定任务。

代码示例

from langchain.utilities import SerpAPIWrapper
from langchain.chains import LLMChain
from langchain.agents import initialize_agent, AgentType
import os
from langchain.agents import Tool,load_tools
from langchain.memory import ConversationBufferMemory, ReadOnlySharedMemory
#创建toolkits
from langchain.sql_database import SQLDatabase
from langchain.agents.agent_toolkits import AzureCognitiveServicesToolkit,SQLDatabaseToolkit
from langchain.prompts import PromptTemplate,MessagesPlaceholder
# serppai的token
os.environ["SERPAPI_API_KEY"] = ""
class AgentsTemplate:

    def __init__(self,**kwargs):
        #构建一个搜索工具
        search = SerpAPIWrapper()
        self.prompt = kwargs.get("base_prompt")
        self.llm = kwargs.get("llm")
        llm_math_chain = load_tools(["serpapi", "llm-math"], llm=self.llm)
        # 创建一条链总结对话
        template = """
        The following is a conversation between an AI robot and a human:{chat_history}
        Write a conversation summary based on the input and the conversation record above,input:{input}
        """

        self.memory = ConversationBufferMemory(
            memory_key="chat_history",
            return_messages=True,
        )
        prompt = PromptTemplate(
            input_variable=["input", "chat_history"],
            template=template
        )
        self.shared_memory = ReadOnlySharedMemory(memory=self.memory)
        self.summary_chain = LLMChain(
            llm=self.llm,
            prompt = prompt,
            verbose = True,
            memory = self.shared_memory
        )
        self.tools = [
            Tool(
                name="Search",
                func=search.run,
                description= "useful for when you need to answer questions about current events or the current state of the world"
            ),
            Tool(
                name="Summary",
                func=self.SummaryChainFun,
                description="This tool can be used when you are asked to summarize a conversation. The tool input must be a string. Use it only when necessary"
            )
        ]
        #load_tools(["serpapi", "llm-math"], llm=self.llm)
        # 记忆组件


        self.agentType = [AgentType.ZERO_SHOT_REACT_DESCRIPTION,
                          AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
                          AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
                          AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
                          AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION]
    def SummaryChainFun(self, history):
        print("\n============== Summary Chain Execution ==============")
        print("Input History: ", history)
        return self.summary_chain.run(history)

    def createToolkits(self,toolKey):
        toolkit = None
        if toolKey == "azure":
            toolkit = AzureCognitiveServicesToolkit()
        elif toolKey == "sqlData":
            db = SQLDatabase.from_uri("sqlite:///Chinook.db")
            toolkit = SQLDatabaseToolkit(db = db,llm = self.llm)
        return toolkit

    #零样本增强式生成ZERO_SHOT_REACT_DESCRIPTION,
    #使用chatModel的零样本增强式生成CHAT_ZERO_SHOT_REACT_DESCRIPTION,
    def zero_agent(self,question,agentType):
        if agentType not in self.agentType:
            raise ValueError("无效的 AgentType,请选择有效的类型!")
        prefix = """Have a conversation with a human, answering the following questions as best you can. You have access to the following tools:"""
        suffix = """Begin!"
        {chat_history}
        Question: {input}
        {agent_scratchpad}"""
        #tookits使用
        tookits = self.createToolkits("azure")
        # 动态构建初始化参数
        agent_params = {
            #"tools": self.tools,
            "toolkit": tookits,
            "llm": self.llm,
            "agent": agentType,
            "verbose": True,
            "memory": self.memory,
            "agent_kwargs" : {
                "chat_history": MessagesPlaceholder(variable_name="chat_history"),
                "agent_scratchpad":MessagesPlaceholder(variable_name="agent_scratchpad"),
                "prefix":prefix,
                "sufix":suffix,
                "input":MessagesPlaceholder("input")

            },
            "handle_parsing_errors": True
        }
        #初始化代理
        agent = initialize_agent(**agent_params)
        print("-------------------")
        # 输出提示词模板
        prompt = agent.agent.llm_chain.prompt
        print("Prompt Template:")
        print(prompt)
        # print(agent.agent.prompt.messages)
        # print(agent.agent.prompt.messages[0])
        # print(agent.agent.prompt.messages[1])
        # print(agent.agent.prompt.messages[2])
        try:
            response = agent.run(question)
            print(f"运行的代理类型: {agentType}, 提问内容: {question}")
            print(f"agent回答: {response}")
            #self.memory.save_context(question,response)
        except Exception as e:
            print(f"代理运行时出错: {e}")
    #使用chatModel的零样本增强式生成

 

标签:prompt,toolkits,模型,agent,llm,memory,print,self
From: https://www.cnblogs.com/Ethereal-hzc/p/18666973

相关文章

  • Swift Parameter-free Attention Network模型详解及代码复现
    研究动机在深度学习领域,超分辨率技术的发展面临着模型复杂度与推理速度之间的权衡。传统的基于注意力的超分辨率网络虽然能提高性能,但往往需要较大的感受野和参数化的注意力图,这可能导致推理速度下降。为了解决这一问题,研究人员提出了SwiftParameter-freeAttentionNetwo......
  • 远铂DIY官网系统AI助手新增支持DeepSeek-V3 AI模型接口
            近日,量化巨头幻方量化的子公司深度求索(DeepSeek)发布了全新系列模型DeepSeek-V3,并同步开源。这一事件迅速引爆AI圈,DeepSeek-V3不仅霸榜开源模型,更在性能上与全球顶尖闭源模型GPT-4o和Claude-3.5-Sonnet不相上下。    更令人瞩目的是,该模型的训练成本仅......
  • 【有啥问啥】大模型赋能智能座舱:重塑未来出行体验
    大模型赋能智能座舱:重塑未来出行体验在科技日新月异的今天,人工智能(AI)正以前所未有的速度改变着各行各业,而智能座舱作为现代汽车产业的重要组成部分,也在经历一场由大模型技术引领的重大变革。这些变化不仅赋予了智能座舱更强的学习与推理能力,还为用户带来了前所未有的个性......
  • 算法模型资源占用基础知识
    一、算法模型资源占用情况CPU占用CPU就像是电脑的“大脑”,负责处理各种指令。一些复杂的算法模型,比如深度学习中的卷积神经网络(CNN),在进行大规模数据的特征提取和计算时,会大量占用CPU资源。这是因为这些模型的计算过程涉及到大量的矩阵运算和逻辑判断,都需要CPU......
  • 大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTas
    MapReduce概述MapReduce是Hadoop的核心项目之一,它是一个分布式计算框架,可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是大数据中较为熟知的分布式计算框架。MapReduce作为分布式计算框架,其底层思想采用的是“分而治之”,所谓的“分而治之”就是把一......
  • _EMD-KPCA-LSTM 基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测_ma
    EMD-KPCA-LSTM基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测MATLAB代码(含LSTM、EMD-LSTM、EMD-KPCA-LSTM三个模型的对比)matlab参考文档:基于EMD-PCA-LSTM的光伏功率预测模型研究内容:本案例使用数据集是北半球光伏功率,共四个输入特征(太阳辐射度气温......
  • 5MW风电永磁直驱发电机-1200V直流并网Simulink仿真模型
      ......
  • 2025年值得研究的AI Agent五大框架
    什么是AIAgent?AIAgent的定义多种多样,常见的翻译为“智能体”,但直译为“代理”。随着大语言模型(LLM)的发展,AI的能力已不再局限于简单的任务自动化,而是能够处理复杂且连续的工作流。例如,基于LLM的助手可以自动替用户在电商平台上订购商品并安排配送。这类助手被称为AIAgent......
  • 使用 Python 开发一个 AI Agent 自媒体助手示例
    1.项目背景随着自媒体行业的快速发展,内容创作者需要处理大量重复性任务,例如撰写文章、生成标题、优化关键词、分析数据等。通过开发一个AIAgent自媒体助手,可以帮助创作者高效完成这些任务,节省时间并提升内容质量。本文将展示如何使用Python构建一个简单的AIAgent......
  • 使用Pydantic驾驭大模型
    本文介绍Pydantic库,首先介绍其概念及优势,然后通过基本示例展示如何进行数据验证。后面通过多个示例解释如何在LangChain中通过Pydantic进行数据验证,保证与大模型进行交互过程中数据准确性,并显示清晰的数验证错误信息。Pydantic简介Pydantic是用于数据验证和设置管理......