
后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载本文以 xberg 项目中自动生成的 Dart 摘要示例summarization_abstractive_smoke.md为主线讲解如何在 Dart 应用中通过XbergBridge.extract开启基于 LLM 的抽象式abstractive文档摘要包括完整可运行的 Dart 代码、SummarizationConfig与LlmConfig的每个配置字段、API Key 解析优先级、底层提示词模板与 token 语义以及如何用仓库中的 fixture 与测试验证行为。读完本文你将能在自己的 Dart 项目中直接复刻并调优抽象式摘要流水线。摘要双后端Extractive 与 Abstractive 的定位xberg 的摘要能力由summarization后处理器提供运行于流水线的 Middle 阶段触发条件是ExtractionConfig.summarization为Some见 summarization.rs。官方指南 summarization.mdx 将策略划分为两类策略Cargo feature网络依赖质量特征延迟extractive默认summarization无完全本地从原文选择句子确定性输出典型 100 msabstractivesummarization-llmLLM provider生成全新行文可跨句子归纳取决于 provider从源码看两种后端分别对应 textrank 模块纯 Rust 的 TextRank对句子构建 TF-IDF 余弦相似度图并运行 PageRank与 llm 模块通过共享的crate::llm::text_completion::complete_text调用 LLM。summarizationfeature 随no-ort-target、wasm-target、android-target、full等 target 默认启用抽象式后端需要显式启用summarization-llm。本篇文章聚焦的正是abstractive分支——它是这篇 Dart snippet 的核心主题。Dart 示例逐行解析一次抽象式摘要的完整调用关联文档给出了一个可直接运行的 Dart 程序其完整逻辑如下import dart:io; import package:xberg/xberg.dart; import package:xberg/src/xberg_bridge_generated/frb_generated.dart show RustLib; Futurevoid main() async { await RustLib.init(); try { final input await createExtractInputFromJson(json: {kind:uri,uri:https://example.com/text/book_war_and_peace_1p.txt}); final config await createExtractionConfigFromJson(json: {summarization:{llm:{max_tokens:200,model:openai/gpt-4o-mini,temperature:0.0},max_tokens:150,strategy:abstractive}}); final result await XbergBridge.extract(input, config: config); stdout.writeln(result.results[0].summary); } finally { RustLib.dispose(); } }调用链拆解如下初始化 Rust 运行时await RustLib.init()加载 flutter_rust_bridge 生成的绑定frb_generated.dart这是所有 Dart 调用触达 Rust 核心的前提程序结束后在finally中RustLib.dispose()释放资源。构造提取输入createExtractInputFromJson传入 JSON 字符串kind: uri表示从 URL 抓取文档这里是https://example.com/text/book_war_and_peace_1p.txt测试场景下由 mock server 提供《战争与和平》第一页纯文本对应 fixture abstractive_smoke.json 中的../test_documents/text/book_war_and_peace_1p.txt。构造提取配置createExtractionConfigFromJson传入的 JSON 是本节的关键其中summarization对象包含三个字段strategy: abstractive切换摘要后端max_tokens: 150请求摘要的大致 token 预算语义详见下文llm: {model: openai/gpt-4o-mini, temperature: 0.0, max_tokens: 200}LLM 提供商与采样参数。执行提取XbergBridge.extract(input, config: config)完成抓取、解析、摘要全流程结果写入result.results[0].summary直接stdout.writeln打印。snippet 顶部的说明还强调了一个重要行为当XBERG_LLM_API_KEY或OPENAI_API_KEY未设置时该用例会被自动跳过——抽象式摘要属于运行时才确定能否执行的后端fixture 的 skip 规则也印证了这一点见 abstractive_smoke.json要求liter-llmfeature 与XBERG_LLM_API_KEY离线 CI 由确定性的 extractive 变体覆盖。配置详解SummarizationConfig 与 LlmConfig 字段说明摘要配置的 Rust 侧定义位于 summarization.rs结构如下字段类型说明strategySummaryStrategyextractive默认/abstractivesnake_case 序列化max_tokensOptionu32摘要目标长度tokenNone时后端选用默认值llmOptionLlmConfig抽象式后端专用extractive下忽略abstractive下必填LlmConfig定义于 llm.rsDart JSON 中可用的字段包括model必填liter-llm 路由格式的提供商/模型串如openai/gpt-4o-mini、anthropic/claude-sonnet-4-20250514、groq/llama-3.1-70b-versatileapi_key显式 API Key为None时回退到提供商标准环境变量base_url自定义端点 URL 覆盖timeout_secs请求超时秒默认 60smax_retries最大重试次数默认 3temperature采样温度max_tokens单次请求允许生成的 token 上限。需要注意参数取值边界同样来自 llm.rstop_p必须在0.0 ~ 1.0presence_penalty与frequency_penalty必须在-2.0 ~ 2.0。此外LlmConfig启用了deny_unknown_fields且Debug为手写实现api_key与请求头值在日志中一律以[redacted]脱敏输出。抽象式摘要的底层实现提示词模板与输入预算抽象式后端由 llm.rs 中的summarize_with_llm实现其内部逻辑对理解max_tokens语义至关重要输入截断MAX_PROMPT_INPUT_CHARS 128 * 1024字符约 32k tokens超长文档在 UTF-8 字符边界上截断truncate_input避免大文档打爆 token 预算默认目标长度DEFAULT_MAX_TOKENS 256即SummarizationConfig.max_tokens为None时使用的默认值提示词模板build_prompt要求模型“在约 N token 内用单段简洁散文总结不使用列表、Markdown 格式或标题保留命名实体、数字与原文语气”并将文本包裹在document.../document标签中最后以Summary:收尾。因此指南 summarization.mdx 对max_tokens语义的界定是extractive作为输出摘要的松散 whitespace-token 上限TextRank 选择器在即将超过上限时停止追加句子abstractive只是提示词中的“约 N token”请求提示不是 provider 的硬性上限provider 侧的请求限制由SummarizationConfig.llm.max_tokens单独控制。成功返回的摘要文本连同捕获的 usage 记录会写入ExtractedDocument.summarytoken 计数由 TextRank 侧的token_count统计usage 记录以source summarisation_abstractive追加到ExtractedDocument.llm_usage见 plugins/processor/builtin/summarization.rs。若 LLM 调用失败处理器不会静默吞掉异常而是向processing_warnings推入summarization_abstractive来源的警告若配置缺少llm字段或未启用summarization-llmfeature则直接返回校验错误提醒调用方配置不完整。输出形状DocumentSummary摘要结果序列化为DocumentSummary定义见 summary.rs字段包括{ summary: { text: The contract sets out a 3-year support agreement with quarterly billing and a fixed escalation cap of 4%., strategy: extractive, token_count: 19 } }text摘要正文纯散文strategy产生该摘要的策略extractive/abstractivetoken_count摘要的近似 token 数Optionu32未知时省略。Dart 侧通过result.results[0].summary访问即可text、strategy、token_count一一对应。环境变量与 API Key 优先级抽象式摘要必须能访问 LLM provider。API Key 的解析优先级来自指南 summarization.mdxSummarizationConfig.llm.api_key配置内显式指定XBERG_LLM_API_KEY环境变量各 provider 的标准环境变量如OPENAI_API_KEY。指南还建议多数文档场景下gpt-4o-mini、claude-3-5-haiku或google/gemini-2.0-flash能取得较好的性价比。在 Dart 测试环境中注意 e2e 用例 summarization_test.dart 只保留了对 extractive 变体的断言summary 非空且strategy.wireValue extractiveabstractive 因依赖真实 LLM 服务而由运行时 skip 机制处理因此本地离线验证时建议先用 extractive 打通链路再切换 abstractive 观察 LLM 输出。CLI 与配置文件中的等价写法摘要配置不止适用于 Dart 绑定在 CLI / server 场景下写入xberg.toml即可见 summarization_toml.md[summarization] strategy extractive max_tokens 200抽象式配置则在[summarization]下追加[summarization.llm]子表字段与 Dart JSON 一一对应[summarization] strategy abstractive max_tokens 150 [summarization.llm] model openai/gpt-4o-mini temperature 0.0 max_tokens 200适用边界与使用建议指南 summarization.mdx 明确了摘要功能的最佳使用场景需要一段话的 TL;DR 用于索引、搜索 snippet 或快速浏览需要确定性、无网络依赖的摘要时选 extractive需要流畅的、供下游 LLM 消费的抽象式行文时选 abstractive。同时有两类场景不适合直接使用本功能需要按节per-section摘要先对文档做 chunking再对每个 chunk 分别摘要需要跨文档摘要逐文档摘要后再用 LLM 后端对摘要做二次摘要。综上abstractive摘要是一条“配置即用”的链路Dart 侧只需把strategy切换为abstractive并附带一份llm配置底层 Rust 核心便负责提示词构造、输入预算控制、usage 记录与失败诊断。若要进一步深挖实现可继续阅读 text/summarization/mod.rs、text/summarization/llm.rs 与 types/summary.rs完整的可复现断言可查看 abstractive_smoke.json。赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐xberg C 绑定下的抽象式Abstractive文档摘要基于 FFI 的 LLM 摘要配置与调用实战xberg C 绑定下的抽象式Abstractive文档摘要基于 FFI 的 LLM 摘要配置与调用实战 本文以 xberg 仓库中为 C 语言生成的摘要后端AI 应用NLPXberg Dart 绑定 URI 提取实战从 URL 与本地路径抽取文档内容Xberg Dart 绑定 URI 提取实战从 URL 与本地路径抽取文档内容 本篇技术指南聚焦 Xberg 项目中 Dart 语言绑定的 URI 提取 AP后端AI 应用NLPxberg C FFI 实战用 TextRank 抽取式摘要在纯 Rust 核心上生成确定性文档摘要xberg C FFI 实战用 TextRank 抽取式摘要在纯 Rust 核心上生成确定性文档摘要 本篇基于 xberg 的 C 语言绑定讲解如何通过 F后端AI 应用NLP上一篇如何高效备考计算机考研408一站式资源整合与学习指南下一篇企业级表单解决方案ant-design-vue-pro高级表单组件全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考