LangChain:Agent & Tools 实战案例

在LangChain中,“Agent”是一个与各种“Tool”交互以执行任务或回答查询的AI实体。工具本质上是通过允许代理执行特定操作(如检索当前时间或访问外部数据库)来扩展代理功能。在LangChain中创建代理的基本代码包括定义工具、加载提示模板和初始化语言模型。然后使用AgentExecutor执行代理,该代理管理代理与工具之间的交互。这种设置允许动态和上下文感知响应,使AI能够以结构化的方式进行推理和采取行动。本文带你一步一步实践,让你快速理解Agent,并能进行实践满足你的需求。

概述

在 LangChain 中,代理(Agents)和工具(Tools)是两个重要的概念,它们相互配合,使得语言模型能够更灵活、更强大地处理各种任务,以下是简要介绍:
在这里插入图片描述

代理(Agents)

  • 定义:代理是 LangChain 中能够根据给定的任务或输入决定采取何种行动的组件,它可以根据一系列的规则和语言模型的输出,动态地决定下一步应该做什么,比如是否需要调用工具、调用哪个工具,以及如何根据工具的返回结果来生成最终的回答。

  • 作用

    决策与调度:代理能够根据输入和当前的上下文,决定是否需要调用工具以及调用哪些工具来完成任务,起到了决策和调度的核心作用。

    增强语言模型能力:通过与工具的结合,代理可以弥补语言模型自身在某些特定任务上的不足,如获取实时信息、进行复杂的计算等,从而增强了整个系统的能力。

    提供灵活交互:可以根据不同的用户输入和场景,灵活地调整交互策略,提供更加个性化和自适应的交互体验。

  • 示例:在一个问答系统中,代理可以根据用户的问题判断是否需要调用搜索引擎工具来获取最新的信息,若问题是 “2024 年奥运会的举办城市是哪里”,代理会调用搜索工具获取相关信息后再回答用户。

工具(Tools)

  • 定义:工具是 LangChain 中为代理提供额外功能的组件,它们可以是各种外部的 API、数据库、计算引擎等,用于执行特定的任务,如搜索信息、进行数学计算、调用知识图谱等。

  • 作用

    拓展功能边界:工具的存在使得 LangChain 能够利用外部资源和专业服务,极大地拓展了语言模型能够处理的任务范围,让语言模型可以与现实世界的各种数据和服务进行交互。

    提高准确性和效率:在处理一些需要特定领域知识或专业计算的任务时,工具可以提供更准确和高效的解决方案,避免语言模型仅凭自身能力可能出现的错误或低效。

  • 示例:常见的工具包括搜索引擎工具,如调用百度、谷歌搜索来获取网页信息;还有计算工具,用于进行复杂的数学运算;以及知识图谱工具,用于查询特定的知识实体和关系等。

实战示例

下面实例,我们分步骤进行讲解说明,最后给出完整示例,建议你也可以动手进行测试。

Import语句:这个块导入必要的库和模块:

from dotenv import load_dotenv
from langchain import hub
from langchain.agents import (
    AgentExecutor,
    create_react_agent,
)
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI
# from langchain_community.chat_models import ChatZhipuAI (智普大模型)
# Load environment variables from .env file
load_dotenv()
  • load_dotenv:这个函数将环境变量从.env文件加载到系统的环境变量中。这种方式避免将API密钥等敏感信息暴露在代码中非常有用。

  • hub:允许与LangChain hub进行交互,以提取模板和其他资产。

  • AgentExecutor和create_react_agent:用于在LangChain中创建和管理代理的类和函数。

  • Tool :LangChain提供的类,表示代理可以使用的工具。在本例中,它包

### langchain4j Agent 的实际应用案例与教程 Langchain4j 是一个用于构建基于大模型应用程序的 Java 库,其核心功能之一是通过 **Agent** 来实现复杂的任务自动化处理。以下是关于如何使用 Langchain4j 中的 Agent 进行实战开发的具体说明。 #### 1. Quarkus 集成 Langchain4j Quarkus 提供了一个扩展模块 `quarkus-langchain4j`[^1],允许开发者轻松集成 Langchain4j 功能到他们的应用程序中。此扩展支持快速配置和初始化 Langchain4j 所需的各种组件,包括 AgentsTools。 - 安装依赖项: ```xml <dependency> <groupId>io.quarkiverse.langchain4j</groupId> <artifactId>quarkus-langchain4j</artifactId> <version>0.9.0</version> </dependency> ``` - 初始化 Agent 并绑定工具链: ```java import io.quarkiverse.langchain4j.agent.Agent; import io.quarkiverse.langchain4j.tool.Tool; public class MyApplication { public static void main(String[] args) { Tool tool = new CustomTool(); // 自定义工具类 Agent agent = Agent.builder() .addTool(tool) .build(); String result = agent.run("请帮我完成某个复杂任务"); System.out.println(result); } } ``` #### 2. Spring Boot 集成 Langchain4j Spring Boot 社区提供了详细的文档来指导用户如何将 Langchain4j 整合到现有的 Spring Boot 项目中[^2]。这种集成方式非常适合那些已经熟悉 Spring 生态系统的开发者。 - 添加 Maven 或 Gradle 依赖: ```xml <dependency> <groupId>com.github.hankcs</groupId> <artifactId>langchain4j-spring-boot-starter</artifactId> <version>0.8.0</version> </dependency> ``` - 创建自定义 Controller 调用 Agent: ```java @RestController @RequestMapping("/api/agent") public class AgentController { @Autowired private AgentService agentService; // 假设有一个服务层封装了 Agent 的逻辑 @PostMapping("/execute") public ResponseEntity<String> executeTask(@RequestBody Map<String, String> request) { String taskDescription = request.get("task"); String response = agentService.execute(taskDescription); return ResponseEntity.ok(response); } } ``` #### 3. ReAct 思维框架的理解与实践 为了更好地理解 Agent 如何决策并调用不同的工具或子代理,可以深入研究 ReAct 框架的概念[^3]。ReAct 将行动分为两部分:“思考”阶段用来分析当前状态以及下一步应该做什么;“执行”阶段则真正操作数据或者触发其他动作。 - 示例代码展示简单的 ReAct 流程: ```java // 假设有两个工具 A 和 B List<Tool> tools = Arrays.asList(new ToolA(), new ToolB()); ReactFramework reactFramework = ReactFramework.builder() .setTools(tools) .build(); String observation = ""; while (!reactFramework.isFinished()) { Thought thought = reactFramework.think(observation); // 获取下一个想法 Action action = reactFramework.act(thought); // 根据想法采取行动 observation = performAction(action); // 执行具体行为获取观察结果 } private String performAction(Action action) { switch (action.getType()) { case SEARCH: return searchDatabase(action.getInput()); case CALL_API: return callExternalApi(action.getUrl()); default: throw new UnsupportedOperationException("未知的操作类型!"); } } ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值