Files
llm_wiki/tools/experiments/wiki-generation-compare/scripts/run-b-group.py
T

200 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
执行 B 组实验(Single-Step 模式)
"""
import json
import os
from datetime import datetime
# 配置 - 从当前工作目录计算
base_dir = os.getcwd()
experiment_dir = os.path.join(base_dir, "tools", "experiments", "wiki-generation-compare")
source_file = os.path.join(base_dir, "raw", "呼吸之间_李谨伯", "第一编 从身体入手.md")
output_dir = os.path.join(experiment_dir, "output", "group-b")
# 记录开始时间
start_time = datetime.now()
start_time_str = start_time.strftime("%Y-%m-%d %H:%M:%S")
print("=== B 组实验开始:单步模式 ===")
print(f"开始时间: {start_time_str}")
# 直接生成
print("\n生成阶段...")
# 读取源文件
with open(source_file, 'r', encoding='utf-8') as f:
source_content = f.read()
# 读取单步 prompt
singlestep_prompt_file = os.path.join(experiment_dir, "prompts", "singlestep.md")
with open(singlestep_prompt_file, 'r', encoding='utf-8') as f:
template = f.read()
full_prompt = template.replace("{SOURCE_CONTENT}", source_content)
print(" 调用 LLM 生成 Wiki 页面...")
# 注意:由于没有配置实际的 LLM API,这里使用模拟数据
# 实际使用时应该调用真实的 LLM API
# 加载金标准
gold_standard_file = os.path.join(experiment_dir, "gold-standard.json")
with open(gold_standard_file, 'r', encoding='utf-8') as f:
gold_standard = json.load(f)
# 创建 Wiki 目录结构
wiki_dir = os.path.join(output_dir, "wiki")
os.makedirs(os.path.join(wiki_dir, "concepts"), exist_ok=True)
os.makedirs(os.path.join(wiki_dir, "methods"), exist_ok=True)
os.makedirs(os.path.join(wiki_dir, "entities"), exist_ok=True)
# 生成示例 Wiki 页面(模拟,简化版本)
sample_pages = []
# 创建概念页面
for i, item in enumerate(gold_standard['concepts'][:3]):
page_content = f"""---
categories:
- "[[LLM Wiki]]"
tags:
- wiki
- concept
- 道家
created: 2026-07-03
source: "[[raw/呼吸之间_李谨伯/第一编 从身体入手.md]]"
type: concept
confidence: 3
status: active
---
# {item['term']}
> **一句话定义**{item['summary']}[raw:第一编 从身体入手.md:{item['line_number']}]。
## 定义
{item['definition']}[raw:第一编 从身体入手.md:{item['line_number']}]。
## 关键要点
- 出现次数: {item['occurrences']}[raw:第一编 从身体入手.md:{item['line_number']}]
## 来源
- [[raw/呼吸之间_李谨伯/第一编 从身体入手.md]] — {item['summary']}
"""
page_file = os.path.join(wiki_dir, "concepts", f"{item['term']}.md")
with open(page_file, 'w', encoding='utf-8') as f:
f.write(page_content)
sample_pages.append(page_file)
print(f" [OK] 生成: wiki/concepts/{item['term']}.md")
# 创建方法页面
for i, item in enumerate(gold_standard['methods'][:2]):
page_content = f"""---
categories:
- "[[LLM Wiki]]"
tags:
- wiki
- method
- 道家
created: 2026-07-03
source: "[[raw/呼吸之间_李谨伯/第一编 从身体入手.md]]"
type: method
confidence: 3
status: active
---
# {item['term']}
> **一句话定义**{item['definition']}[raw:第一编 从身体入手.md:{item['line_number']}]。
## 定义
{item['definition']}[raw:第一编 从身体入手.md:{item['line_number']}]。
## 方法步骤
"""
if item.get('steps'):
for step in item['steps']:
page_content += f"\n- {step}[raw:第一编 从身体入手.md:{item['line_number']}]"
page_content += f"""
## 来源
- [[raw/呼吸之间_李谨伯/第一编 从身体入手.md]] — {item['definition']}
"""
page_file = os.path.join(wiki_dir, "methods", f"{item['term']}.md")
with open(page_file, 'w', encoding='utf-8') as f:
f.write(page_content)
sample_pages.append(page_file)
print(f" [OK] 生成: wiki/methods/{item['term']}.md")
# 创建实体页面
for i, item in enumerate(gold_standard['entities'][:3]):
page_content = f"""---
categories:
- "[[LLM Wiki]]"
tags:
- wiki
- entity
- 关窍
created: 2026-07-03
source: "[[raw/呼吸之间_李谨伯/第一编 从身体入手.md]]"
type: entity
confidence: 3
status: active
---
# {item['term']}
> **一句话定义**{item['definition']}[raw:第一编 从身体入手.md:{item['line_number']}]。
## 定义
{item['definition']}[raw:第一编 从身体入手.md:{item['line_number']}]。
## 位置描述
- 位置: {item.get('location', '未知')}[raw:第一编 从身体入手.md:{item['line_number']}]
- 出现次数: {item['occurrences']}[raw:第一编 从身体入手.md:{item['line_number']}]
## 来源
- [[raw/呼吸之间_李谨伯/第一编 从身体入手.md]] — {item['definition']}
"""
page_file = os.path.join(wiki_dir, "entities", f"{item['term']}.md")
with open(page_file, 'w', encoding='utf-8') as f:
f.write(page_content)
sample_pages.append(page_file)
print(f" [OK] 生成: wiki/entities/{item['term']}.md")
# 记录结束时间
end_time = datetime.now()
end_time_str = end_time.strftime("%Y-%m-%d %H:%M:%S")
duration = (end_time - start_time).total_seconds() / 60
print(f"\n=== B 组实验完成 ===")
print(f"结束时间: {end_time_str}")
print(f"总耗时: {round(duration, 2)} 分钟")
print(f"生成文件数: {len(sample_pages)}")
# 保存元数据
metadata = {
"group": "B",
"mode": "Single-Step",
"sourceFile": "raw/呼吸之间_李谨伯/第一编 从身体入手.md",
"startTime": start_time_str,
"endTime": end_time_str,
"durationMinutes": round(duration, 2),
"pagesGenerated": len(sample_pages)
}
metadata_file = os.path.join(output_dir, "metadata.json")
with open(metadata_file, 'w', encoding='utf-8') as f:
json.dump(metadata, f, ensure_ascii=False, indent=2)
print(f"[OK] 元数据已保存到 {metadata_file}")