Skip to main content
Parallel 是一个专为 LLM 和 AI 应用设计的实时网页搜索与内容提取平台。
ParallelExtractTool 提供对 Parallel Extract API 的访问,可从网页中提取干净、结构化的内容。

概述

集成详情

可序列化JS 支持包最新版本
ParallelExtractToollangchain-parallelPyPI - Latest version

工具功能

  • 干净的内容提取:从网页中提取主要内容,去除广告、导航栏和样板文字
  • Markdown 格式:以干净的 Markdown 格式返回内容
  • 批量处理:在单次 API 调用中提取多个 URL 的内容
  • 元数据提取:包含标题、发布日期及其他元数据
  • 内容长度控制:可配置每次提取的最大字符数
  • 错误处理:优雅地处理提取失败的情况,并提供详细的错误信息
  • 异步支持:完整的 async/await 支持,提升性能

设置

该集成位于 langchain-parallel 包中。
pip install -qU langchain-parallel

凭据

前往 Parallel 注册并生成 API 密钥。完成后,设置 PARALLEL_API_KEY 环境变量:
import getpass
import os

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

实例化

下面展示如何实例化 ParallelExtractTool。该工具可以通过 API 密钥和内容长度参数进行配置:
from langchain_parallel import ParallelExtractTool

# 基本实例化 - 从环境变量读取 API 密钥
tool = ParallelExtractTool()

# 使用显式 API 密钥和自定义设置
tool = ParallelExtractTool(
    api_key="your-api-key",
    base_url="https://api.parallel.ai",  # 默认值
    max_chars_per_extract=5000,  # 限制内容长度
)

调用

直接使用参数调用

可以传入 URL 列表来提取内容:
# 提取单个 URL
result = tool.invoke(
    {"urls": ["https://en.wikipedia.org/wiki/Artificial_intelligence"]}
)

print(f"Extracted {len(result)} result(s)")
print(f"Title: {result[0]['title']}")
print(f"URL: {result[0]['url']}")
print(f"Content length: {len(result[0]['content'])} characters")
print(f"Content preview: {result[0]['content'][:200]}...")
# 提取多个 URL
result = tool.invoke(
    {
        "urls": [
            "https://en.wikipedia.org/wiki/Machine_learning",
            "https://en.wikipedia.org/wiki/Deep_learning",
            "https://en.wikipedia.org/wiki/Natural_language_processing",
        ]
    }
)

print(f"Extracted {len(result)} results")
for i, item in enumerate(result, 1):
    print(f"\n{i}. {item['title']}")
    print(f"   URL: {item['url']}")
    print(f"   Content length: {len(item['content'])} characters")

# 示例响应结构:
# [
#     {
#         "url": "https://example.com/article",
#         "title": "Article Title",
#         "content": "# Article Title\n\nMain content in markdown...",
#         "publish_date": "2024-01-15"  # 可选
#     }
# ]

使用 ToolCall 调用

也可以使用模型生成的 ToolCall 来调用工具,此时会返回 ToolMessage
# 通常由模型生成,此处直接创建工具调用用于演示。
model_generated_tool_call = {
    "args": {
        "urls": [
            "https://en.wikipedia.org/wiki/Climate_change",
            "https://en.wikipedia.org/wiki/Renewable_energy",
        ]
    },
    "id": "call_123",
    "name": tool.name,  # "parallel_extract"
    "type": "tool_call",
}

result = tool.invoke(model_generated_tool_call)
print(result)
print(f"Tool name: {tool.name}")  # parallel_extract
print(f"Tool description: {tool.description}")

异步使用

该工具支持完整的 async/await 操作,适用于异步应用以提升性能:
async def extract_async():
    return await tool.ainvoke(
        {
            "urls": [
                "https://en.wikipedia.org/wiki/Python_(programming_language)",
                "https://en.wikipedia.org/wiki/JavaScript",
            ]
        }
    )


# 运行异步提取
result = await extract_async()
print(f"Extracted {len(result)} results asynchronously")

高级功能

extract 工具支持使用搜索目标/查询进行聚焦提取,并提供抓取策略及对摘要和完整内容的精细控制:
# 使用搜索目标提取聚焦摘要
result = tool.invoke(
    {
        "urls": ["https://en.wikipedia.org/wiki/Artificial_intelligence"],
        "search_objective": "What are the main applications and ethical concerns of AI?",
        "excerpts": {"max_chars_per_result": 2000},
        "full_content": False,
    }
)

print(f"Extracted focused excerpts: {len(result[0].get('excerpts', []))} excerpts")
print(f"Content preview: {result[0]['content'][:200]}...")

# 使用抓取策略获取最新内容
result = tool.invoke(
    {
        "urls": ["https://en.wikipedia.org/wiki/Quantum_computing"],
        "fetch_policy": {
            "max_age_seconds": 86400,  # 1 天缓存
            "timeout_seconds": 60,
            "disable_cache_fallback": False,
        },
        "full_content": {"max_chars_per_result": 5000},
    }
)

print(f"Content length: {len(result[0]['content'])} characters")

错误处理

工具会优雅地处理提取失败的 URL,并在结果中包含错误信息:
# 混合有效和无效的 URL
result = tool.invoke(
    {
        "urls": [
            "https://en.wikipedia.org/wiki/Artificial_intelligence",
            "https://this-domain-does-not-exist-12345.com/",
        ]
    }
)

for item in result:
    if "error_type" in item:
        print(f"Failed: {item['url']}")
        print(f"Error: {item['content']}")
    else:
        print(f"Success: {item['url']}")
        print(f"Extracted {len(item['content'])} characters")

最佳实践

  • 批量处理 URL:在单次调用中提取多个 URL,以提升性能
  • 设置内容长度限制:使用 max_chars_per_extract 控制响应大小和 token 用量
  • 处理错误:检查结果中的 error_type 字段以识别提取失败的情况
  • 异步以提升性能:在异步应用中使用 ainvoke() 以获得更好的性能
  • 元数据字段:在可用时利用 publish_date 和其他元数据提供上下文

响应格式

该工具返回字典列表,格式如下:
[
    {
        "url": "https://example.com/article",
        "title": "Article Title",
        "content": "# Article Title\n\nMain content formatted as markdown...",
        "publish_date": "2024-01-15"  # 可选,如有
    },
    # 提取失败时:
    {
        "url": "https://failed-site.com",
        "title": None,
        "content": "Error: 404 Not Found",
        "error_type": "http_error"
    }
]

API 参考

关于所有功能和配置选项的详细文档,请参阅 ParallelExtractTool API 参考或 Parallel extract 参考文档