File size: 2,112 Bytes
fbd9d3d bb96b1a fbd9d3d cc826a1 fbd9d3d bb96b1a fbd9d3d bb96b1a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | """
内容提取插件 MCP工具定义
"""
from app.mcp.decorators import mcp_tool
from pydantic import BaseModel, Field
from typing import Optional
from .core import ContentExtractorCore
class ExtractInput(BaseModel):
"""内容提取工具输入参数"""
url: str = Field(description="内容链接(目前支持小红书、微博)")
include_ocr: bool = Field(
default=True,
description="是否对图片进行OCR识别"
)
cookies: Optional[dict] = Field(
default=None,
description="Cookie(可选,用于应对反爬)"
)
class ExtractOutput(BaseModel):
"""内容提取工具输出结果"""
success: bool = Field(description="操作是否成功")
title: str = Field(description="内容标题")
content: str = Field(description="正文内容")
images_text: str = Field(description="图片OCR识别的文本")
source_type: str = Field(description="内容来源类型")
error: Optional[str] = Field(default=None, description="错误信息(如果失败)")
# 全局核心逻辑实例
_core: ContentExtractorCore = None
def _get_core() -> ContentExtractorCore:
"""获取核心逻辑实例"""
global _core
if _core is None:
_core = ContentExtractorCore()
return _core
@mcp_tool(
name="content-extract",
title="内容提取",
description="从支持的链接中提取内容,包括标题、正文和图片文字(OCR)",
annotations={
"readOnlyHint": False,
"destructiveHint": False,
}
)
async def extract_content(params: ExtractInput) -> ExtractOutput:
"""
从链接中提取内容
支持的平台:
- 小红书:提取笔记标题、正文和图片中的文字
- 微博:提取微博正文、标题和图片中的文字
Args:
params: 包含URL和配置参数
Returns:
ExtractOutput: 提取的内容
"""
core = _get_core()
result = await core.extract(
url=params.url,
include_ocr=params.include_ocr,
cookies=params.cookies
)
return ExtractOutput(**result)
|