feat(longtext): implement long text splitting strategy with Markdown awareness

This commit is contained in:
Dong_master
2026-03-09 01:39:25 +08:00
parent 40c7b0f731
commit c92d3d7ad7
4 changed files with 284 additions and 24 deletions
+16 -3
View File
@@ -22,10 +22,13 @@ class LongTextProcessStage(stage.PipelineStage):
"""
strategy_impl: strategy.LongTextStrategy | None
is_split: bool
async def initialize(self, pipeline_config: dict):
config = pipeline_config['output']['long-text-processing']
self.is_split = config['strategy'] == 'split'
if config['strategy'] == 'none':
self.strategy_impl = None
return
@@ -90,8 +93,18 @@ class LongTextProcessStage(stage.PipelineStage):
len(str(query.resp_message_chain[-1]))
> query.pipeline_config['output']['long-text-processing']['threshold']
):
query.resp_message_chain[-1] = platform_message.MessageChain(
await self.strategy_impl.process(str(query.resp_message_chain[-1]), query)
)
if self.is_split:
original_text = str(query.resp_message_chain[-1])
threshold = query.pipeline_config['output']['long-text-processing']['threshold']
segments = self.strategy_impl.split_text(original_text, threshold)
query.resp_message_chain.pop()
for segment in segments:
query.resp_message_chain.append(
platform_message.MessageChain([platform_message.Plain(text=segment)])
)
else:
query.resp_message_chain[-1] = platform_message.MessageChain(
await self.strategy_impl.process(str(query.resp_message_chain[-1]), query)
)
return entities.StageProcessResult(result_type=entities.ResultType.CONTINUE, new_query=query)