☰
humanize-text源码深度解析:AI文本拟人化的多提供商LLM客户端与跨引擎翻译实现分析
2026/9/29 5:26:06 网站建设 项目流程

humanize-text源码深度解析:AI文本拟人化的多提供商LLM客户端与跨引擎翻译实现分析

【免费下载链接】humanize-textOpen-source text humanization pipeline with every intermediate step published. Two LLM rewrites at temp 1.3, then two hops across different NMT engines. Four documented methodologies you can read, modify, and run locally.项目地址: https://gitcode.com/gh_mirrors/hu/humanize-text

humanize-text 是一个开源的AI 文本拟人化流水线:两段 LLM 拟人化改写(温度 1.3)+ 两次跨引擎机器翻译,每一步中间产物都完整输出,任何人都可以读懂、修改并在本地运行。它的核心亮点不在"调用 LLM 改写"——谁都会做——而在多提供商 LLM 客户端与跨引擎翻译链的工程设计。本文带你深入src/standard/源码,看懂这两块关键实现。

一、四步流水线:一段 AI 文本如何"去AI化" 🔄

整个标准流水线(Standard Pipeline)是一条固定的 4 步链,由 src/standard/pipeline.py 编排:

步骤引擎方向作用
1LLM(temp 1.3)英文 → 中文拟人化改写 + 语言切换
2LLM(temp 1.3,携带第 1 步历史)中文 → 日语二次拟人化改写
3Google Translate日语 → 芬兰语一轮翻译:远距离语言结构破坏
4Niutrans芬兰语 → 英文二轮翻译:跨引擎重建

这条链的设计逻辑是语言距离最大化:英→中(不同语系、无共享文字)→ 日(共享汉字但语法迥异)→ 芬兰语(SOV→SVO,黏着语,强制深度重组)→ 英。每一步都让文本结构被重构一次,任何单一引擎留下的"指纹"都无法存活。完整原理见 docs/pipeline.md。

二、多提供商 LLM 客户端:一套代码接 5 家 LLM 🔌

Step 1 和 Step 2 的 LLM 调用全部收敛在 src/standard/llm_client.py 中。它没有为每家服务商写一套 SDK 代码,而是只依赖一个事实:这些服务商都提供 OpenAI 兼容的/chat/completions接口。

2.1 提供商默认值表:配置即代码

模块顶部的PROVIDER_DEFAULTS字典是整个客户端的"注册表":

Provider默认 Base URL默认模型
deepseek(默认)api.deepseek.comdeepseek-chat
openrouteropenrouter.ai/api/v1deepseek/deepseek-chat
atlascloudapi.atlascloud.ai/v1qwen/qwen3.5-flash
orcarouterapi.orcarouter.ai/v1deepseek/deepseek-chat
litellm(走 LiteLLM SDK,支持 100+ 提供商)deepseek/deepseek-chat

2.2 配置解析优先级:环境变量 > TOML > 默认值

resolve_llm_config()函数把三层配置合并成最终运行参数,优先级从高到低是:

  1. 环境变量:LLM_PROVIDER、LLM_BASE_URL、LLM_MODEL、LLM_API_KEY(以及DEEPSEEK_API_KEY、OPENROUTER_API_KEY等专属变量)
  2. TOML 配置文件:config/config.example.toml 中[llm]段,且优先于旧版[pipeline]段(向后兼容)
  3. 提供商内置默认值:来自PROVIDER_DEFAULTS

这套分层设计的好处是:本地开发用 TOML,CI/容器化部署直接注入环境变量即可,无需改文件。所有分支路径在 tests/test_llm_client.py 中都有对应单测覆盖(约 15 个用例,无需联网)。

2.3 请求发送:URL 归一化 + 可选请求头

chat_completions()负责真正的 HTTP 调用,两个细节值得注意:

  • normalize_chat_completions_url()会自动补全/chat/completions后缀,用户填https://api.deepseek.com或完整路径都能工作;
  • 支持http_referer/app_title附加请求头(OpenRouter 的站点署名机制),由extra_headers透传。

2.4 指数退避重试:只对"瞬时错误"重试

