langchain主要模块(五):Agent以及Wandb

news2024/11/17 3:33:11

langchain2之Agent以及Wandb

  • langchain
    • 1.概念
    • 2.主要模块
        • 模型输入/输出 (Model I/O)
        • 数据连接 (Data connection)
        • 链式组装 (Chains)
        • 代理 (Agents)
        • 内存 (Memory)
        • 回调 (Callbacks)
    • 3.Agent
      • Action Agent:
      • Plan-and-Execute-Agent:
      • 搜索工具
    • 4.wandb
      • 1.注册
      • 2.安装
      • 3.登录
      • 4.使用
      • 5.打开网址查看
      • 6.在langchain中使用

langchain

1.概念

什么是LangChain?

源起:LangChain产生源于Harrison与领域内的一些人交谈,这些人正在构建复杂的LLM应用,他在开发方式

上看到了一些可以抽象的部分。一个应用可能需要多次提示LLM并解析其输出,因此需要编写大量的复制粘贴。

LangChain使这个开发过程更加简单。一经推出后,在社区被广泛采纳,不仅有众多用户,还有许多贡献者参

与开源工作。

还有大模型本身的问题,无法感知实时数据,无法和当前世界进行交互。

LangChain是一个用于开发大语言模型的框架。

主要特性:

\1. 数据感知:能够将语⾔模型与其他数据源进⾏连接。

\2. 代理性:允许语⾔模型与其环境进⾏交互。可以通过写⼯具的⽅式做各种事情,数据的写⼊更新。

主要价值:

1、组件化了需要开发LLM所需要的功能,提供了很多工具,方便使用。

2、有一些现成的可以完整特定功能的链,也可以理解为提高了工具方便使用。

2.主要模块

在这里插入图片描述

LangChain 为以下模块提供了标准、可扩展的接口和外部集成,按照复杂程度从低到高列出:

模型输入/输出 (Model I/O)

与语言模型进行接口交互

数据连接 (Data connection)

与特定于应用程序的数据进行接口交互

链式组装 (Chains)

构造调用序列

代理 (Agents)

根据高级指令让链式组装选择要使用的工具

内存 (Memory)

在链式组装的多次运行之间持久化应用程序状态

回调 (Callbacks)

记录和流式传输任何链式组装的中间步骤

3.Agent

Agent:这是一个类,负责决定下一步要采取什么行动。它由语言模型和提示驱动。提示可以包括agent的性格、背景上下文以及用于引发更好推理的提示策略等。

Tools:这些是agent调用的函数。这里有两个重要的考虑因素:给agent提供正确的工具,以及以最有帮助的方式描述这些工具。

Toolkits:这是一组工具,用于完成特定的目标。LangChain提供了一系列的toolkits。

AgentExecutor:这是agent的运行时环境。它实际上调用agent并执行其选择的动作。

⼏个关键组件:

• Agent:这是负责决定下⼀步要采取什么⾏动的类,即⽤什么Tool,做决定。

• Tools:Tools是agent调⽤的函数、内置的⼯具有搜索、⽹络请求、Shell、数学…

• Toolkits:⽤于完成特定⽬标所需的⼯具组。⼀个toolkit通常包含3-5个⼯具。

• AgentExecutor:AgentExecutor是agent的运⾏时环境。这是实际调⽤agent并执⾏其选择的动作的部分

Agent使⽤LLM来决定应采取哪些⾏动(Tool)以及⾏动的顺序。⾏动可以是使⽤⼯具并观察其输出,或者向⽤户返回响应。下⾯是可⽤的Agent类型:

Action Agent:

• Zero-shot ReAct:仅根据⼯具的描述来确定使⽤哪个⼯具。要求为每个Tool提供⼀个描述,不限制Tool数量

• Structured input ReAct:能够使⽤多输⼊⼯具,结构化的参数输⼊。

• Conversational:为对话设置设计的Agent,使⽤Memory来记住之前的对话交互。

• Self ask with search:⾃问⾃答,会使⽤Google搜索⼯具。

