23、各类智能代理的介绍与实践

各类智能代理的介绍与实践

在人工智能和自然语言处理领域,智能代理是一种强大的工具,能够根据用户的输入调用合适的工具来生成响应。本文将介绍几种不同类型的智能代理,包括它们的特点、优势、劣势以及具体的使用方法,并提供相应的代码示例。

1. 结构化工具代理(Structured Tool Agent)

有时候,你希望代理以一种结构化的方式使用特定的工具或执行特定的动作。在这种情况下,可以使用结构化工具代理来定义预定的动作和工具序列,以此引导代理的行为。

2. MRKL 代理(MRKL Agent)

MRKL(Mean Reciprocal Rank with Logistic Regression)代理是 LangChain 家族中强大的一员。它结合了搜索算法和逻辑回归,为给定的查询对工具进行排序并选择最相关的工具。你可以使用它来确定优先级并选择最佳的行动方案。

3. 零样本反应代理(Zero - Shot - React Agent)

零样本反应代理是一种灵活且适应性强的代理,它使用大语言模型(LLM)根据工具的描述和用户的输入,从可用的工具集中确定要使用的工具。
- 零样本(Zero - Shot) :代理没有针对每个工具的使用进行过预先训练,而是在需要时自行确定如何使用这些工具。
- 反应(ReAct) :这是指导代理决策的底层框架,是一个推理和行动的循环,允许代理动态地选择最适合任务的工具。

优势 :不需要为每个工具创建复杂的规则或链,也不需要预先训练。
劣势
- 性能严重依赖于工具的描述以及大语言模型理解描述的能力,因此建议使用推理能力强的大语言模型,如 gpt - 4 或 gpt - 3.5 - turbo。
- 没有记忆能力。可以在初始化代理时传递 ConversationBufferMemory 对象来解决这个问题,也可以使用具有记忆功能的 conversational - react - description 代理类型。

代码示例

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI

# 加载必要的工具
tools = load_tools(["serpapi", "llm - math"], llm=OpenAI(temperature=0))

# 初始化零样本反应代理
agent = initialize_agent(tools, OpenAI(temperature=0), agent="zero - shot - react - description", verbose=True)

# 用查询运行代理
query = "What is the capital of France? What is the population of that city?"
response = agent.run(query)
print(response)
4. 工具调用代理(Tool Calling Agent)

工具调用是一个强大的概念,它帮助代理检测何时应该调用一个或多个工具,并为这些工具提供合适的输入。通过工具调用,代理可以智能地选择正确的工具,并确切知道每个工具需要使用的参数。在 API 环境中,可以向代理描述这些工具,代理将输出一个包含调用工具所需参数的结构化对象(如 JSON)。

目标 :确保代理可靠地返回有效且有用的工具调用,超越普通文本完成或聊天 API 的功能。通过利用这种结构化输出并允许代理从多个工具中进行选择,可以创建一个反复调用工具并接收结果,直到解决查询的代理。

设置步骤
1. 选择支持工具调用的模型 :LangChain 提供了多种选择,包括 Anthropic、Google Gemini、Mistral 和 OpenAI 等。可以在 LangChain 文档中查看支持的模型。
2. 安装必要的依赖项

pip install -qU langchain - openai langchain tavily - python
  1. 设置 API 密钥
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
os.environ["TAVILY_API_KEY"] = getpass.getpass("Enter your Tavily API key: ")
  1. 导入并创建语言模型实例
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt - 4")
  1. 初始化工具
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate
tools = [TavilySearchResults(max_results=1)]
  1. 创建代理
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are a helpful assistant. Make sure to use the tavily_search_results_json tool for information."
        ),
        ("placeholder", "{chat_history}"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}")
    ]
)
agent = create_tool_calling_agent(llm, tools, prompt)
  1. 运行代理
# 创建代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)

# 用业务相关问题调用代理执行器
response = agent_executor.invoke({"input": "How can our company reduce operational costs by leveraging AI technologies?"})

# 打印响应
print(response)

使用聊天历史
工具调用代理的一个很酷的特性是能够使用聊天历史,以提供更具上下文和自然的对话体验。通过传递先前的对话回合,代理可以相应地做出响应。

