6.11 --include-partial-messages - 包含部分流事件

第 6 章 · CLI 标志说明 · 第2部分:命令参考

概述#

--include-partial-messages 标志允许您在流式响应中包含部分消息。这对于实时处理、调试和监控流式输出非常有用。

基本语法#

bash
复制
claude --include-partial-messages

工作原理#

当使用流式输出时,Claude 的响应会分块发送。默认情况下,只有完整的消息才会被处理。使用 --include-partial-messages 标志后,部分消息也会被包含在输出中。

使用场景#

1. 实时监控流式输出#

bash
复制
# 监控流式输出的每个部分claude --include-partial-messages -p "生成一个长篇技术文档" # 输出会显示每个部分消息,包括不完整的句子和段落

2. 调试流式响应#

bash
复制
# 调试流式响应的生成过程claude --include-partial-messages --verbose -p "解释复杂的概念"# 可以看到响应是如何逐步生成的

3. 实时处理流式数据#

bash
复制
# 实时处理流式输出claude --include-partial-messages -p "生成代码"|whileread line;doecho"收到: $line"# 实时处理每一行done

4. 网络延迟测试#

bash
复制
# 测试流式输出的网络延迟claude --include-partial-messages -p "生成大量文本"|pv -l > output.txt # pv 会显示每秒接收到的行数

高级用法#

1. 与其他标志组合#

bash
复制
# 包含部分消息 + 详细日志claude --include-partial-messages --verbose -p "生成文档" # 包含部分消息 + JSON 输出claude --include-partial-messages --output-format json -p "分析数据" # 包含部分消息 + 限制工具claude --include-partial-messages --allowedTools "Read""Grep" -p "搜索代码"

2. 实时进度显示#

bash
复制
#!/bin/bash# 显示实时进度claude --include-partial-messages -p "生成 100 行代码"|whileIFS=read -r line;do# 计算进度PROGRESS=$(echo"$line"|grep -oE '[0-9]+'|head -1)if[ -n "$PROGRESS"];thenecho -ne "进度: $PROGRESS%\r"fidoneecho -e "\n完成"

3. 流式输出到文件#

bash
复制
# 将流式输出保存到文件claude --include-partial-messages -p "生成长文档"> output.txt # 同时显示和保存claude --include-partial-messages -p "生成文档"|tee output.txt

4. 实时过滤#

bash
复制
# 实时过滤流式输出claude --include-partial-messages -p "生成代码"|grep"def "|head -10 # 只显示函数定义

实际应用示例#

示例 1: 实时代码生成监控#

bash
复制
#!/bin/bash# monitor-code-gen.sh echo"开始生成代码..."claude --include-partial-messages -p "生成一个完整的 REST API"|whileIFS=read -r line;do# 高亮显示函数定义ifecho"$line"|grep -q "def \|class \|async def ";thenecho -e "\033[32m$line\033[0m"# 绿色# 高亮显示注释elifecho"$line"|grep -q "#";thenecho -e "\033[36m$line\033[0m"# 青色elseecho"$line"fidone

示例 2: 流式日志记录#

bash
复制
#!/bin/bash# stream-logger.shLOG_FILE="stream-$(date +%Y%m%d-%H%M%S).log"echo"开始记录流式输出到 $LOG_FILE"claude --include-partial-messages -p "生成技术文档"|whileIFS=read -r line;do# 添加时间戳TIMESTAMP=$(date'+%Y-%m-%d %H:%M:%S')echo"[$TIMESTAMP] $line"|tee -a "$LOG_FILE"doneecho"记录完成"

示例 3: 实时字数统计#

bash
复制
#!/bin/bash# word-counter.sh TOTAL_WORDS=0 claude --include-partial-messages -p "写一篇关于 AI 的文章"|whileIFS=read -r line;do# 统计当前行的字数WORDS=$(echo"$line"|wc -w)TOTAL_WORDS=$((TOTAL_WORDS + WORDS)) # 显示累计字数echo -ne "已生成字数: $TOTAL_WORDS\r" # 输出内容echo"$line"done echo -e "\n总字数: $TOTAL_WORDS"

示例 4: 流式输出分析#

