跳转到主要内容
CLI 适合手边立刻处理文件;SDK 适合把解析能力放进你的程序。两条路通向同一个目标。想先看定位差异,可先回到 SoMark CLI & SDK 概览

1. 安装

SoMark 有 Python 和 JavaScript 两个实现。你用哪门语言,就装哪个包。两个包都同时提供 SDK 和 somark CLI 命令。建议先确认本机版本:Python 需要 3.10+,Node.js 需要 18+。
# Python:安装 SDK 和 CLI
pip install somark

# JavaScript:安装 SDK 和 CLI
npm install somark-js
如果 somark 命令找不到,通常不是包没装好,而是命令目录没有进 PATH。Python 用户可以先试 python -m somark.cli.main --help;Node 用户可以先试 npx somark-js --help。能跑起来,再考虑把全局命令路径整理好。
如果同时安装了 Python 和 JS 两个版本,CLI中采用的是先安装的那个,另一个版本在安装的时候碰到 CLI 已经安装的情况会跳过安装。想要看当前是什么语言的版本,可以运行 somark --help,在最后会有 [PY][JS] 的标识。

2. 认证与配置

远程解析和用量查询需要 API Key。本地 PDF 处理和 SoMarkDown 预览不需要。你可以用 CLI 保存配置,也可以在 SDK 初始化时直接传参。
如果项目里习惯用 .env,可以把 SOMARK_API_KEY=sk-your-api-key 放进去,再用 python-dotenvdotenv 或你自己的启动脚本加载。SoMark 读取的是环境变量本身,不会替你决定怎么加载 .env。另外,别把 .env 提交到 Git。
# 交互式登录,会把 API Key 写入本机配置
somark login

# 也可以直接设置、读取和查看配置
somark config set api_key sk-your-api-key
somark config get api_key
somark config list

# 临时使用时,环境变量更轻便
export SOMARK_API_KEY=sk-your-api-key
入口:somark loginsomark config ...,或在命令参数和环境变量里传配置。命令参数 / 环境变量
能力参数 / 字段说明
API Key--api-keySOMARK_API_KEY用于远程解析和用量查询。
Base URL--base-urlSOMARK_BASE_URL默认 https://somark.tech/api/v1
超时--timeoutSOMARK_TIMEOUT单位是秒。
重试次数SOMARK_MAX_RETRIES默认 2
解析并发SOMARK_PARSE_MAX_CONCURRENCY批量解析文件时的最大并发数,默认必须为 1
关闭提醒--no-warnings关闭 SoMark warning 输出;不影响命令结果、退出码和 SDK 返回对象里的 warnings 字段。
SOMARK_PARSE_MAX_CONCURRENCY 默认必须保持为 1。官方默认给所有用户的解析并发额度也是 1;只有已经明确获批更高并发的用户,才应该把它设置为 2 或更高。CLI 在检测到 2 或更高时会通过 warning 通道提示。这是本地 warning,不来自 API。
配置文件字段
能力参数 / 字段说明
API Keyapi_key保存在 ~/.somark/config.toml
Base URLbase_url保存在 ~/.somark/config.toml
超时timeout保存在 ~/.somark/config.toml
重试次数max_retries保存在 ~/.somark/config.toml
优先级:命令参数 > 环境变量 > 配置文件 > 默认值。

3. Warnings

SoMark 的 warning 分两类:API warning 和本地 warning。API warning 来自响应顶层 warnings: List[str] 字段,和 codemessage 同级。本地 warning 来自 SDK 或 CLI 自己的运行判断,例如批量解析并发设置超过默认额度。 CLI 默认会显示 SoMark warning。需要安静输出时,用全局参数 --no-warnings
CLI
somark --no-warnings parse ./document.pdf
--no-warnings 只关闭 warning 的显示,不改变命令结果、退出码,也不会删除 SDK 返回对象里的 warnings 字段。 SDK 默认通过语言原生 warning 通道显示 warning,同时把 warning 字符串保留在返回对象的 warnings 字段中。空数组表示没有 warning。
import warnings
from somark import SoMark, SoMarkWarning

# 如果你不希望 Python 程序显示 SoMark warning,可以用 warnings 库过滤
warnings.filterwarnings("ignore", category=SoMarkWarning)

client = SoMark(api_key="sk-your-api-key")
response = client.parser.parse(file="./document.pdf")

print(response.warnings)  # list[str]

4. 解析

