探索Wikipedia Retriever:如何高效检索维基百科内容

154 阅读2分钟

引言

维基百科是全球最大的在线百科全书,提供多语言的知识资源。对于开发者而言,能够从维基百科高效检索信息是非常有用的。本文将介绍如何使用Wikipedia Retriever从维基百科获取信息,并展示如何将其集成到大型语言模型(LLM)的应用中。

主要内容

1. Wikipedia Retriever的概述

Wikipedia Retriever是一个工具,专门用于从维基百科中提取文档。它是langchain-community包的一部分,并使用wikipedia Python包进行获取。

2. 设置和安装

要使用Wikipedia Retriever,首先需要安装必要的Python包:

%pip install -qU langchain_community wikipedia

3. 实例化检索器

检索器可以通过以下方式进行实例化:

from langchain_community.retrievers import WikipediaRetriever

retriever = WikipediaRetriever(
    lang="en",  # 可以指定语言
    load_max_docs=10,  # 控制下载的文档数量
    load_all_available_meta=False  # 是否下载所有元数据
)

4. 使用检索信息

可以使用get_relevant_documents()方法来获取特定主题的文档:

docs = retriever.invoke("TOKYO GHOUL")
print(docs[0].page_content[:400])  # 打印部分内容

5. 将Retriever集成到LLM中

Wikipedia Retriever可以与LLM结合,通过链的形式实现复杂的查询处理。以下是一个集成示例:

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

# 初始化语言模型
llm = ChatOpenAI(model="gpt-4o-mini")

# 创建提示模板
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)

常见问题和解决方案

  • 数据限制:默认情况下,Wikipedia Retriever下载100个文档,建议根据实际需求设置load_max_docs以减少等待时间。
  • 网络限制:在某些地区访问维基百科可能存在网络限制,建议使用API代理服务提高访问稳定性。

总结和进一步学习资源

Wikipedia Retriever为开发者提供了一种高效访问维基百科内容的方法,并能与LLM无缝集成。欲了解更多详细信息,请查阅以下资源:

参考资料

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

---END---