• ReAct document store :⽤于和⽂档进⾏交互的Agent。必须提供两个Tool:⼀个搜索⼯具和⼀个查找⼯具。搜索⼯具应该搜索⽂档,⽽查找⼯具应该在最近找到的⽂档中查找⼀个术语。

• OpenAI Functions:某些OpenAI模型(如gpt-3.5-turbo-0613和gpt-4-0613)已经明确地进⾏了微调,如果使⽤

这些模型,可以考虑使⽤OpenAI Functions 的AgentType。

Plan-and-Execute-Agent:

计划和执⾏agent 计划和执⾏agent通过⾸先计划要做什么,然后执⾏⼦任务来完成⽬标。这个想法主要受到BabyAGI和"Plan-and-Solve"论⽂的启发。

from langchain.agents import OpenAIFunctionsAgent
# 定义用来控制Agent的模型
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(temperature=0)

# 定义一个Tool,这个Tool是用来计算单单词的长度
from langchain.agents import tool


@tool
def get_word_length(word: str) -> int:
    """返回单词的长度。"""
    return len(word)


tools = [get_word_length]

# 创建提示,设定Agent的特点和擅长点
from langchain.schema import SystemMessage

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

# 定义Agent
from langchain.agents import OpenAIFunctionsAgent

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

# 创建AgentExecutor - 我们的agent的运行时环境。
from langchain.agents import AgentExecutor

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

agent_executor.run("单词educa有多少个字母?")
agent_executor.run("那是个真正的单词吗?")

在这里插入图片描述

from langchain.prompts import MessagesPlaceholder
# 给Agent加上会话状态
from langchain.memory import ConversationBufferMemory

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)
# 加上状态Memory
agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, memory=memory, verbose=True)
agent_executor.run("单词educa有多少个字母?")
agent_executor.run("那是个真正的单词吗?")

在这里插入图片描述

Structured tool chat

可以使用args_schema计算动作的输入,约定输入的结构。在使用structured-chat-zero-shot-react-description 或者 AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION是有用的。

import requests
from pydantic import BaseModel, Field
from langchain.agents import AgentType
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent
from langchain.tools import StructuredTool

def create_crowd(type: str, param: dict) -> str:
    """
     该工具可以用来进行人群生成:
    当需要生成人群、分析画像、咨询问题时,使用如下的指示:url 固定为:http://localhost:3001/
     如果请求是生成人群,请求的type为crowd; 如果请求是分析画像,请求的type为analyze; 如果是其他或者答疑,请求的type为question;
     请求body的param把用户指定的条件传进来即可
     只要请求有结果,你就说人群正在生成中就行
     """
    result = requests.post("http://localhost:3001/", json={"type": type, "param": param})
    print(result)
    return f"Status: {result.status_code} - {result.text}"

tools = [
    StructuredTool.from_function(func=create_crowd, return_direct=True)
]

llm = OpenAI(temperature=0)  # Also works well with Anthropic models
# memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
agent_chain = initialize_agent(tools,
                               llm,
                               agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
                               verbose=True,
                               # memory=memory
                               )
agent_chain.run("我想生成一个性别为男并且在180天访问过淘特的人群?")

在这里插入图片描述

搜索工具

https://serpapi.com/

复制key
在这里插入图片描述

1.配置key

import os
import openai
#搜索
os.environ["OPENAI_API_KEY"] = ""

openai.api_key = ""
os.environ["SERPAPI_API_KEY"] = ""
#代理
os.environ["http_proxy"] = "127.0.0.1:7890"
os.environ["https_proxy"] = "127.0.0.1:7890"

2.封装工具

from langchain.agents import Tool
from langchain.agents import AgentType
from langchain.memory import ConversationBufferMemory
from langchain import OpenAI
from langchain.utilities import SerpAPIWrapper
from langchain.agents import initialize_agent

search = SerpAPIWrapper()
tools = [
    Tool(
        name="Current Search",
        func=search.run,
        description="当你需要回答关于当前事件或世界当前状态的问题时很有用"
    ),
]

memory = ConversationBufferMemory(memory_key="chat_history")