网络调用统一套上 src/standard/retry.py 的retry_with_backoff()。它的判断逻辑很克制:

  • 只重试:408/429/502/503/504 状态码、超时、连接错误(TRANSIENT_STATUS集合定义)
  • 不重试:401/400/422 这类客户端错误——API Key 错了重试 100 次也没用
  • 延迟按base_delay × 2^attempt指数增长,封顶 30 秒,默认最多 3 次重试

LLM 拟人化改写本身的提示词构造在 src/standard/llm_rewriter.py:系统提示为"专业的文案改写专家,精通多语言本地化",Step 2 会把 Step 1 的输入/输出作为历史对话注入,防止第二轮改写"还原"第一轮已经打破的句式——这也是"带历史的两段改写"比单次改写效果更好的关键。

三、跨引擎翻译实现:两个引擎接力,不留指纹 🌐

Step 3 与 Step 4 的实现都在 src/standard/translators.py,两个引擎、两种完全不同的架构。

3.1 Google Translate:自动分块处理长文本

google_translate()基于deep_translator库。Google 的接口有约 5000 字符的长度限制,源码的解法是_split_text():按句子边界切分(正则(?<=[.!?。!?])在中英文句尾标点处断句),逐块翻译后再拼接。这样既绕开长度限制,又不会把一个句子拦腰截断,保证翻译质量。

3.2 Niutrans:第二轮翻译的"异质引擎"

niutrans_translate()通过httpx直连 Niutrans API。它的价值不在于翻译能力,而在于异质性——与 Google 不同的 NMT 架构和训练数据,意味着芬兰语→英文这最后一跳会再次以"另一套语法逻辑"重组句子。配合 Step 3 的 Google 翻译,两跳翻译形成复合结构变化:单一引擎的指纹在第一跳被破坏,第二跳再叠加一层无法逆向还原的重构。

响应解析也做了防御:优先取tgt_text字段,遇到error_msg则抛出带明确信息的异常,而不是返回空字符串静默失败。

3.3 参数细节:为什么是温度 1.3 和芬兰语?

参数取值原因
temperature1.3高于默认 1.0,增加创造性变化;超过 1.5 会产生不连贯文本
中间语言fi(芬兰语)黏着语形态强制深度重组词形与从句边界;可配置为de/ko等
历史轮数1 轮Step 2 看到 Step 1 上下文;测试中更多轮数未提升质量

💡 标准流水线之上还有更深的玩法:本仓库src/methodologies/下提供了第 3 种方法论——检测引导的反馈回路(Detection-guided feedback loop),先用困惑度、分类器置信度、节奏多样性等信号定位"最像 AI"的片段,再定向精化,原理详见 docs/techniques.md。

四、动手跑一遍:三步本地运行 🚀

pip install -r requirements.txt cp config/config.example.toml config/config.toml # 填入 API key python -m src.standard.pipeline --input draft.txt

在 config/config.example.toml 中填入deepseek_api_key和niutrans_api_key即可。加上--verbose可查看每一步引擎、方向与字符数,--json则输出包含全部中间步骤的完整追踪——这正是本项目"每一步中间产物都公开"的承诺。真实样例的完整四步追踪见 examples/showcase/。

五、总结:值得借鉴的工程细节 ✅

humanize-text 用不到千行的核心代码展示了几个可迁移的设计模式:

  1. 兼容层而非 SDK 层:识别所有 LLM 服务商共同的 OpenAI 兼容接口,用一张默认值表 + 配置解析函数接入 5 家提供商,新增提供商只需加一行字典;
  2. 分层配置解析:环境变量 > 配置文件 > 内置默认,兼顾本地开发与生产部署;
  3. 克制的重试策略:只对瞬时错误指数退避重试,快速失败比无效重试更省钱;
  4. 异质引擎组合:跨引擎翻译不是为了"翻译得准",而是让结构破坏复合叠加——这是整条流水线最反直觉、也最核心的一招。

想深入更多细节,可以从 docs/api-reference.md 与 docs/configuration.md 继续读起。

【免费下载链接】humanize-textOpen-source text humanization pipeline with every intermediate step published. Two LLM rewrites at temp 1.3, then two hops across different NMT engines. Four documented methodologies you can read, modify, and run locally.项目地址: https://gitcode.com/gh_mirrors/hu/humanize-text

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询