from langchain_core.messages import AIMessage, HumanMessage
agent_executor.invoke(
    {
        "input": "what's my name? Don't use tools to look this up unless you NEED to",
        "chat_history": [
            HumanMessage(content="hi! my name is Rabi Jay"),
            AIMessage(content="Hello Rabi Jay! How can I assist you today?")
        ]
    }
)
5. OpenAI 工具代理(OpenAI Tools Agent)

OpenAI 的“工具”功能是一个令人兴奋的特性,它帮助代理检测何时应该调用一个或多个函数,并提供合适的输入。较新的 OpenAI 模型针对此功能进行了微调,使代理更加智能和高效。

在 API 调用中,可以向代理描述函数,代理将智能地输出一个包含调用这些函数所需参数的 JSON 对象。

OpenAI 有两个相关的概念:“函数”和“工具”。函数允许代理调用单个函数,而工具允许代理在适当的时候调用一个或多个函数。在 OpenAI 聊天 API 中,函数现在被视为旧选项,已被工具所取代。

优势 :使用工具的显著优势在于,模型可以在适当的时候请求调用多个函数,这有助于减少代理实现目标所需的时间,使其更加高效。

使用步骤
1. 安装必要的库

%pip install --upgrade --quiet langchain - openai tavily - python langchainhub
  1. 导入所需的模块
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI
  1. 初始化工具
tools = [TavilySearchResults(max_results=1)]
  1. 创建代理
prompt = hub.pull("hwchase17/openai - tools - agent")
llm = ChatOpenAI(model="gpt - 3.5 - turbo - 1106", temperature=0)
agent = create_openai_tools_agent(llm, tools, prompt)
  1. 运行代理
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke({"input": "what is LangChain?"})

使用聊天历史

from langchain_core.messages import AIMessage, HumanMessage
agent_executor.invoke(
    {
        "input": "what's my name? Don't use tools to look this up unless you NEED to",
        "chat_history": [
            HumanMessage(content="hi! my name is Rabi Jay"),
            AIMessage(content="Hello Rabi Jay! How can I assist you today?")
        ]
    }
)
6. 结构化聊天代理(Structured Chat Agent)

结构化聊天代理是一种强大的工具,可用于使用多输入工具。

使用步骤
1. 安装必要的库 :需要安装 LangChain、Tavily Search 和 OpenAI 的 ChatGPT 相关库。
2. 导入所需的模块

from langchain import hub
from langchain.agents import AgentExecutor, create_structured_chat_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI
  1. 初始化工具
tools = [TavilySearchResults(max_results=1)]
  1. 创建代理
prompt = hub.pull("hwchase17/structured - chat - agent")
prompt.messages[0].prompt.template = """
You are a business analyst assistant tasked with helping entrepreneurs and business owners make informed decisions.
Use the provided search tool to find relevant information and answer the user's questions as best as you can.
If the question cannot be answered using the search results, provide guidance on where the user can find more information.
Please provide your response in a clear, concise, and well - structured format.
Here are some examples of the types of business - related questions you may be asked:
- What are some effective marketing strategies for a small business?
- How can I improve my company's cash flow?
- What are the key steps in creating a business plan?
- How do I conduct market research for a new product idea?
- What are some common challenges faced by startups, and how can they be overcome?
Remember to provide actionable advice tailored to the user's specific needs and situation.
Let's work together to help businesses thrive!
"""
llm = ChatOpenAI(temperature=0, model="gpt - 3.5 - turbo - 1106")
agent = create_structured_chat_agent(llm, tools, prompt)
  1. 定义辅助函数
def process_llm_output(output):
    if "Invalid or incomplete response" in output:
        raise ValueError("The language model generated an invalid or incomplete response.")
    return output
  1. 运行代理
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,
    handle_parsing_errors=True,
    max_iterations=3,
    early_stopping_method="force"
)
question = "What are some effective ways to reduce operational costs in a manufacturing business?"
try:
    response = agent_executor.invoke({"input": question})
    processed_response = process_llm_output(response)
    print(processed_response)
except ValueError as e:
    print(e)
总结

