构建LangChain应用程序的示例代码:2、使用LangChain库实现的AutoGPT示例:查找马拉松获胜成绩

本文主要是介绍构建LangChain应用程序的示例代码:2、使用LangChain库实现的AutoGPT示例:查找马拉松获胜成绩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AutoGPT 示例:查找马拉松获胜成绩

实现 https://github.com/Significant-Gravitas/Auto-GPT,使用LangChain基础组件(大型语言模型(LLMs)、提示模板(PromptTemplates)、向量存储(VectorStores)、嵌入(Embeddings)、工具(Tools))。

!pip install bs4!pip install nest_asyncio
# 导入必要的库
import asyncio
import osimport nest_asyncio
import pandas as pd
from langchain.docstore.document import Document
from langchain_experimental.agents.agent_toolkits.pandas.base import (create_pandas_dataframe_agent,
)
from langchain_experimental.autonomous_agents import AutoGPT
from langchain_openai import ChatOpenAI# Jupyter运行异步事件循环需要同步
nest_asyncio.apply()
# 设置大型语言模型
llm = ChatOpenAI(model="gpt-4", temperature=1.0)# 设置工具
# 我们将设置一个AutoGPT,包括搜索工具、写文件工具、读文件工具、网页浏览工具,以及通过Python REPL与CSV文件交互的工具# 在下方定义您想要使用的任何其他工具:
# 工具定义
import os
from contextlib import contextmanager
from typing import Optionalfrom langchain.agents import tool
from langchain_community.tools.file_management.read import ReadFileTool
from langchain_community.tools.file_management.write import WriteFileToolROOT_DIR = "./data/"@contextmanager
def pushd(new_dir):"""上下文管理器,用于更改当前工作目录。"""prev_dir = os.getcwd()os.chdir(new_dir)try:yieldfinally:os.chdir(prev_dir)@tool
def process_csv(csv_file_path: str, instructions: str, output_path: Optional[str] = None
) -> str:"""通过pandas在有限的REPL中处理CSV文件。只有在将数据作为csv文件写入磁盘后才使用此功能。任何图表都必须保存到磁盘才能由人类查看。指令应该用自然语言编写,而不是代码。假定数据帧已经加载完毕。"""with pushd(ROOT_DIR):try:df = pd.read_csv(csv_file_path)except Exception as e:return f"错误:{e}"agent = create_pandas_dataframe_agent(llm, df, max_iterations=30, verbose=True)if output_path is not None:instructions += f" 将输出保存到磁盘上的{output_path}"try:result = agent.run(instructions)return resultexcept Exception as e:return f"错误:{e}"
# 使用PlayWright浏览网页!pip install playwright!playwright install
async def async_load_playwright(url: str) -> str:"""使用Playwright加载指定的URL,并使用BeautifulSoup解析。"""from bs4 import BeautifulSoupfrom playwright.async_api import async_playwrightdef run_async(coro):event_loop = asyncio.get_event_loop()return event_loop.run_until_complete(coro)@tool
def browse_web_page(url: str) -> str:"""详细的方式,用于抓取整个网页。解析时可能会出现问题。"""return run_async(async_load_playwright(url))
# 在网页上进行问答
# 帮助模型向网页提出更有针对性的问题,避免其记忆混乱from langchain.chains.qa_with_sources.loading import (BaseCombineDocumentsChain,load_qa_with_sources_chain,
)
from langchain.tools import BaseTool, DuckDuckGoSearchRun
from langchain_text_splitters import RecursiveCharacterTextSplitter
from pydantic import Fielddef _get_text_splitter():return RecursiveCharacterTextSplitter(# 设置一个非常小的块大小,只是为了展示。chunk_size=500,chunk_overlap=20,length_function=len,)class WebpageQATool(BaseTool):name = "query_webpage"description = ("浏览网页并检索与问题相关的信息。")text_splitter: RecursiveCharacterTextSplitter = Field(default_factory=_get_text_splitter)qa_chain: BaseCombineDocumentsChain
# 设置记忆
# 这里的记忆用于代理的中间步骤import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddingsembeddings_model = OpenAIEmbeddings()
embedding_size = 1536
index = faiss.IndexFlatL2(embedding_size)
vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})
# 设置模型和AutoGPT
# 模型设置!pip install duckduckgo_searchweb_search = DuckDuckGoSearchRun()
tools = [web_search,WriteFileTool(root_dir="./data"),ReadFileTool(root_dir="./data"),process_csv,query_website_tool,# HumanInputRun(), # 如果您希望在每个步骤中请求人类帮助,请激活
]agent = AutoGPT.from_llm_and_tools(ai_name="Tom",ai_role="Assistant",tools=tools,llm=llm,memory=vectorstore.as_retriever(search_kwargs={"k": 8}),# human_in_the_loop=True, # 如果您希望添加每个步骤的反馈,请设置为True。
)agent.chain.verbose = True
# 使用AutoGPT查询网络
# 多年来,我花了很多时间爬取数据源和清理数据。让我们看看AutoGPT是否能在这方面提供帮助!# 以下是查找过去5年(截至2022年)波士顿马拉松获胜成绩并将其转换为表格形式的提示。
agent.run(["过去5年(截至2022年)的波士顿马拉松获胜成绩是什么?生成一个包含年份、姓名、原籍国和成绩的表格。"
])

这篇关于构建LangChain应用程序的示例代码:2、使用LangChain库实现的AutoGPT示例:查找马拉松获胜成绩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019508

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的