构建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

相关文章

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

Nginx之https证书配置实现

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录背景介绍为什么不能部署在 IIS 或 NAT 设备上?具体实现证书获取nginx配置扩展结果验证

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x