|
|
@@ -676,14 +676,19 @@ async def initialize(o: str, context: RunContext) -> tuple[list[Seg], list[Word]
|
|
|
print(f"分词结果: {[s.text for s in seg_list]}")
|
|
|
print(f"分词理由: {segmentation.reasoning}")
|
|
|
|
|
|
- # 2. 分词评估:seg_list -> 每个seg与o进行评分(并发)
|
|
|
+ # 2. 分词评估:seg_list -> 每个seg与o进行评分(使用信号量限制并发数)
|
|
|
print(f"\n[步骤2] 评估每个分词与原始问题的相关度...")
|
|
|
|
|
|
+ MAX_CONCURRENT_SEG_EVALUATIONS = 5
|
|
|
+ seg_semaphore = asyncio.Semaphore(MAX_CONCURRENT_SEG_EVALUATIONS)
|
|
|
+
|
|
|
async def evaluate_seg(seg: Seg) -> Seg:
|
|
|
- seg.score_with_o, seg.reason = await evaluate_with_o(seg.text, o)
|
|
|
- return seg
|
|
|
+ async with seg_semaphore:
|
|
|
+ seg.score_with_o, seg.reason = await evaluate_with_o(seg.text, o)
|
|
|
+ return seg
|
|
|
|
|
|
if seg_list:
|
|
|
+ print(f" 开始评估 {len(seg_list)} 个分词(并发限制: {MAX_CONCURRENT_SEG_EVALUATIONS})...")
|
|
|
eval_tasks = [evaluate_seg(seg) for seg in seg_list]
|
|
|
await asyncio.gather(*eval_tasks)
|
|
|
|
|
|
@@ -801,12 +806,18 @@ async def run_round(
|
|
|
all_sugs.append(sug)
|
|
|
sug_to_q_map[id(sug)] = q_text
|
|
|
|
|
|
- # 2.2 并发评估所有sug
|
|
|
+ # 2.2 并发评估所有sug(使用信号量限制并发数)
|
|
|
+ # 每个 evaluate_sug 内部会并发调用 2 个 LLM,所以这里限制为 5,实际并发 LLM 请求为 10
|
|
|
+ MAX_CONCURRENT_EVALUATIONS = 5
|
|
|
+ semaphore = asyncio.Semaphore(MAX_CONCURRENT_EVALUATIONS)
|
|
|
+
|
|
|
async def evaluate_sug(sug: Sug) -> Sug:
|
|
|
- sug.score_with_o, sug.reason = await evaluate_with_o(sug.text, o)
|
|
|
- return sug
|
|
|
+ async with semaphore: # 限制并发数
|
|
|
+ sug.score_with_o, sug.reason = await evaluate_with_o(sug.text, o)
|
|
|
+ return sug
|
|
|
|
|
|
if all_sugs:
|
|
|
+ print(f" 开始评估 {len(all_sugs)} 个建议词(并发限制: {MAX_CONCURRENT_EVALUATIONS})...")
|
|
|
eval_tasks = [evaluate_sug(sug) for sug in all_sugs]
|
|
|
await asyncio.gather(*eval_tasks)
|
|
|
|