以编程方式使用文档

>Nimble 的搜索 API 通过使用无头浏览器浏览实时网络来提供实时网络搜索,而不是查询预构建的索引。此检索器处理 JavaScript 渲染、动态内容和复杂的导航流程——使其适用于需要访问当前网络数据的 RAG 应用,包括分页、过滤器和客户端渲染背后的内容。

我们可以将其用作 检索器。它将展示此集成特有的功能。看完后,查看 相关的用例页面 可能会有帮助,以了解如何将此检索器用作更大链的一部分。

安装

pip install -U langchain-nimble
uv add langchain-nimble

我们还需要设置我们的 Nimble API 密钥。您可以通过注册来获取 API 密钥 Nimble.

if not os.environ.get("NIMBLE_API_KEY"):
    os.environ["NIMBLE_API_KEY"] = getpass.getpass("Nimble API key:\n")

用法

现在我们可以实例化我们的检索器:

from langchain_nimble import NimbleSearchRetriever

# Basic retriever
retriever = NimbleSearchRetriever(k=5)

在链中使用

我们可以轻松地将此检索器组合到用于问答的 RAG 链中:

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

# Create a RAG prompt
prompt = ChatPromptTemplate.from_template(
    """Answer the question based only on the provided context.
If you cannot answer based on the context, say so.

Context: {context}

Question: {question}

Answer:"""
)

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

# Configure retriever for comprehensive results
retriever = NimbleSearchRetriever(
    k=5,
    deep_search=True,
    parsing_type="markdown",
    include_domains=["wikipedia.org", "britannica.com", ".edu", ".gov"]
)


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


# Build the RAG chain
chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)
# Ask a question
response = chain.invoke("What are the key differences between renewable and non-renewable energy sources?")
print(response)
Based on the provided context, here are the key differences between renewable and non-renewable energy sources:

**Renewable Energy Sources:**
- Naturally replenished on a human timescale (solar, wind, hydro, geothermal, biomass)
- Sustainable and virtually inexhaustible
- Generally produce little to no greenhouse gas emissions
- Lower environmental impact
- Costs have decreased significantly in recent years

**Non-Renewable Energy Sources:**
- Finite resources that cannot be replenished quickly (coal, oil, natural gas, nuclear)
- Will eventually be depleted
- Combustion releases significant greenhouse gases and pollutants
- Major contributor to climate change
- Currently still provide the majority of global energy but declining in competitiveness

The context indicates that renewable energy is increasingly becoming cost-competitive with fossil fuels while offering environmental benefits.

高级配置

检索器支持针对不同用例的广泛配置:

参数类型默认值描述
kint10返回的最大结果数量 (1-20)
deep_searchboolTrue**深度模式** (默认)用于完整内容提取,或 **快速模式** (False) 仅返回搜索引擎结果页
topicstr"general"针对特定内容类型优化搜索:"general"、"news" 或 "location"
include_answerboolFalse生成 AI 驱动的摘要答案,与搜索结果一起返回
include_domainslist[str]None白名单特定域名(例如 ["wikipedia.org", ".edu"])
exclude_domainslist[str]None黑名单特定域名以过滤
start_datestrNone按日期过滤结果,在日期之后 (YYYY-MM-DD 或 YYYY)
end_datestrNone按日期过滤结果,在日期之前 (YYYY-MM-DD 或 YYYY)
parsing_typestr"markdown"输出格式:"plain_text"、"markdown" 或 "simplified_html"
localestr"en"搜索语言区域(例如 "en-US")
countrystr"US"用于本地化结果的国家代码(例如 "US")
api_keystr环境变量Nimble API 密钥(默认使用 NIMBLE_API_KEY 环境变量)

高级配置示例:

from langchain_nimble import NimbleSearchRetriever

# Retriever optimized for academic research
retriever = NimbleSearchRetriever(
    k=10,
    deep_search=True,
    topic="general",
    include_domains=["arxiv.org", "nature.com", "science.org"],
    start_date="2025-01-01",
    parsing_type="markdown"
)

docs = retriever.invoke("recent advances in quantum computing")

最佳实践

快速模式 vs 深度模式

  • 深度模式 (deep_search=True,默认):
  • - 从网页进行完整内容提取
  • - 适用于需要完整内容的 RAG 应用
  • - 最适合详细研究和构建知识库
  • - 处理 JavaScript 渲染和动态内容
  • 快速模式 (deep_search=False):
  • - 快速获取仅SERP的结果,包含标题和摘要
  • - 针对性能敏感型应用进行了优化
  • - 最适合对速度要求高的高频查询
  • - 每次查询成本更低

过滤策略

域名过滤:

  • - 使用 include_domains 用于专注研究(学术、政府、可信来源)
  • - 使用 exclude_domains 用于过滤论坛、社交媒体或不可靠来源
  • - 结合两者可精确控制来源质量

日期过滤:

  • - 设置 start_dateend_date 用于时效性查询
  • - 对于近期新闻、时事或有时效性的信息至关重要
  • - 格式:"YYYY-MM-DD"(具体)或"YYYY"(仅年份)

主题路由:

  • - 使用 topic="news" 用于优化时事和新闻文章
  • - 使用 topic="location" 用于优化本地商家和地理查询
  • - 使用 topic="general" 或省略以进行标准网络搜索

性能优化

  1. **选择合适的模式**:使用 **快速模式** (deep_search=False)用于对速度敏感的高频查询; **深度模式** (默认)用于全面内容提取
  2. **调整结果数量**:从较小的 k 值开始,根据需要增加
  3. **使用异步**:利用 ainvoke() 进行并发查询
  4. **策略性缓存**:考虑缓存频繁查询
  5. **明智过滤**:域名和日期过滤器可减少噪音并提高相关性

API参考

有关所有 NimbleSearchRetriever 功能和配置的详细文档,请访问 Nimble API文档.