解析是 SoMark SDK + CLI 的主线任务。你把文件交给 SoMark,它把结果还给你:Markdown、JSON,或者 ZIP 下载地址。默认输出格式是 md,也就是 API 里的 markdown 这里有两种用法:同步解析和异步解析。 同步解析适合“我现在就要结果”的场景。CLI 或 SDK 会把文件发到 /parse/sync,然后等服务端把结果返回。代码少,心智负担低,适合单个文件、脚本、调试和中小文档。缺点也很直白:文件越大,你等得越久。 异步解析适合大文件、批处理和后台任务。你先把文件发到 /parse/async,马上拿到一个 task_id;之后用 task_id/parse/async_check 查进度。CLI 的 --wait 和 SDK 的 task.wait() 本质上就是帮你定时轮询。它更适合放进队列、定时任务或服务端流程里。 同步解析流程 一次请求直接拿结果。适合脚本、调试和中小文件。
异步解析流程 先提交任务,再用 task_id 查状态。适合大文件、批处理和后台队列。

4.1 同步解析

同步解析最适合先把流程跑通:给一个文件,等结果,保存到本地。你可以先从 md 开始,确认内容质量,再按需加 jsonzip 或页面特征配置。
# 单格式不传 --out:结果写到 stdout,适合管道和脚本
somark parse ./document.pdf --formats md

# 安静模式:关闭 SoMark warning 输出
somark --no-warnings parse ./document.pdf --formats md

# 单格式写入指定文件;父目录必须已经存在
somark parse ./document.pdf --formats md --out ./document.md

# 多格式必须写入已存在目录;会生成 parsed/document.md 和 parsed/document.json
mkdir -p ./parsed
somark parse ./document.pdf --formats md,json --out ./parsed/

# 多个文件用空格分隔;批量输出目录也必须提前创建
mkdir -p ./parsed
somark parse ./a.pdf ./b.pdf --out ./parsed/

# 也可以从清单读取,每行一个文件路径
mkdir -p ./parsed
somark parse --file-list ./files.txt --out ./parsed/

# 输出 Markdown,并打开标题层级识别和 HTML 表格
somark parse ./paper.pdf --formats md --title-levels --table-fmt html
入口:somark parse [files...]
能力参数 / 字段说明
文件[files...]一个或多个待解析文件路径。多个文件用空格分隔。
文件清单--file-list读取一个文本文件,每个非空行是一个文件路径;相对路径按当前运行目录解析。
输出格式--formats支持 md/markdownjsonzip
输出目标--out输出文件路径,或已存在目录。CLI 不会自动创建目录。
图片格式--image-fmturlbase64none
公式格式--formula-fmtlatexmathmlascii
表格格式--table-fmtmarkdownhtmlimage
化学结构式--cs-fmt当前支持 image
标题层级--title-levels识别标题级别。
文字跨页--cross-page-text合并跨页文字。
表格跨页--cross-page-table合并跨页表格。
文中图--no-inline-image关闭文中图。
表中图--no-table-image关闭表中图。
图片理解--no-image-understanding关闭图片理解。
页眉页脚--keep-header-footer保留页眉页脚。
返回处理--out 只表示输出目标,不表示“帮我创建目录”,也不表示“把文件名当模板”。这样脚本里更容易预测结果。
场景行为
单文件单格式,无 --out输出到 stdout。
多格式,无 --out报错;多格式需要 --out 指向已存在目录。
--out 是已存在目录按输入文件 stem 生成 .md.json.zip
--out 是文件路径只允许单格式;父目录必须已经存在。
--out 是不存在目录报错;请先自己创建目录。
ZIP 输出响应里是下载 URL;保存为 .zip 时,会下载这个 URL 指向的内容并写入文件。
多文件执行
能力参数 / 字段说明
并发限制环境变量配置默认并发为 1;配置方式见第 2 节“认证与配置”。
并发提醒warning 通道并发配置为 2 或更高时,会通过本地 warning 提示官方默认额度是 1
进度与结果CLI 输出显示总文件数、当前进度、每个文件是否存在、状态、用时和输出位置。
缺失文件missing 状态CLI 不发送缺失文件,继续处理其他文件;最终退出码为 1

4.2 异步解析

异步解析适合大文件和批处理。先提交任务,拿到 task_id;稍后轮询,直到成功或失败。推荐轮询间隔 3 到 5 秒,别太频繁,服务器也需要安静工作。
# 1. 提交任务,只拿 task_id,不等待结果
somark parse ./large.pdf --async --formats md,json

# 一次提交多个文件,每个文件都会得到独立的 task_id
somark parse ./a.pdf ./b.pdf --async --formats md

# 也可以从清单读取
somark parse --file-list ./files.txt --async --formats md

# 2. 等待已有任务完成,并把结果保存到本地
somark parse --task-id task_xxx --wait --out ./large.md