bash
复制
#!/bin/bash# analyze-stream.shecho"分析流式输出..."claude --include-partial-messages -p "生成代码"|{LINES=0FUNCTIONS=0CLASSES=0whileIFS=read -r line;doLINES=$((LINES +1))ifecho"$line"|grep -q "def ";thenFUNCTIONS=$((FUNCTIONS +1))fiifecho"$line"|grep -q "class ";thenCLASSES=$((CLASSES +1))fiecho"$line"doneecho -e "\n--- 分析结果 ---"echo"总行数: $LINES"echo"函数数: $FUNCTIONS"echo"类数: $CLASSES"}

性能考虑#

1. 网络延迟#

bash
复制
# 测试网络延迟对流式输出的影响time claude --include-partial-messages -p "生成 1000 行文本" # 比较包含和不包含部分消息的性能time claude -p "生成 1000 行文本"

2. 内存使用#

bash
复制
# 监控内存使用/usr/bin/time -v claude --include-partial-messages -p "生成大量文本"2>&1|grep"Maximum resident set size"

3. 输出缓冲#

bash
复制
# 禁用输出缓冲以获得更实时的输出stdbuf -o0 claude --include-partial-messages -p "生成文本"

调试技巧#

1. 查看流式事件#

bash
复制
# 查看所有流式事件claude --include-partial-messages --verbose -p "生成代码"# 输出会包含详细的事件信息

2. 分析部分消息#

bash
复制
# 分析部分消息的结构claude --include-partial-messages -p "生成文本"|cat -A # 显示所有特殊字符

3. 比较完整和部分消息#

bash
复制
# 保存完整输出claude -p "生成文本"> full-output.txt # 保存部分输出claude --include-partial-messages -p "生成文本"> partial-output.txt # 比较差异diff full-output.txt partial-output.txt

最佳实践#

1. 选择合适的场景#

适合使用 --include-partial-messages 的场景:

  • 需要实时监控输出
  • 需要调试流式响应
  • 需要实时处理数据

不适合使用的场景:

  • 只需要最终结果
  • 网络连接不稳定
  • 输出量非常大

2. 处理部分消息#

bash
复制
#!/bin/bash# 正确处理部分消息claude --include-partial-messages -p "生成文本"|{BUFFER=""whileIFS=read -r line;doBUFFER="$BUFFER$line"# 检查是否是完整的句子ifecho"$BUFFER"|grep -q "\.$\|!\|?";thenecho"完整句子: $BUFFER"BUFFER=""fidone# 处理剩余的缓冲区if[ -n "$BUFFER"];thenecho"剩余部分: $BUFFER"fi}

3. 错误处理#

bash
复制
#!/bin/bash# 处理流式输出错误 claude --include-partial-messages -p "生成文本"|whileIFS=read -r line;do# 检查错误ifecho"$line"|grep -qi "error\|错误";thenecho"发现错误: $line">&2# 可以选择中断或继续fi echo"$line"done

4. 性能优化#

bash
复制
# 使用缓冲减少 I/O 操作claude --include-partial-messages -p "生成文本"| stdbuf -oL grep"关键词"# 只处理必要的部分claude --include-partial-messages -p "生成文本"|head -100

常见问题#

Q1: 什么时候应该使用 --include-partial-messages?#

A: 当您需要实时监控、调试或处理流式输出时使用。如果只需要最终结果,不需要使用此标志。

Q2: 包含部分消息会影响性能吗?#

A: 可能会有轻微的性能影响,因为需要处理更多的消息。但对于大多数应用场景来说,影响可以忽略不计。

Q3: 部分消息是完整的吗?#

A: 不一定。部分消息可能是不完整的句子、段落或代码片段。

Q4: 如何区分完整和部分消息?#

A: 部分消息通常不包含完整的句子或代码结构。可以通过检查句子结束符(如句号、问号、感叹号)来判断。

Q5: 可以在交互模式中使用吗?#

A: 可以。在交互模式中使用时,会实时显示部分响应。

与其他工具的集成#

1. 与 grep 集成#

bash
复制
# 实时过滤流式输出claude --include-partial-messages -p "生成代码"|grep"import "

2. 与 awk 集成#

bash
复制
# 实时处理流式输出claude --include-partial-messages -p "生成文本"|awk'{print NR": "$0}'

3. 与 sed 集成#

bash
复制
# 实时转换流式输出claude --include-partial-messages -p "生成文本"|sed's/foo/bar/g'

4. 与 jq 集成#

bash
复制
# 处理 JSON 流式输出claude --include-partial-messages --output-format json -p "生成数据"| jq '.'