""" 文档合并拆分核心逻辑 - 供 mcp.py 和 api.py 共用 """ from typing import List, Optional from app.utils.url_input_handler import resolve_text_content, encode_text_to_base64 async def do_merge( files_base64: Optional[List[str]], files_url: Optional[List[str]], output_format: str = "text", ) -> dict: """合并多个文档。""" contents = [] # 处理 base64 输入 if files_base64: for f_b64 in files_base64: try: content, source = await resolve_text_content(f_b64, None) contents.append(content) except ValueError as e: return {"success": False, "message": f"解码失败: {e}"} # 处理 URL 输入 if files_url: for url in files_url: try: content, source = await resolve_text_content(None, url) contents.append(content) except ValueError as e: return {"success": False, "message": f"URL下载失败 ({url}): {e}"} if not contents: return {"success": False, "message": "没有提供任何文件"} separator = "\n\n---\n\n" if output_format == "markdown" else "\n\n" merged = separator.join(contents) output_base64 = encode_text_to_base64(merged) return { "success": True, "output_base64": output_base64, "message": f"已合并 {len(contents)} 个文档", } async def do_split( content_base64: Optional[str], content_url: Optional[str], split_by: str = "line", chunk_size: int = 100, ) -> dict: """拆分文档。""" try: content, source = await resolve_text_content(content_base64, content_url) except ValueError as e: return {"success": False, "message": f"内容获取失败: {e}"} chunks = [] if split_by == "line": chunks = content.split("\n") elif split_by == "paragraph": chunks = content.split("\n\n") elif split_by == "chunk": chunks = [content[i : i + chunk_size] for i in range(0, len(content), chunk_size)] chunks_base64 = [encode_text_to_base64(c) for c in chunks] return { "success": True, "chunks_base64": chunks_base64, "message": f"已拆分为 {len(chunks)} 个片段", }