LangChain Agent最全教程学习

LangChain Agent的终极指南,本教程是您使用 Python 创建第一个agent的重要指南,请立即开始你的 LLM 开发之旅。

一、什么是LangChain Agent(代理)

LangChain中代理背后的想法是利用语言模型以及要执行的一系列操作。代理正在使用推理引擎来确定要执行哪些操作来获取结果。

代理对于处理从简单的自动响应到复杂的上下文感知交互等任务至关重要。

例如,您可能有一个与 Google 搜索、Wikipedia 和 OpenAI LLM 集成的代理。使用给定的代理工具,他们可以在 Google 中搜索结果,然后使用维基百科工具中检索到的上下文来查找详细信息并扩展上下文。

请记住,您必须放置明确定义的指令,以确保代理将以正确的顺序调用工具。

该图展示了代理及其组件的示例:

二、提升你的Agent(代理)

你可能想知道,“为什么我不能使用简单的LLM来回答我的问题?在某些情况下,使用的 LLM 模型具有旧数据,或者您必须提供一些内部数据(并使用嵌入来查找相似性)。

探索这些可以提升座席功能的示例:

1.网页搜索工具

您可以轻松地将不同类型的 Web 搜索作为可用操作添加到您的代理。它可能是 Google 搜索、Tavily 搜索、DuckDuckGo 等。

2.在矢量数据库中嵌入搜索

您可以从检索器创建一个工具并根据需要对其进行描述,因此代理将使用此工具来获取某种数据,例如相似性检查和嵌入模型。

3.做特定动作

您的代理可以是多用途的。例如,它可能在 Internet 上搜索某种信息,执行推理步骤,然后调用操作来创建 Jira 事务。

4.API集成工具

LangChain框架已经做了很多API集成,你需要做的就是获取API密钥,安装包并将工具附加到代理上。

5.自定义工具

您可以编写自己的工具,请参阅文档以了解如何操作。它可能是与您的内部 API、文档系统和许多其他应用程序的集成!

三、LangChain Agent vs. Chain

除了拥有代理之外,LangChain还支持链的想法。

链是要执行的操作的子序列,始终以硬编码的方式进行。这是代理和链之间的关键区别。虽然在代理中,推理模型可以选择其他操作(从给定的工具)来获取特定数据,但链将始终采用我们选择的相同路径。

与链相比,代理商的优势:

  • 根据工具的描述,代理决定应使用哪种工具来获取相关信息。
  • 代理采取行动并获取给定结果的上下文,例如在其他资源(例如Google搜索和维基百科)中搜索其他信息。
  • 代理检查结果并重复该过程以获取所需的数据。

四、使用代理的主要目标

当您构建自己的 AI LangChain 解决方案时,您需要了解使用代理是否是您想要的方式。

如果您的用例始终基于相同的流程和策略,例如:

1.网络搜索。

2.向量数据库文本嵌入。

3.推理。

然后,您可以考虑使用链而不是代理。agent成本是不可预测的,因为有些问题可能会在调用一个工具后直接回答,而另一些问题可能会使用一套全面的工具进行适当的推理。如果您的用例基于确定来自不同来源的事物(称为工具),那么代理似乎是一个很好的解决方案。另一方面,一种代理类型使用单个工具将复杂的查询划分为更简单的查询,因此这也可能是决定是使用链查询还是代理的另一个标准。

五、LangChain Agent类型

LangChain根据几个维度对代理进行分类:

  • 模型类型;
  • 支持聊天记录;
  • 多输入工具;
  • 并行函数调用;
  • 必需的模型参数。

选择适合您的选项:

1.OpenAI 函数

某些模型经过微调,输入与平时略有不同。可以调用一些特殊函数,此代理的作用是确定何时应调用它。该代理旨在与这种 OpenAI 模型一起使用。它支持聊天记录。

2.OpenAI 工具

