AI智能体Agent的核心架构:记忆、工具与行动
智能体AI 智能体AI

近年来,人工智能技术不断发展,智能体Agent在各种应用场景中发挥着越来越重要的作用。这篇文章将详细解析智能体Agent的记忆与决策框架,探讨其多模态感知、记忆、规划决策等各个环节的实现与应用。智能体Agent是人工智能领域的重要研究方向,广泛应用于自动驾驶、智能家居、金融分析等多个领域。本文将以一幅示意图为基础,详细解析智能体Agent在记忆与决策过程中各个模块的功能及其相互关系。并通过实际代码案例进行讲解。

image.png

一、多模态感知


多模态感知是智能体Agent理解世界的基础,它包括对文字、图像、声音等多种信息的感知与处理。在本框架中,多模态感知模块接收外界的提示词和图像信息,为智能体Agent提供原始数据输入。

  • 多模态感知的定义 多模态感知指的是系统能够同时处理来自不同感官的信息,如视觉、听觉和语言输入。这使得智能体Agent能够更全面地理解复杂的环境和任务需求。

  • 多模态感知的实现 多模态感知需要使用多种传感器和处理器。例如,摄像头、麦克风和文本输入设备。通过深度学习算法,智能体Agent能够将这些感知数据转换为有用的信息。

二、记忆模块


记忆模块是智能体Agent的大脑,它负责存储和管理短期和长期记忆。在本框架中,记忆模块分为短期记忆和长短期记忆两个部分。

  • 短期记忆 短期记忆类似于人类的大脑在处理当前任务时的临时记忆,用于快速响应和处理即时信息。

  • 长短期记忆 长短期记忆结合了短期记忆和长期记忆的优势,用于在完成任务过程中保持和利用重要信息。

三、规划与决策

image.png










智能体Agent的规划与决策模块是其核心功能之一。它根据记忆模块中的信息,制定合理的行动计划,并进行思维链、反思和自我批评等过程。

  • 思维链 思维链是智能体Agent在决策过程中,逐步推理和演绎的过程。通过不断地思考和分析,Agent能够得出最优的解决方案。

  • 反思与自我批评 反思与自我批评是智能体Agent在任务完成后,回顾和评估自身表现的过程。这一过程能够帮助Agent不断改进和优化自身算法和策略。

  • 子目标分解 在复杂任务中,智能体Agent需要将整体目标分解为若干子目标,并逐一实现。这一过程需要Agent具备良好的规划和协调能力。

四、工具模块


工具模块是智能体Agent执行任务时所依赖的外部资源。在本框架中,工具模块包括搜索引擎、计算器、代码解释器和日历等。

  • 搜索引擎 搜索引擎为智能Agent提供了强大的信息检索能力,能够快速查找和获取所需的信息。

  • 计算器 计算器为智能体Agent提供了复杂计算能力,能够进行各种数学运算和数据处理。

  • 代码解释器 代码解释器帮助智能体Agent理解和执行代码,实现自动化任务和编程操作。

  • 日历 日历工具帮助智能体Agent管理时间和任务,提高工作效率。

五、行动模块


行动模块是智能体Agent执行具体任务和操作的最终环节。在本框架中,行动模块通过调用工具模块中的资源,完成预定的任务和目标。

六、ReAct 核心思想是:推理+操作


接下来以Google Search 和 LLM Math等作为可选操作集合(toolkits),实现 ReAct 功能


1、实现 ReAct 算法的测试函数:使用 LangChain 库和 OpenAI API 来执行推理和操作。

# 以下`SERPAPI_API_KEY`仅为示例,请访问 https://serpapi.com 注册账号并替换为自己的 `API_KEY`(每月100次免费调用)

def react_test():

    """

    实现 ReAct 算法的测试函数。

    使用 LangChain 库和 OpenAI API 来执行推理和操作。

    """

    os.environ["SERPAPI_API_KEY"] = os.getenv('SERPAPI_API_KEY')

    # 加载 LangChain 内置的 Tools

    tools = load_tools(["serpapi", "llm-math"], llm=llm)

    # 实例化 ZERO_SHOT_REACT Agent

    agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

    print(agent.run("谁是莱昂纳多·迪卡普里奥的女朋友?她现在年龄的0.43次方是多少"))


