pop123-ux/promptlint

GitHub: pop123-ux/promptlint

promptlint 是一个零依赖的 LLM prompt 静态检查工具,用于在发布前自动发现 prompt 注入风险、缺失 token 限制、硬编码密钥及 prompt 反模式等问题。

Stars: 1 | Forks: 0

# 🧹 promptlint **用于你的 LLM prompt 的 ESLint。** 你会对代码进行 lint。那为什么不对你代码发送给模型的 prompt 这么做呢? `promptlint` 是一个微型的、零依赖的 linter,它能在发布前捕获 **prompt 注入风险、缺失的 token 限制、硬编码的密钥以及 prompt 反模式**。 ![License](https://img.shields.io/badge/license-MIT-green) ![Python](https://img.shields.io/badge/python-3.8%2B-blue) ![Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen) ![Pre-commit](https://img.shields.io/badge/pre--commit-ready-orange)
## 为什么? Prompt 现在就是代码——但却没有工具来检查它们。同样的字符串在被发布时,往往直接拼接了用户输入(你好,prompt 注入),没有设置 `max_tokens`(你好,天价账单),而且往上两行还硬编码了一个 `sk-...` 密钥。`promptlint` 正是为此而生的 linter。 ``` $ promptlint app.py app.py:6:1: PL003 error Hardcoded API key/secret — move it to an environment variable. app.py:11:1: PL001 warning Untrusted input is interpolated into a prompt — delimit or validate it. app.py:19:1: PL002 warning LLM call has no token limit (max_tokens) — set one to cap cost. app.py:20:1: PL005 info Hardcoded model id — centralize it in config so models are easy to swap. promptlint: 4 issue(s) in 1 file(s) — 1 error, 2 warning, 1 info ``` ## 安装 ``` pip install llm-promptlint ``` 或者直接从源码运行(无依赖,纯标准库): ``` git clone https://github.com/pop123-ux/promptlint.git cd promptlint && python -m promptlint path/to/your/code ``` ## 用法 ``` promptlint . # lint the current project promptlint app.py prompts/ # lint specific files/dirs promptlint . --strict # fail on warnings too (great for CI) promptlint . --select PL001,PL003 # only these rules promptlint . --ignore PL005 # everything except this rule promptlint --list-rules # show all rules ``` 当发现任何 `error`(或在开启 `--strict` 时发现任何问题)时,退出代码为 **1**,因此可以直接无缝接入 CI 和 git hook。 ### 屏蔽单行 ``` api_key = "sk-..." # promptlint: disable=PL003 prompt = f"..." # promptlint: disable (silences all rules on this line) ``` ## 规则 | 代码 | 严重程度 | 捕获内容 | |------|----------|---------| | **PL001** | warning | 不受信任的输入(`user_input`、`request.*`、`argv` 等)被插值/拼接进 prompt 中——**prompt 注入风险**。 | | **PL002** | warning | LLM 补全调用 **没有 `max_tokens`**——成本和输出不受限制。 | | **PL003** | error | **硬编码的 API key/secret**(`sk-`、`sk-ant-`、`AIza…`、`ghp_…` 等)。 | | **PL004** | warning | 长 prompt 但 **没有输出格式指令**(没有 JSON/schema/结构)。 | | **PL005** | info | **硬编码的 model id**(`gpt-…`、`claude-…`、`gemini-…`)而不是使用配置。 | | **PL006** | info | 包含 `messages[]` 且有用户角色,但 **没有系统角色**。 | 设计上追求高信噪比——它只标记那些实际发布时会造成问题的错误,而不是风格上的噪音。支持 Python、JS/TS 以及任何文本/prompt 文件。 ## 作为 pre-commit hook 使用 添加到你的 `.pre-commit-config.yaml` 中: ``` repos: - repo: https://github.com/pop123-ux/promptlint rev: v0.1.0 hooks: - id: promptlint ``` 现在每次提交都会被扫描,不安全的 prompt 将无法混入其中。 ## 在 CI (GitHub Actions) 中使用 ``` - uses: actions/setup-python@v5 with: { python-version: "3.x" } - run: pip install llm-promptlint - run: promptlint . --strict ``` ## 路线图 - 通过 `pyproject.toml` (`[tool.promptlint]`) 进行配置 - 更多规则:temperature 合理性、retry/backoff、prompt 中的 PII、system prompt 泄漏 - 用于仪表盘的 JSON 输出 (`--format json`) - 针对单条规则的 auto-fix 建议 欢迎提交 PR——请参阅 [贡献指南](CONTRIBUTING.md)。特别欢迎提出新规则的创意。 ## 许可证 [MIT](LICENSE)
由 [**@pop123-ux**](https://github.com/pop123-ux) 构建 · Lint 你的 prompt。自信地发布。⭐
标签:DLL 劫持, LNA, SOC Prime, 代码质量检查, 大语言模型, 开发工具, 文档结构分析, 逆向工具, 错误基检测, 静态代码分析