刘立冬 2 mēneši atpakaļ
vecāks
revīzija
6fb7fe3f9f
1 mainītis faili ar 17 papildinājumiem un 6 dzēšanām
  1. 17 6
      sug_v6_1_2_115.py

+ 17 - 6
sug_v6_1_2_115.py

@@ -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)