不同类型的智能代理适用于不同的场景。零样本反应代理适合在没有预先训练和复杂规则的情况下使用;工具调用代理和 OpenAI 工具代理能够智能地选择和使用工具,提供结构化输出;结构化聊天代理则适用于处理多输入工具和业务相关问题。通过合理选择和使用这些代理,可以提高自然语言处理任务的效率和准确性。

以下是几种代理的对比表格:
| 代理类型 | 特点 | 优势 | 劣势 |
| ---- | ---- | ---- | ---- |
| 零样本反应代理 | 零样本、ReAct 框架 | 无需预先训练和复杂规则 | 依赖工具描述和 LLM 能力,无记忆 |
| 工具调用代理 | 智能选择工具,结构化输出 | 可靠返回有效工具调用 | 需支持模型和 API 密钥 |
| OpenAI 工具代理 | 调用多个函数,高效智能 | 可调用多函数,提高效率 | 依赖 OpenAI 模型 |
| 结构化聊天代理 | 处理多输入工具,业务导向 | 提供业务建议,格式清晰 | 需定制提示和配置 |

下面是零样本反应代理的工作流程 mermaid 流程图:

graph TD;
    A[用户输入查询] --> B[代理根据工具描述和输入选择工具];
    B --> C[调用所选工具];
    C --> D[工具返回结果];
    D --> E[代理生成响应];
    E --> F[输出响应给用户];

各类智能代理的介绍与实践(续)

深入理解智能代理的应用场景

智能代理在不同领域有着广泛的应用,下面我们详细探讨各类代理在实际场景中的应用。

零样本反应代理的应用

零样本反应代理的灵活性使其在需要快速响应且没有预先训练的场景中表现出色。例如,在客户服务领域,当面对各种不同类型的客户问题时,零样本反应代理可以根据工具的描述和客户的输入,动态地选择合适的工具来回答问题。以下是一个简单的应用流程:
1. 客户提出问题 :客户向客服系统提出关于产品功能、使用方法等方面的问题。
2. 代理选择工具 :零样本反应代理根据问题和工具描述,从可用工具集中选择合适的工具,如产品知识库查询工具、常见问题解答工具等。
3. 调用工具获取结果 :代理调用所选工具,获取相关信息。
4. 生成响应 :代理根据工具返回的结果,生成清晰、准确的响应并反馈给客户。

工具调用代理和 OpenAI 工具代理的应用

这两类代理在需要精确调用工具和处理复杂任务的场景中非常有用。比如在数据分析和研究领域,当需要从多个数据源获取信息并进行综合分析时,它们可以智能地选择合适的工具进行数据查询、处理和分析。具体应用步骤如下:
1. 明确研究问题 :用户提出关于市场趋势、行业数据等方面的研究问题。
2. 代理选择工具 :根据问题的需求,工具调用代理或 OpenAI 工具代理从可用工具集中选择合适的数据源查询工具、数据分析工具等。
3. 调用工具获取数据 :代理依次调用所选工具,获取相关数据。
4. 数据处理和分析 :代理对获取的数据进行处理和分析,生成有价值的报告或结论。
5. 输出结果 :代理将分析结果以清晰、易懂的方式呈现给用户。

结构化聊天代理的应用

结构化聊天代理在商业决策和咨询领域有着重要的应用。例如,为企业提供战略规划、成本控制等方面的建议。以下是其应用流程:
1. 企业提出问题 :企业向代理提出关于业务发展、成本优化等方面的问题。
2. 代理获取信息 :结构化聊天代理使用搜索工具查找相关信息。
3. 生成建议 :根据搜索结果,代理结合业务知识和经验,为企业提供具体的、可操作的建议。
4. 输出建议 :代理将建议以清晰、结构化的方式呈现给企业决策者。

智能代理的性能优化

为了提高智能代理的性能和效率,我们可以采取以下几种优化策略。

选择合适的大语言模型

不同的大语言模型在处理不同类型的任务时表现不同。例如,gpt - 4 在推理和理解复杂问题方面表现出色,而 gpt - 3.5 - turbo 则在速度和成本方面具有优势。因此,根据具体的应用场景选择合适的大语言模型非常重要。

优化工具描述