# 3. 只查一次状态,不阻塞等待
somark parse --task-id task_xxx
入口:somark parse [files...] --async 提交任务;somark parse --task-id task_xxx 查询任务。提交任务:somark parse [files...] --async
能力参数 / 字段说明
文件[files...]提交任务时必填;多个文件用空格分隔。
文件清单--file-list读取一个文本文件,每个非空行是一个文件路径;相对路径按当前运行目录解析。
输出格式--formats与同步解析一致。
多文件异步提交时,每个文件会得到独立的 task_id。CLI 会显示每个文件的存在性、提交状态、用时和任务 ID。查询 / 等待任务:somark parse --task-id task_xxx
能力参数 / 字段说明
任务 ID--task-id查询已有任务。
等待开关--wait阻塞等待完成。
输出目标--out等待完成后保存结果;规则与同步解析一致。

5. 用量查询

用量查询会返回当前 API Key 的剩余额度和控制台地址。它也可以顺手检查 API Key 是否有效。
# 默认用表格显示,适合人眼查看
somark usage

# JSON 更适合脚本读取
somark usage --format json

# text 输出更轻,适合日志
somark usage --format text
入口:somark usage命令参数
能力参数 / 字段说明
输出格式--formatCLI 展示格式,默认 table。支持textjsontable
输出字段
能力参数 / 字段说明
付费剩余页数输出字段所有未过期付费套餐剩余页数。
今日免费剩余输出字段今日免费额度。
本月免费剩余输出字段本月免费额度。
控制台地址输出字段SoMark 控制台链接。

6. SoMarkDown 服务

SoMarkDown 服务会在本地启动一个预览服务器,用浏览器打开 .md.smd 文件。它不需要 API Key,也不消耗额度。底层渲染能力来自 SoMarkAI/SoMarkDown,需要看语法和渲染器细节时可以直接跳过去。
# 预览 SoMarkDown 文件,并自动打开浏览器
somark preview ./document.smd

# 指定本地服务监听地址和端口
somark preview ./document.md --host 127.0.0.1 --port 7878

# 只启动服务,不自动打开浏览器
somark preview --no-open
JavaScript SDK 还额外导出 SoMarkDown。它不启动本地 HTTP 服务,直接把 Markdown / SoMarkDown 字符串渲染成 HTML;适合在 Node 服务、自定义前端或小工具里接入渲染结果。
JavaScript
import { SoMarkDown } from 'somark-js'

const renderer = new SoMarkDown()
const html = renderer.render('Inline: $e^{i\\pi} + 1 = 0$')

console.log(html)
入口:somark preview [file]
能力参数 / 字段说明
预览文件[file]支持 .md.smd
绑定地址--host默认 127.0.0.1
端口--port默认 7878
自动打开浏览器--no-open关闭自动打开浏览器。
输出字段
能力参数 / 字段说明
服务地址输出字段本地服务地址。
文件地址输出字段带文件参数的预览地址。
停止服务:在终端按 Ctrl+C。

7. PDF 处理

PDF 处理目前提供本地 PDF 转图片。它适合做预览图、调试页面布局,或者把 PDF 页面交给别的视觉处理流程。Python 侧的本地 PDF 能力基于 SoMarkAI/SoPDF
# 把 PDF 每一页转成图片,输出到当前目录
somark pdf toimg ./document.pdf

# 指定输出目录和分辨率
somark pdf toimg ./document.pdf --out ./pages --dpi 200

# 自定义图片文件名
somark pdf toimg ./document.pdf --format "{name}-{n}.png"
入口:somark pdf toimg <file>
能力参数 / 字段说明
PDF 文件<file>待转换 PDF。
输出目录--out默认 ./
文件名模板--format默认 {name}.page-{n}.png
分辨率--dpi默认 150
输出字段
能力参数 / 字段说明
结果文件输出字段转换成功后的图片路径列表。
错误信息输出字段本地依赖缺失或转换失败时返回。

8. Doctor 自动修复

Doctor 用来检查安装状态、网络、API Key 和本地预览资源。它是命令行里的体检表,不治百病,但能发现不少低级事故。
CLI
# 跑一遍基础诊断:配置、网络、预览资源都看一眼
somark doctor

# 尝试修复 SoMarkDown 预览资源
somark doctor fix

# 只检查网络连通性
somark doctor ping
Doctor 是 CLI 维护命令,SDK 不提供对应资源。写程序时通常不需要它;遇到命令跑不起来、预览打不开、网络不确定时,再请它出场。 更底层的接口、字段和响应结构,请看 API Reference。它由同一套接口规范生成,少一点手写,多一点可靠。