llm = OpenAI(temperature=0)
agent_chain = initialize_agent(
    # 工具列表
    tools,
    llm,
    # Agent类型
    agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
    verbose=True,
    memory=memory)

3.调用agent

agent_chain.run(input="明天福州的天气怎么样? 针对明天的天气我适合买什么样的衣服")

在这里插入图片描述

4.wandb

W&B是机器学习平台,供开发人员更快地构建更好的模型。使用W&B的轻量级,可互操作的工具快速跟踪实验,对数据集进行版本控制和迭代,评估模型性能,重现模型,可视化结果和发现回归,并与同事共享结果。 在 5 分钟内设置 W&B,然后快速迭代您的机器学习管道,确信您的数据集和模型在可靠的记录系统中得到跟踪和版本控制。

1.注册

https://wandb.ai/

2.安装

pip install wandb

3.登录

wandb login

在这里插入图片描述

4.使用

import wandb
import random

# start a new wandb run to track this script
wandb.init(
    # set the wandb project where this run will be logged
    project="my-awesome-project",
    
    # track hyperparameters and run metadata
    config={
    "learning_rate": 0.02,
    "architecture": "CNN",
    "dataset": "CIFAR-100",
    "epochs": 10,
    }
)

# simulate training
epochs = 10
offset = random.random() / 5
for epoch in range(2, epochs):
    acc = 1 - 2 ** -epoch - random.random() / epoch - offset
    loss = 2 ** -epoch + random.random() / epoch + offset
    
    # log metrics to wandb
    wandb.log({"acc": acc, "loss": loss})
    
# [optional] finish the wandb run, necessary in notebooks
wandb.finish()

5.打开网址查看

https://wandb.ai/home

在这里插入图片描述

6.在langchain中使用

import os

os.environ["LANGCHAIN_WANDB_TRACING"] = "true"
os.environ["WANDB_PROJECT"] = "langchain-tracing"
from langchain.agents import initialize_agent, load_tools
from langchain.agents import AgentType
from langchain.llms import OpenAI
from langchain.callbacks import wandb_tracing_enabled

llm = OpenAI(temperature=0)
tools = load_tools(["llm-math"], llm=llm)

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)
agent.run("7的0.3次方乘以9等多少?")

在wandb中查看

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第七版教材下的PMP考试有多难?

难度没有上升多少的,毕竟新考纲已经考过几轮考试了,如果报了培训班,那是没多大难度,如果自学,也只是难在理解第七版教材,会比第六版难以理解很多,而且第六版的知识也仍然有用,只是相…

Python基础学习笔记1(AI Studio)

地址:飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址:飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址:飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址:飞桨AI Studio星河社区-人工智能学习与实训…

FE_Vue学习笔记 - 数据代理

Vue中的数据代理是一种机制,通过它,Vue实例(vm)可以代理其数据对象(data)中的属性操作。这种代理的原理主要是通过Object.defineProperty()方法,将data对象的每个属性都添加到vm对象上&#xff…

2023年8月京东洗衣机行业品牌销售排行榜(京东数据挖掘)

鲸参谋监测的京东平台8月份洗衣机市场销售数据已出炉! 根据鲸参谋平台的数据显示,8月份,京东平台上洗衣机的销量共计117万,环比增长约5%,同比下降约8%;销售额为18亿,环比下降约2%,同…

使用SimpleDateFormat类的示例文档