该代理旨在与 OpenAI 工具配合使用,因此其作用是交互并确定是否使用图像生成工具或其他内置工具。OpenAI 函数之间的主要区别在于,该函数试图找到最适合的算法/算法的一部分以进行更好的推理,而 OpenAI 工具是关于内置工具,如图像生成和执行代码。它支持聊天记录。

3.XML代理

在一些模型中,推理/编写XML处于非常高级的水平(一个很好的例子是Anthropic Claude的模型)。如果您正在处理 XML 文件,这可能是要考虑的正确选择。它支持聊天记录。

4.JSON 对话代理

在读取JSON时,市场上有几种LLM特别方便。JSON也是某些实体表示的非常常见的标准。如果您正在构建某种对 JSON 文件进行操作的集成,并且模型支持它,则可以尝试使用此代理。它支持聊天记录。

5.结构化聊天

适用于多输入工具。它支持聊天记录。

6.ReAct 代理

为简单模型(LLM - 非对话式)制作。它支持聊天记录。

7.自助搜索

这种代理仅支持一个工具作为输入。主要目标是将您的查询分成更小的查询,使用工具获得答案,然后将其组合成问题的完整答案。这种代理不支持聊天记录。

六、工具

工具是执行单个任务的代理的主要组件。它可以是 Web 搜索、矢量数据库搜索或任何其他操作。您可以从社区完成的许多完整工具中进行选择,也可以编写自己的工具。

LangChain还具有从检索器创建工具的非常有用的功能:

代码语言:shell

**复制

tool = create_retriever_tool(
   retriever,
   name="companies_database",
   description="Useful when you need to find information about company."
)

从 Chroma in-memory 数据库创建检索器的位置:

代码语言:shell

**复制

retriever = Chroma.from_documents(documents_list, embedding_function).as_retriever()

像这个例子一样,对检索工具进行良好的描述是非常重要的,因为代理步骤决策机制就是基于此。如果您的描述缺失或不完整,可能会导致跳过代理执行的操作。

值得一提的是,工具名称也应该是唯一的。

七、工具包

工具包是工具与预定义操作的组合,可以在我们的代理中使用。通常,它们被组装到特定域。有不同的例子:

  • CSV代理工具包,用于对“CSV”文件进行操作(读取、写入),
  • Github 代理工具包,在 Github 上实现了不同的操作,例如创建新问题、创建新拉取请求等。

与工具相比,工具包实现了很多操作。

八、创建第一个LangChain Agent

先决条件:

  • Tavily API token
  • OpenAI API token
  • Python v3.11 版
  • Pip 包:langchain(至少 v0.1.0)、openai、wikipedia、langchain-community、tavily-python、langchainhub、langchain-openai、python-dotenv

此时,您必须选择:

  • 您想使用的 LLM(例如 ChatOpenAI);
  • 代理类型(有关代理类型部分的更多内容);
  • 工具。

现在,您可以组合所有内容:

代码语言:shell

**复制

from dotenv import load_dotenv
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_functions_agent, load_tools
from langchain.tools.tavily_search import TavilySearchResults
from langchain.utilities.tavily_search import TavilySearchAPIWrapper
from langchain_openai import ChatOpenAI

load_dotenv()

def get_function_tools():
  search = TavilySearchAPIWrapper()
  tavily_tool = TavilySearchResults(api_wrapper=search)

  tools = [
      tavily_tool
  ]

  tools.extend(load_tools(['wikipedia']))

  return tools


def init_action():
  llm = ChatOpenAI(model="gpt-4", temperature=0.1)
  prompt = hub.pull("hwchase17/openai-functions-agent")
  tools = get_function_tools()
  agent = create_openai_functions_agent(llm, tools, prompt)
  agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
  agent_executor.invoke({"input": "Who is the owner of Tesla company? Let me know details about owner."})


init_action()

Dotenv 文件应具有以下环境:

代码语言:shell

**复制

TAVILY_API_KEY=
OPENAI_API_KEY=

九、Agent 执行器