2、测试自我提问与搜索功能的函数:使用 SerpAPI 来执行搜索操作,并结合 LangChain 的工具和LLM进行问答。

def self_ask_with_search_test():

    """

    测试自我提问与搜索功能的函数。

    使用 SerpAPI 来执行搜索操作,并结合 LangChain 的工具和LLM进行问答。

    """

    os.environ["SERPAPI_API_KEY"] = os.getenv('SERPAPI_API_KEY')

    # 实例化查询工具

    search = SerpAPIWrapper()

    tools = [

        Tool(

            name="Intermediate Answer",

            func=search.run,

            description="useful for when you need to ask with search",

        )

    ]

    # 实例化 SELF_ASK_WITH_SEARCH Agent

    self_ask_with_search = initialize_agent(

        tools, llm, agent=AgentType.SELF_ASK_WITH_SEARCH, verbose=True,handle_parsing_errors=True

    )

    # 实际运行 Agent,查询问题(正确)

    self_ask_with_search.run(

        "成都举办的大运会是第几届大运会?"

    )

3、测试函数工具的函数:使用 LangChain 和 OpenAI 来执行特定的函数操作。

@tool

def get_word_length(word: str) -> int:

    """

    计算单词长度的工具函数。

    参数:

    word: 要计算长度的单词。

    返回:

    单词的长度。

    """

    """Returns the length of a word."""

    return len(word)

tools = [get_word_length]

def function_test():

    """

    测试函数工具的函数。

    使用 LangChain 和 OpenAI 来执行特定的函数操作。

    """

    system_message = SystemMessage(content="你是非常强大的AI助手,但在计算单词长度方面不擅长。")

    prompt = OpenAIFunctionsAgent.create_prompt(system_message=system_message)

    agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)

    # 实例化 OpenAIFunctionsAgent

    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    agent_executor.run("单词“educa”中有多少个字母?")

4、测试函数记忆功能的函数:使用 LangChain 的记忆机制来保持对话上下文。

def function_memory_test():

    """

    测试函数记忆功能的函数。

    使用 LangChain 的记忆机制来保持对话上下文。

    """

    system_message = SystemMessage(content="你是非常强大的AI助手,但在计算单词长度方面不擅长。")

    MEMORY_KEY = "chat_history"

    prompt = OpenAIFunctionsAgent.create_prompt(

        system_message=system_message,

        extra_prompt_messages=[MessagesPlaceholder(variable_name=MEMORY_KEY)]

    )

    memory = ConversationBufferMemory(memory_key=MEMORY_KEY, return_messages=True)

    agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)

    # 实例化 OpenAIFunctionsAgent

    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    agent_executor.run("单词“educa”中有多少个字母?")

    #agent_executor.run("那是一个真实的单词吗?")

5、完整代码

# 加载环境变量

import openai

import os

import tiktoken

# 加载 .env 文件

from dotenv import load_dotenv, find_dotenv

from langchain.prompts import PromptTemplate

from langchain.llms import OpenAI

from langchain.chains import LLMChain

#from langchain.chat_models import AzureChatOpenAI

from langchain.chat_models import ChatOpenAI #直接访问OpenAI的GPT服务

from langchain.agents import load_tools

from langchain.agents import initialize_agent

from langchain.agents import AgentType,Tool

from langchain.utilities import SerpAPIWrapper

from langchain.schema import SystemMessage

from langchain.agents import OpenAIFunctionsAgent

from langchain.agents import AgentExecutor

from langchain.agents import tool

from langchain.prompts import MessagesPlaceholder

from langchain.memory import ConversationBufferMemory

# 加载环境变量

_ = load_dotenv(find_dotenv())

# 从环境变量中获得你的 OpenAI Key和配置URL

openai.api_key = os.getenv('OPENAI_API_KEY')

openai.api_base = os.getenv('OPENAI_API_URL')

model = os.getenv('OPENAI_API_MODEL')

# 初始化LLM链

llm = ChatOpenAI(model_name=model, temperature=0) #直接访问OpenAI的GPT服务

