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

import 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 Optional

from langchain.agents import tool
from langchain_community.tools.file_management.read import ReadFileTool
from langchain_community.tools.file_management.write import WriteFileTool

ROOT_DIR = "./data/"

@contextmanager
def pushd(new_dir):
    """上下文管理器,用于更改当前工作目录。"""
    prev_dir = os.getcwd()
    os.chdir(new_dir)
    try:
        yield
    finally:
        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 result
        except 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 BeautifulSoup
    from playwright.async_api import async_playwright

def 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 Field

def _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 OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings()
embedding_size = 1536
index = faiss.IndexFlatL2(embedding_size)
vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})
# 设置模型和AutoGPT
# 模型设置

!pip install duckduckgo_search

web_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年)的波士顿马拉松获胜成绩是什么?生成一个包含年份、姓名、原籍国和成绩的表格。"
])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hugo_Hoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值