从LangChain v0.1.0版本开始,推荐的创建新代理的方式是使用AgentExecutor。您可以通过传递代理和工具轻松定义您的执行器。

旧的initialize_agent使用方式被标记为从 v0.1.0 版本开始弃用。

代码语言:shell

**复制

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

十、定义提示语

LangChain v0.1.0 版本提供了一种新的初始化代理的方法。我们必须对每种类型使用明确定义的方法,而不是使用initialize_agent。还有一个称为 prompt 的附加参数。我们可以使用默认提示(您可以参考文档查看每个代理的提示)。

OpenAI 函数代理的默认提示示例:

代码语言:shell

**复制

prompt = hub.pull("hwchase17/openai-functions-agent")

如果您不打算覆盖默认提示,请相应地提供默认提示。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取==🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/597014.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++常用库函数——strcmp、strchr

1、strcmp:比较两个字符串的值是否相等 例如 char a1[6] "AbDeG",*s1 a1;char a2[6] "AbdEg",* s2 a2;s1 2;s2 2;printf("%d \n", strcmp(s1, s2));return(0); s1指向a1,s2指向a2,strcmp表示比较s1和s…

Stable Diffusion学习记录

文章目录 前言电脑配置推荐环境搭建下载地址安装步骤步骤一,打开下载的秋叶整合包,路径秋叶整合包/sd-wenui-aki步骤二,打开下载好的sd-webui-aki-v4.8.7解压包 Stable Diffusion软件配置,插件安装,模型下载Stable Dif…

四川易点慧电子商务抖音小店:潜力无限的新零售风口

在当今数字化浪潮中,电子商务已经成为推动经济发展的重要引擎。四川易点慧电子商务有限公司凭借其敏锐的市场洞察力和创新精神,成功在抖音小店这一新兴平台上开辟出一片新天地。本文将探讨四川易点慧电子商务抖音小店的潜力及其在新零售领域的影响力。 一…

C#知识|如何在WinForm窗体中实现分割线绘制?

哈喽,你好啊,我是雷工! 在上位机UI设计中经常会用到分割线,用来分割界面区域。 像在KingSCADA、杰控、昆仑通态、WinCC、组态王、力控、易控等组态软件中非常简单,有现成的划线操作,选中相关工具直接绘制即…

Python接口自动化测试之【测试函数、测试类/测试方法的封装】

前言 在pythonpytest 接口自动化系列中,我之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行。 例如单个接口的请求代码如下: import requests …

高效转化,智能私信软件策略揭秘

在数字营销的浪潮中,智能私信软件策略正成为提升转化率的重要工具。这种软件以其个性化、自动化的特点,正在重新定义与客户的互动方式,让企业能够更加高效地吸引并留住潜在客户。 智能私信软件的核心在于其高度的定制化和人性化设计。通过大数…

【LLama】Llama3 的本地部署与lora微调(基于xturn)

系列课程代码文档(前2节课可跳过):https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频:https://space.bilibili.com/3546636263360696/channel/series XTuner :https://github.com/InternLM/xtuner/blob/main/R…

[C++]VS2022配置cplex12.8过程中出现ext未声明标识符语法错误:标识符“ImplClass“

这个时候,主要的是看报错,根据报错,去网上寻找解决办法。因为这个时候,代码可能并没有任何错误,只不过你是VS2022,老师是VS2017或者其他版本。不同的版本之间代码运行问题,如果你换成cplex12.10…

全网详细的PostgreSQL数据库详细的安装步骤教学