工具描述的准确性和完整性直接影响代理选择工具的能力。因此,在定义工具时,应该详细、清晰地描述工具的功能、输入和输出,以便代理能够更好地理解和使用工具。

利用记忆功能

对于需要上下文信息的任务,如对话式交互,使用具有记忆功能的代理或传递聊天历史可以提高代理的响应质量。例如,在使用零样本反应代理时,可以通过传递 ConversationBufferMemory 对象来解决其无记忆的问题。

限制迭代次数和设置早期停止方法

在运行代理时,设置合理的最大迭代次数和早期停止方法可以避免代理陷入无限循环或长时间运行,提高效率。例如,在使用结构化聊天代理时,可以设置 max_iterations = 3 early_stopping_method = "force"

智能代理的未来发展趋势

随着人工智能技术的不断发展,智能代理也将迎来更多的创新和应用。以下是一些可能的发展趋势:

多模态能力

未来的智能代理将不仅能够处理文本信息,还能处理图像、音频、视频等多种模态的信息。例如,在客户服务中,代理可以通过分析客户上传的图片或视频,更准确地理解客户的问题并提供解决方案。

自主学习和进化

智能代理将具备更强的自主学习能力,能够在与用户的交互过程中不断学习和进化,提高自身的性能和智能水平。

与物联网的融合

智能代理将与物联网设备深度融合,实现对物理世界的实时感知和控制。例如,在智能家居领域,代理可以根据用户的需求和环境条件,自动控制家电设备的运行。

总结

智能代理作为人工智能领域的重要工具,在不同场景中发挥着重要作用。通过了解各类智能代理的特点、优势、劣势和应用场景,我们可以根据具体需求选择合适的代理,并通过优化策略提高其性能。未来,智能代理将朝着多模态、自主学习和与物联网融合等方向发展,为我们的生活和工作带来更多的便利和创新。

以下是智能代理性能优化策略的总结表格:
| 优化策略 | 具体方法 | 作用 |
| ---- | ---- | ---- |
| 选择合适的大语言模型 | 根据任务需求选择 gpt - 4 或 gpt - 3.5 - turbo 等 | 提高处理复杂问题的能力或降低成本 |
| 优化工具描述 | 详细、清晰地描述工具的功能、输入和输出 | 帮助代理更好地选择工具 |
| 利用记忆功能 | 传递 ConversationBufferMemory 对象或使用具有记忆功能的代理 | 提高对话式交互的响应质量 |
| 限制迭代次数和设置早期停止方法 | 设置 max_iterations early_stopping_method | 避免代理陷入无限循环,提高效率 |

下面是工具调用代理的工作流程 mermaid 流程图:

graph TD;
    A[用户输入查询] --> B[代理检测是否需要调用工具];
    B -- 需要 --> C[代理选择合适的工具];
    C --> D[代理输出包含工具参数的结构化对象];
    D --> E[调用工具获取结果];
    E --> F[代理根据结果生成响应];
    F --> G[输出响应给用户];
    B -- 不需要 --> F;
【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器的建模仿真展开,重点介绍了基于Matlab的飞行器动力学模型构建控制系统设计方法。通过对四轴飞行器非线性运动方程的推导,建立其在三维空间中的姿态位置动态模型,并采用数值仿真手段实现飞行器在复杂环境下的行为模拟。文中详细阐述了系统状态方程的构建、控制输入设计以及仿真参数设置,并结合具体代码实现展示了如何对飞行器进行稳定控制轨迹跟踪。此外,文章还提到了多种优化控制策略的应用背景,如模型预测控制、PID控制等,突出了Matlab工具在无人机系统仿真中的强大功能。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程师;尤其适合从事飞行器建模、控制算法研究及相关领域研究的专业人士。; 使用场景及目标:①用于四轴飞行器非线性动力学建模的教学科研实践;②为无人机控制系统设计(如姿态控制、轨迹跟踪)提供仿真验证平台;③支持高级控制算法(如MPC、LQR、PID)的研究对比分析; 阅读建议:建议读者结合文中提到的Matlab代码仿真模型,动手实践飞行器建模控制流程,重点关注动力学方程的实现控制器参数调优,同时可拓展至多自由度或复杂环境下的飞行仿真研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值