chore(vault): backup 2026-07-03 21:18:15
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# B 组:单步模式
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
# 配置
|
||||
$sourceFile = "raw/呼吸之间_李谨伯/第一编 从身体入手.md"
|
||||
$outputDir = "tools/experiments/wiki-generation-compare/output/group-b"
|
||||
$singleStepPrompt = "tools/experiments/wiki-generation-compare/prompts/singlestep.md"
|
||||
|
||||
# 记录开始时间
|
||||
$startTime = Get-Date
|
||||
$startTimeStr = $startTime.ToString("yyyy-MM-dd HH:mm:ss")
|
||||
|
||||
Write-Host "=== B 组实验开始:单步模式 ===" -ForegroundColor Cyan
|
||||
Write-Host "开始时间: $startTimeStr" -ForegroundColor Yellow
|
||||
|
||||
# 直接生成
|
||||
Write-Host "`n生成阶段..." -ForegroundColor Green
|
||||
$sourceContent = Get-Content $sourceFile -Raw -Encoding UTF8
|
||||
$template = Get-Content $singleStepPrompt -Raw -Encoding UTF8
|
||||
$fullPrompt = $template -replace "{SOURCE_CONTENT}", $sourceContent
|
||||
|
||||
Write-Host " 调用 LLM 生成 Wiki 页面..." -ForegroundColor Gray
|
||||
|
||||
# 使用 opencode-mem 调用 LLM
|
||||
$generationResult = opencode-mem query "$fullPrompt" --format text
|
||||
|
||||
# 如果 opencode-mem 不可用,使用备用方法
|
||||
if (-not $generationResult) {
|
||||
Write-Host " opencode-mem 不可用,使用备用方法..." -ForegroundColor Yellow
|
||||
|
||||
# 直接调用 LLM API
|
||||
$apiKey = $env:OPENAI_API_KEY
|
||||
if ($apiKey) {
|
||||
$body = @{
|
||||
model = "gpt-4"
|
||||
messages = @(
|
||||
@{
|
||||
role = "system"
|
||||
content = "你是一位知识库构建专家。"
|
||||
},
|
||||
@{
|
||||
role = "user"
|
||||
content = $fullPrompt
|
||||
}
|
||||
)
|
||||
temperature = 0.5
|
||||
max_tokens = 8000
|
||||
} | ConvertTo-Json -Depth 10
|
||||
|
||||
try {
|
||||
$response = Invoke-RestMethod -Uri "https://api.openai.com/v1/chat/completions" `
|
||||
-Method Post `
|
||||
-Headers @{
|
||||
"Authorization" = "Bearer $apiKey"
|
||||
"Content-Type" = "application/json"
|
||||
} `
|
||||
-Body $body
|
||||
|
||||
$generationResult = $response.choices[0].message.content
|
||||
} catch {
|
||||
Write-Host " ✗ OpenAI API 调用失败: $_" -ForegroundColor Red
|
||||
Write-Host " 生成模拟数据用于测试..." -ForegroundColor Yellow
|
||||
$generationResult = $null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 解析生成结果
|
||||
$wikiDir = "$outputDir/wiki"
|
||||
if (!(Test-Path $wikiDir)) {
|
||||
New-Item -ItemType Directory -Path $wikiDir | Out-Null
|
||||
}
|
||||
|
||||
if ($generationResult) {
|
||||
# 解析 ---FILE: ... ---END FILE--- 块
|
||||
$fileBlocks = [regex]::Matches($generationResult, "---FILE: (.*?)---(.*?)---END FILE---", [regexoptions]::Singleline)
|
||||
|
||||
if ($fileBlocks.Count -eq 0) {
|
||||
Write-Host " ⚠ 未找到文件块,尝试其他解析方式..." -ForegroundColor Yellow
|
||||
# 尝试宽松匹配
|
||||
$fileBlocks = [regex]::Matches($generationResult, "FILE: (.*?)\n(.*?)(?=(FILE:|$))", [regexoptions]::Singleline)
|
||||
}
|
||||
|
||||
foreach ($block in $fileBlocks) {
|
||||
$filePath = $block.Groups[1].Value.Trim()
|
||||
$fileContent = $block.Groups[2].Value.Trim()
|
||||
|
||||
# 创建目录(如果需要)
|
||||
$fullPath = "$outputDir/$filePath"
|
||||
$fileDir = Split-Path $fullPath -Parent
|
||||
if (!(Test-Path $fileDir)) {
|
||||
New-Item -ItemType Directory -Path $fileDir -Force | Out-Null
|
||||
}
|
||||
|
||||
# 写入文件
|
||||
$fileContent | Out-File $fullPath -Encoding UTF8
|
||||
Write-Host " ✓ 生成: $filePath" -ForegroundColor Gray
|
||||
}
|
||||
} else {
|
||||
Write-Host " ⚠ LLM 调用失败,跳过生成步骤" -ForegroundColor Yellow
|
||||
Write-Host " 这是正常的,因为需要配置 LLM API" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# 记录结束时间
|
||||
$endTime = Get-Date
|
||||
$endTimeStr = $endTime.ToString("yyyy-MM-dd HH:mm:ss")
|
||||
$duration = ($endTime - $startTime).TotalMinutes
|
||||
|
||||
# 统计生成的文件
|
||||
$generatedFiles = @(Get-ChildItem -Path $wikiDir -Recurse -Filter "*.md")
|
||||
|
||||
Write-Host "`n=== B 组实验完成 ===" -ForegroundColor Cyan
|
||||
Write-Host "结束时间: $endTimeStr" -ForegroundColor Yellow
|
||||
Write-Host "总耗时: $([math]::Round($duration, 2)) 分钟" -ForegroundColor Yellow
|
||||
Write-Host "生成文件数: $($generatedFiles.Count)" -ForegroundColor Yellow
|
||||
|
||||
# 保存元数据
|
||||
$metadata = @{
|
||||
group = "B"
|
||||
mode = "Single-Step"
|
||||
sourceFile = $sourceFile
|
||||
startTime = $startTimeStr
|
||||
endTime = $endTimeStr
|
||||
durationMinutes = [math]::Round($duration, 2)
|
||||
pagesGenerated = $generatedFiles.Count
|
||||
} | ConvertTo-Json -Depth 10
|
||||
|
||||
$metadata | Out-File "$outputDir/metadata.json" -Encoding UTF8
|
||||
|
||||
Write-Host "✓ 元数据已保存到 $outputDir/metadata.json" -ForegroundColor Green
|
||||
Reference in New Issue
Block a user