Skip to main content

Real-time parser for LLM streaming responses with tag-based content extraction

Project description

LLM Stream Parser

Tests PyPI Python License

一个用于实时解析大语言模型(LLM)流式响应的 Python 库,支持基于 XML 标签提取内容。

📦 安装

使用 pip 安装

pip install llm-stream-parser

使用 uv 安装

uv add llm-stream-parser

🚀 快速开始

解析自定义标签

解析器会自动处理标签和内容被分割到多个 chunk 的情况:

from llm_stream_parser import StreamParser

# 定义自定义标签(支持多个标签)
custom_tags = {
    "analysis": "分析",
    "calculation": "计算",
    "summary": "总结"
}

parser = StreamParser(tags=custom_tags)

# 模拟标签内容被切割成多个 chunk 的场景
chunks = [
    "<anal",           # 标签被分割
    "ysis>这是分析内容的第一部分",
    ",这是第二部分</a",
    "nalysis>",        # 标签闭合
    "<calcu",
    "lation>计算过程:1+1=",
    "2</calc",
    "ulation>",
    "<sum",
    "mary>总结内容在",
    "多个chunk中</summar",
    "y>"
]

# 逐块解析
messages = []
for chunk in chunks:
    messages.extend(parser.parse_chunk(chunk))

# 处理流结束后的剩余内容
final = parser.finalize()
if final:
    messages.append(final)

# 输出结果
for msg in messages:
    print(f"{msg.step_name}: {msg.content}")

输出

分析: 这是分析内容的第一部分,这是第二部分
计算: 计算过程:1+1=2
总结: 总结内容在多个chunk中

实时流式输出(enable_tags_streaming)

启用 enable_tags_streaming 后,标签内的内容会实时输出,待标签闭合再输出一条完整内容,而不是等待标签闭合:

from llm_stream_parser import StreamParser

# 启用标签内内容的实时流式输出
parser = StreamParser(
    tags={"think": "思考中", "tools": "工具调用"},
    enable_tags_streaming=True  # 关键参数:启用标签内内容流式输出
)

# 模拟 LLM 流式输出
chunks = [
    "<think>让我思考",
    "一下...",
    "正在分析",
    "问题...</think>",
    "需要调用工具:<tools>",
    "<get_weather>",
    "北京",
    "</get_weather>",
    "</tools>",
    "这是最终答案。"
]

for chunk in chunks:
    for msg in parser.parse_chunk(chunk):
        # is_complete=False 表示标签未闭合(流式输出中)
        print(f"{msg.step_name}: {msg.content} [标签闭合: {msg.is_complete}]")

输出

思考中: 让我思考 [标签闭合: False]
思考中: 一下... [标签闭合: False]
思考中: 正在分析 [标签闭合: False]
思考中: 让我思考一下...正在分析问题... [标签闭合: True]
回答: 需要调用工具: [标签闭合: True]
工具调用: <get_weather>北京 [标签闭合: False]
工具调用: <get_weather>北京</get_weather> [标签闭合: True]
回答: 这是最终答案。 [标签闭合: False]

集成方法 process_llm_stream

直接对接 llm 异步流式输出

import asyncio
from llm_stream_parser import process_llm_stream

async def main():
    # 模拟 LLM 流式响应
    async def mock_stream():
        yield "让我分析一下..."
        yield "<analysis>这是分析内容</analysis>"
        yield "这是最终答案。"

    # 封装异步流式输出
    async for msg in process_llm_stream(
            mock_stream(),
            tags={"analysis": "分析"},
            enable_tags_streaming=True
    ):
        print(f"{msg.step_name}: {msg.content} [标签闭合: {msg.is_complete}]")

asyncio.run(main())

输出

回答: 让我分析一下... [标签闭合: False]
回答: 让我分析一下... [标签闭合: True]
分析: 这是分析内容 [标签闭合: True]
回答: 这是最终答案。 [标签闭合: False]

🎯 使用场景

1. 展示模型执行多步骤任务时的状态

parser = StreamParser(tags={
    "analysis": "分析",
    "planning": "规划",
    "execution": "执行",
    "summary": "总结"
})

# LLM 输出包含多个标签,可以按步骤实时展示行为

2. 基于 xml 的工具调用解析

parser = StreamParser(tags={
    "tools": "工具调用",
})

# LLM 输出: "我需要查询天气。<tool>get_weather(city='北京')</tool>"
# 解析后可以分别处理工具调用和结果

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_stream_parser-0.1.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_stream_parser-0.1.0-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file llm_stream_parser-0.1.0.tar.gz.

File metadata

  • Download URL: llm_stream_parser-0.1.0.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for llm_stream_parser-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b29835cbcff1a3ad6a7d06ac3187f1db2bed89147eda974c3e905e6c8d1ffe53
MD5 9014c5eed33ea707da584277913c69bc
BLAKE2b-256 576533cb53957f9633dd7681af9948249ba414aa2bac4d7ae50132fa6d773833

See more details on using hashes here.

Provenance

The following attestation bundles were made for llm_stream_parser-0.1.0.tar.gz:

Publisher: publish.yml on AriesYB/llm-stream-parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file llm_stream_parser-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for llm_stream_parser-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5a7e76d80237538ece5c1abb8bfbcf218720110ebc7122932670e7945d527cd0
MD5 f76e8369c49b216cd08b2915f2428429
BLAKE2b-256 99c0b87c528b67b5a82d96f2351c9b3a518042e1f1b572d4d77803ef5cad65ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for llm_stream_parser-0.1.0-py3-none-any.whl:

Publisher: publish.yml on AriesYB/llm-stream-parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page