在终端中显示Markdown | AI生成和翻译

Home 2026.04

问题:如何在终端CLI工具中正确显示Markdown格式的AI响应(例如**加粗**- 列表)?我是否可以通过系统提示词来让LLM停止使用Markdown语法?

回答:

你有两种主要方法——在终端中精美地渲染Markdown,或者通过系统提示词从源头抑制它。以下是两种方法的完整分析。


方法1:在终端中渲染Markdown

最适合此用途的Python库是Rich。Rich可以渲染Markdown,并能合理地将格式转换为终端显示——包括标题、加粗、斜体、列表以及带有完整语法高亮的代码块。

安装Rich

pip install rich

将LLM响应渲染为Markdown

from rich.console import Console
from rich.markdown import Markdown

console = Console()

# 假设这是你的LLM响应字符串
llm_response = """
# 摘要

以下是关键要点:

- **要点一**: 非常重要
- **要点二**: 同样重要

```python
print("Hello World")

”””

md = Markdown(llm_response) console.print(md)


你也可以直接从命令行使用Markdown类——例如:`python -m rich.markdown README.md`

### 将LLM输出管道传输到`rich-cli`

如果你使用的是输出管道的CLI工具,你可以从另一个进程管道传输输出:`cat response.md | rich - --markdown --force-terminal`

---

## 方法2:通过系统提示词移除Markdown

是的,你完全可以通过指令让LLM仅以纯文本格式响应,而不使用任何Markdown语法。这是一种非常常见且有效的解决方案。

### 有效的系统提示词措辞

你是一个运行在终端CLI工具中的助手。 在你的回答中不要使用任何Markdown格式。 不要用加粗(文本)、斜体(文本)、标题(# 文本)、 项目符号(-)以及反引号代码块。 仅使用纯文本回答。


### 此方法有效的理由(及注意事项)

许多开发者都面临这个确切的问题——LLM倾向于默认使用Markdown格式。诸如在系统提示词开头加入“以纯文本无格式的方式回答”等技术可能有所帮助,但效果不一。

最近,在"o"系列模型中,OpenAI引入了默认设置,禁止生成带有Markdown格式的响应,除非明确给出“Formatting re-enabled”指令来重新启用此行为。

一个在实践中效果良好、明确且有力的系统提示词示例(源自实际使用):

用户将向你提问。 请仅用纯文本回答——不要用markdown、不要用代码块、不要用项目符号(-)、不要用加粗或斜体语法。 你的输出将直接打印到终端。


---

## 方法3:通过编程方式移除Markdown(备选方案)

如果LLM偶尔仍会泄露Markdown语法,你可以使用像`markdownify`这样的库或简单的正则表达式清理器来移除它:

```python
import re

def strip_markdown(text: str) -> str:
    text = re.sub(r'\*\*(.*?)\*\*', r'\1', text)   # 加粗
    text = re.sub(r'\*(.*?)\*', r'\1', text)         # 斜体
    text = re.sub(r'#{1,6}\s?', '', text)            # 标题
    text = re.sub(r'`{1,3}.*?`{1,3}', '', text, flags=re.DOTALL)  # 代码
    text = re.sub(r'^\s*[-*]\s+', '', text, flags=re.MULTILINE)    # 项目符号
    return text.strip()

总结——应使用哪种方法?

方法 最适用于
Rich(渲染Markdown) 你想要带有颜色和结构的精美格式终端输出
系统提示词(抑制Markdown) 你想要原始纯文本,不要装饰
编程方式移除 作为系统提示词不完全可靠时的安全备用方案

对于CLI工具,最稳健的解决方案是结合使用两种方法:使用系统提示词以最小化Markdown输出,并使用rich来渲染仍出现的任何结构化文本。

参考文献:


Back Donate