安装 PostgreSQL 数据库的步骤因操作系统的不同而有所差异。以下是在 Windows、Linux 和 macOS 上安装 PostgreSQL 的详细步骤: Windows 上安装 PostgreSQL 下载安装程序: 访问 PostgreSQL 官方网站(https://www.postgresql.org/&#xff09…

Linux服务器常用巡检命令

在Linux服务器上进行常规巡检是确保服务器稳定性和安全性的重要措施之一。以下是一些常用的巡检命令和技巧: 1. 查看系统信息 1.1 系统信息显示 命令:uname -a ​​​​ [rootlinux100 ~]# uname -a Linux linux100 4.15.0-70-generic #79-Ubuntu SMP…

激发创新活力,泸州老窖锻造人才“铁军”(内附长江酒道短评)

执笔 | 姜 姜 编辑 | 古利特 刚刚站上300亿元新台阶&#xff0c;泸州老窖再次传来喜讯。 <<<左右滑动查看更多>>> 4月28日&#xff0c;四川省庆祝“五一”国际劳动节大会在成都召开。泸州老窖股份有限公司工业4.0项目秘书长赵丙坤、泸州老窖酿酒有限责任公…

Leetcode—387. 字符串中的第一个唯一字符【简单】

2024每日刷题&#xff08;127&#xff09; Leetcode—387. 字符串中的第一个唯一字符 实现代码 class Solution { public:int firstUniqChar(string s) {int count[26] {0};for(char c: s) {count[c - a];}for(int i 0; i < s.length(); i) {if(count[s[i] - a] 1) {re…

Partisia Blockchain 生态zk跨链DEX上线,加密资产将无缝转移

在 5 月 1 日&#xff0c;由 Partisia Blockchain 与 zkCross 创建合作推出的 Partisia zkCrossDEX 在 Partisia Blockchain 生态正式上线。Partisia zkCrossDEX 是 Partisia Blockchain 上重要的互操作枢纽&#xff0c;其融合了 zkCross 的 zk 技术跨链互操作方案&#xff0c;…

【简单介绍下7-Zip】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

分享几个副业,一天搞100~200不成问题,一不小心收益比你主业还多

每次家庭聚会&#xff0c;总是那些老掉牙的话题在耳边萦绕&#xff1a;“孩子&#xff0c;你工资多少啊&#xff1f;买车买房了吗&#xff1f;”仿佛只有按部就班地上班、结婚生子&#xff0c;才是人生的唯一出路。 然而&#xff0c;在这个充满机遇的时代&#xff0c;谁说“不上…

【go项目01_学习记录03】

学习记录 1 路由http.ServeMux1.1 查看HandleFunc方法源码1.2 查看ListenAndServe方法源码1.3 重构&#xff1a;使用自定义的 ServeMux1.4 http.ServeMux 的局限性1.4.1 URI 路径参数1.4.2 请求方法过滤1.4.3 不支持路由命名 1.5 http.ServeMux 的优缺点 1 路由http.ServeMux …

Docker重启容器失败

Bug描述 [rootVM-12-15-centos ~]# docker restart ca1008fbdf25 Error response from daemon: Cannot restart container ca1008fbdf25: driver failed programming external connectivity on endpoint nginx_java (aded2fc7cbfa784b2e6a39e08d3ae2e7d00c13af88879a8fe7c5007…

Python安装以及环境配置

目录 一、下载安装包二级目录三级目录 一、下载安装包 方式网址Python官网python.org镜像下载地址Download pythonpycharmDownload PyCharm https://blog.csdn.net/sun80760/article/details/135256627 二级目录 三级目录

TypeScript学习日志-第二十天(模块解析)

模块解析 一、ES6之前的模块规范 前端模块化规范是有很多的&#xff0c;在es6模块化规范之前分别有一下的模块化规范 一、Commonjs 这是 NodeJs 里面的模块化规范 // 导入 require("xxx"); require("../xxx.js"); // 导出 exports.xxxxxx function() …

Linux学习笔记(3)---- Debian测试网速指令及查看是否千兆网卡

测试网速指令 在Debian系统中&#xff0c;测网速的指令主要有以下几种方法&#xff1a; 使用speedtest-cli工具&#xff1a; speedtest-cli是一个常用的网络速度测试工具&#xff0c;可以通过命令行进行安装和运行。首先&#xff0c;需要安装speedtest-cli&#xff1a; sud…
最新文章