# ReAct 核心思想是 推理+操作,本示例以` Google Search` 和 `LLM Math` 作为可选操作集合(toolkits),实现 ReAct 功能。

# 以下`SERPAPI_API_KEY`仅为示例,请访问 https://serpapi.com 注册账号并替换为自己的 `API_KEY`(每月100次免费调用)

def react_test():

    """

    实现 ReAct 算法的测试函数。

    使用 LangChain 库和 OpenAI API 来执行推理和操作。

    """

    os.environ["SERPAPI_API_KEY"] = os.getenv('SERPAPI_API_KEY')

    # 加载 LangChain 内置的 Tools

    tools = load_tools(["serpapi", "llm-math"], llm=llm)

    # 实例化 ZERO_SHOT_REACT Agent

    agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

    print(agent.run("谁是莱昂纳多·迪卡普里奥的女朋友?她现在年龄的0.43次方是多少"))

def self_ask_with_search_test():

    """

    测试自我提问与搜索功能的函数。

    使用 SerpAPI 来执行搜索操作,并结合 LangChain 的工具和LLM进行问答。

    """

    os.environ["SERPAPI_API_KEY"] = os.getenv('SERPAPI_API_KEY')

    # 实例化查询工具

    search = SerpAPIWrapper()

    tools = [

        Tool(

            name="Intermediate Answer",

            func=search.run,

            description="useful for when you need to ask with search",

        )

    ]

    # 实例化 SELF_ASK_WITH_SEARCH Agent

    self_ask_with_search = initialize_agent(

        tools, llm, agent=AgentType.SELF_ASK_WITH_SEARCH, verbose=True,handle_parsing_errors=True

    )

    # 实际运行 Agent,查询问题(正确)

    self_ask_with_search.run(

        "成都举办的大运会是第几届大运会?"

    )

@tool

def get_word_length(word: str) -> int:

    """

    计算单词长度的工具函数。

    参数:

    word: 要计算长度的单词。

    返回:

    单词的长度。

    """

    """Returns the length of a word."""

    return len(word)

tools = [get_word_length]

def function_test():

    """

    测试函数工具的函数。

    使用 LangChain 和 OpenAI 来执行特定的函数操作。

    """

    system_message = SystemMessage(content="你是非常强大的AI助手,但在计算单词长度方面不擅长。")

    prompt = OpenAIFunctionsAgent.create_prompt(system_message=system_message)

    agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)

    # 实例化 OpenAIFunctionsAgent

    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    agent_executor.run("单词“educa”中有多少个字母?")

def function_memory_test():

    """

    测试函数记忆功能的函数。

    使用 LangChain 的记忆机制来保持对话上下文。

    """

    system_message = SystemMessage(content="你是非常强大的AI助手,但在计算单词长度方面不擅长。")

    MEMORY_KEY = "chat_history"

    prompt = OpenAIFunctionsAgent.create_prompt(

        system_message=system_message,

        extra_prompt_messages=[MessagesPlaceholder(variable_name=MEMORY_KEY)]

    )

    memory = ConversationBufferMemory(memory_key=MEMORY_KEY, return_messages=True)

    agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)

    # 实例化 OpenAIFunctionsAgent

    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    agent_executor.run("单词“educa”中有多少个字母?")

    #agent_executor.run("那是一个真实的单词吗?")

# python 入口函数

if __name__ == '__main__':

    #react_test()

    #self_ask_with_search_test()

    #function_test()

    function_memory_test()

七、总结

通过以上分析和案例,我们可以看出智能Agent在记忆与决策过程中,各个模块之间紧密配合,相互支持,形成了一个完整的智能系统。多模态感知为Agent提供了丰富的输入信息,记忆模块存储和管理这些信息,规划与决策模块制定合理的行动计划,工具模块提供必要的资源支持,最终通过行动模块完成任务。这一框架不仅为我们理解智能Agent的工作原理提供了有力支持,也为实际应用中的智能系统设计和开发提供了宝贵的参考。未来,随着技术的不断进步,智能Agent必将在更多领域中发挥重要作用,为我们的生活和工作带来更多便利和创新。


CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