以下是Java中使用SimpleDateFormat类的示例文档: 示例 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Main {public static void main(String[] args) {String dateStr…

遥感数据与作物模型同化应用:PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合、精度验证等主要环节

查看原文>>>遥感数据与作物模型同化实践技术应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具,可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系,为不同条件下作物生长发育及…

【C++】哈希表的实现

哈希是什么理解哈希哈希所用的容器计算key值方法哈希的插入和查找解决哈希冲突闭散列也叫开放寻址法开散列 哈希闭散列实现闭散列结构闭散列结构插入闭散列查找闭散列删除 哈希开散列实现(链表式)开散列结构开散列结构插入开散列结构查找开散列结构删除 …

事件循环,还在微任务宏任务?过时了,快看看新版浏览器事件循环event loop(message loop)

浏览器的进程模型 进程:程序运⾏需要有它⾃⼰专属的内存空间,可以把这块内存空间简单的理解为进程。每个应⽤⾄少有⼀个进程,进程之间相互独⽴,即使要通信,也需要双⽅同意。 线程:有了进程,就…

【机器学习习题】估计一个模型在未见过的数据上的性能

您提到的不等式是统计学中的泛化误差界(generalization error bound),它用于估计一个模型在未见过的数据上的性能。这个不等式是由Hoeffding不等式和Union Bound组合而成的。在这个不等式中,我们有以下符号: - P[|E_i…

Linux安装JDK1.8并配置环境变量

Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量 一、查询已有JAVA环境版本信息 java -version 二、下载Oracle JDK安装包 https://www.oracle.com/java/technologies/downloads/archive/ 三、安装 配置JDK 以下方式适用于安装各版本JDK&…

第一届电子纸产业创新应用论坛

自从2004年索尼推出全球首款电子纸的应用产品——电纸书阅读器以来,20年间,在各个领域,涌现出众多优秀的电子纸的创新应用,如电子价签、手写本、手机、笔记本、显示器、电子公交站牌等,形成电子纸产业持续蓬勃发展的强…

Java“牵手”义乌购商品详情数据,义乌购商品详情接口,义乌购API接口申请指南

义乌购隶属浙江义乌购电子商务有限公司旗下网站。该平台定位为依托实体市场,服务实体市场,以诚信为根本,将7万网上商铺与实体商铺一一对应绑定,为采购商和经营户提供可控、可信、可溯源的交易保障。 义乌购平台现有商铺商品、市场…

Jmeter系列-控制器Controllers的介绍(8)

Controllers 简介 JMeter是一款功能强大的性能测试工具,而控制器是JMeter中非常重要的一个组件。控制器用于控制测试计划的执行流程,可以根据需求来控制线程的启动、停止、循环等操作。 Jmeter有两种类型的控制器:Samplers(取样…

Tomcat架构设计及组件详解

继Tomcat配置详解(Tomcat配置server.xml详解)Tomcat配置详解(Tomcat配置server.xml详解)_tomcat xml配置https://blog.csdn.net/imwucx/article/details/132166738文章之后,深入的学习tomcat相关知识,对Tom…

电子会计档案怎么管?电子凭证怎么入账归档?泛微文书定帮您解决

随着数字经济的发展,会计档案领域关键政策不断推进,逐渐向数字化发展。 2015年12月,财政部、国家档案局令第79号《会计档案管理办法》:确定电子会计档案的概念和管理要求,明确会计档案可仅以电子形式归档保存。 2020…

3D医学影像PACS系统源代码

一、系统概述 3D医学影像PACS系统,它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成, 具有完善的影像数据库管理功能,强大…

混合项目管理:如何成功地整合传统与敏捷方法?

若你尚未涉足于混合项目管理这一领域,且暗自以为其难以捉摸、令人费解,我们向你承诺,实则并非如此。 在深入探究混合项目管理这一主题之前,我们先澄清几项基础但关键的专业术语。在当今这个商业竞争愈发激烈的环境中,项…

4G网络广播模块 4G网络广播开发模块

SV-6209 4G网络广播模块 4G网络广播开发模块 一、描述 SV-6209网络音频模块是一款带2*40W功放输出的4G广播音频模块,采用高性能ARM处理器及专业Codec,能接收4G广播音频数据流,转换成音频模拟信号输出。带有一路line in输入,通过外…

jmeter生成html格式接口自动化测试报告

jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观。 笔者刚做了这方面的尝试,总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安…

linux安装sqoop

一 解压安装包 这里提供了网盘资源 链接: https://pan.baidu.com/s/1QkFqVnlvuOJ_aB2bjn-OKg?pwducsy 提取码: ucsy 这里有两个压缩包,sqoop-1.4.7.tar.gz是 sqoop 的安装包,另一个是我们需要里面的一些 jar 包 解压 安装包 tar -zxf ./sqoop-1.4.7.t…