@nahisaho/katashiro-analyzer 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/factcheck/ClaimParser.d.ts +41 -0
- package/dist/factcheck/ClaimParser.d.ts.map +1 -0
- package/dist/factcheck/ClaimParser.js +149 -0
- package/dist/factcheck/ClaimParser.js.map +1 -0
- package/dist/factcheck/ConsistencyChecker.d.ts +56 -0
- package/dist/factcheck/ConsistencyChecker.d.ts.map +1 -0
- package/dist/factcheck/ConsistencyChecker.js +184 -0
- package/dist/factcheck/ConsistencyChecker.js.map +1 -0
- package/dist/factcheck/EvidenceCollector.d.ts +89 -0
- package/dist/factcheck/EvidenceCollector.d.ts.map +1 -0
- package/dist/factcheck/EvidenceCollector.js +222 -0
- package/dist/factcheck/EvidenceCollector.js.map +1 -0
- package/dist/factcheck/FactChecker.d.ts +81 -0
- package/dist/factcheck/FactChecker.d.ts.map +1 -0
- package/dist/factcheck/FactChecker.js +302 -0
- package/dist/factcheck/FactChecker.js.map +1 -0
- package/dist/factcheck/TrustedSourceRegistry.d.ts +47 -0
- package/dist/factcheck/TrustedSourceRegistry.d.ts.map +1 -0
- package/dist/factcheck/TrustedSourceRegistry.js +208 -0
- package/dist/factcheck/TrustedSourceRegistry.js.map +1 -0
- package/dist/factcheck/VerdictGenerator.d.ts +36 -0
- package/dist/factcheck/VerdictGenerator.d.ts.map +1 -0
- package/dist/factcheck/VerdictGenerator.js +154 -0
- package/dist/factcheck/VerdictGenerator.js.map +1 -0
- package/dist/factcheck/index.d.ts +15 -0
- package/dist/factcheck/index.d.ts.map +1 -0
- package/dist/factcheck/index.js +14 -0
- package/dist/factcheck/index.js.map +1 -0
- package/dist/factcheck/types.d.ts +265 -0
- package/dist/factcheck/types.d.ts.map +1 -0
- package/dist/factcheck/types.js +18 -0
- package/dist/factcheck/types.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/interpreter/CodeInterpreter.d.ts +119 -0
- package/dist/interpreter/CodeInterpreter.d.ts.map +1 -0
- package/dist/interpreter/CodeInterpreter.js +241 -0
- package/dist/interpreter/CodeInterpreter.js.map +1 -0
- package/dist/interpreter/CodeValidator.d.ts +57 -0
- package/dist/interpreter/CodeValidator.d.ts.map +1 -0
- package/dist/interpreter/CodeValidator.js +283 -0
- package/dist/interpreter/CodeValidator.js.map +1 -0
- package/dist/interpreter/ExecutionEngine.d.ts +73 -0
- package/dist/interpreter/ExecutionEngine.d.ts.map +1 -0
- package/dist/interpreter/ExecutionEngine.js +273 -0
- package/dist/interpreter/ExecutionEngine.js.map +1 -0
- package/dist/interpreter/ResultFormatter.d.ts +72 -0
- package/dist/interpreter/ResultFormatter.d.ts.map +1 -0
- package/dist/interpreter/ResultFormatter.js +187 -0
- package/dist/interpreter/ResultFormatter.js.map +1 -0
- package/dist/interpreter/SandboxManager.d.ts +111 -0
- package/dist/interpreter/SandboxManager.d.ts.map +1 -0
- package/dist/interpreter/SandboxManager.js +215 -0
- package/dist/interpreter/SandboxManager.js.map +1 -0
- package/dist/interpreter/SessionManager.d.ts +101 -0
- package/dist/interpreter/SessionManager.d.ts.map +1 -0
- package/dist/interpreter/SessionManager.js +184 -0
- package/dist/interpreter/SessionManager.js.map +1 -0
- package/dist/interpreter/index.d.ts +13 -0
- package/dist/interpreter/index.d.ts.map +1 -0
- package/dist/interpreter/index.js +13 -0
- package/dist/interpreter/index.js.map +1 -0
- package/dist/interpreter/types.d.ts +311 -0
- package/dist/interpreter/types.d.ts.map +1 -0
- package/dist/interpreter/types.js +91 -0
- package/dist/interpreter/types.js.map +1 -0
- package/dist/moa/AgentOrchestrator.d.ts +53 -0
- package/dist/moa/AgentOrchestrator.d.ts.map +1 -0
- package/dist/moa/AgentOrchestrator.js +164 -0
- package/dist/moa/AgentOrchestrator.js.map +1 -0
- package/dist/moa/ConsensusCalculator.d.ts +76 -0
- package/dist/moa/ConsensusCalculator.d.ts.map +1 -0
- package/dist/moa/ConsensusCalculator.js +221 -0
- package/dist/moa/ConsensusCalculator.js.map +1 -0
- package/dist/moa/MoAEngine.d.ts +97 -0
- package/dist/moa/MoAEngine.d.ts.map +1 -0
- package/dist/moa/MoAEngine.js +303 -0
- package/dist/moa/MoAEngine.js.map +1 -0
- package/dist/moa/ResponseAggregator.d.ts +65 -0
- package/dist/moa/ResponseAggregator.d.ts.map +1 -0
- package/dist/moa/ResponseAggregator.js +274 -0
- package/dist/moa/ResponseAggregator.js.map +1 -0
- package/dist/moa/TaskAnalyzer.d.ts +30 -0
- package/dist/moa/TaskAnalyzer.d.ts.map +1 -0
- package/dist/moa/TaskAnalyzer.js +116 -0
- package/dist/moa/TaskAnalyzer.js.map +1 -0
- package/dist/moa/index.d.ts +19 -0
- package/dist/moa/index.d.ts.map +1 -0
- package/dist/moa/index.js +18 -0
- package/dist/moa/index.js.map +1 -0
- package/dist/moa/types.d.ts +261 -0
- package/dist/moa/types.d.ts.map +1 -0
- package/dist/moa/types.js +70 -0
- package/dist/moa/types.js.map +1 -0
- package/dist/research/ConvergenceDetector.d.ts +37 -0
- package/dist/research/ConvergenceDetector.d.ts.map +1 -0
- package/dist/research/ConvergenceDetector.js +62 -0
- package/dist/research/ConvergenceDetector.js.map +1 -0
- package/dist/research/DeepResearchOrchestrator.d.ts +63 -0
- package/dist/research/DeepResearchOrchestrator.d.ts.map +1 -0
- package/dist/research/DeepResearchOrchestrator.js +283 -0
- package/dist/research/DeepResearchOrchestrator.js.map +1 -0
- package/dist/research/FindingIntegrator.d.ts +42 -0
- package/dist/research/FindingIntegrator.d.ts.map +1 -0
- package/dist/research/FindingIntegrator.js +239 -0
- package/dist/research/FindingIntegrator.js.map +1 -0
- package/dist/research/GapAnalyzer.d.ts +41 -0
- package/dist/research/GapAnalyzer.d.ts.map +1 -0
- package/dist/research/GapAnalyzer.js +145 -0
- package/dist/research/GapAnalyzer.js.map +1 -0
- package/dist/research/QueryGenerator.d.ts +38 -0
- package/dist/research/QueryGenerator.d.ts.map +1 -0
- package/dist/research/QueryGenerator.js +79 -0
- package/dist/research/QueryGenerator.js.map +1 -0
- package/dist/research/index.d.ts +14 -0
- package/dist/research/index.d.ts.map +1 -0
- package/dist/research/index.js +13 -0
- package/dist/research/index.js.map +1 -0
- package/dist/research/types.d.ts +215 -0
- package/dist/research/types.d.ts.map +1 -0
- package/dist/research/types.js +18 -0
- package/dist/research/types.js.map +1 -0
- package/dist/trend/ForecastEngine.d.ts +65 -0
- package/dist/trend/ForecastEngine.d.ts.map +1 -0
- package/dist/trend/ForecastEngine.js +260 -0
- package/dist/trend/ForecastEngine.js.map +1 -0
- package/dist/trend/TimeSeriesCollector.d.ts +42 -0
- package/dist/trend/TimeSeriesCollector.d.ts.map +1 -0
- package/dist/trend/TimeSeriesCollector.js +172 -0
- package/dist/trend/TimeSeriesCollector.js.map +1 -0
- package/dist/trend/TrendAnalyzer.d.ts +72 -0
- package/dist/trend/TrendAnalyzer.d.ts.map +1 -0
- package/dist/trend/TrendAnalyzer.js +291 -0
- package/dist/trend/TrendAnalyzer.js.map +1 -0
- package/dist/trend/TrendDetector.d.ts +67 -0
- package/dist/trend/TrendDetector.d.ts.map +1 -0
- package/dist/trend/TrendDetector.js +325 -0
- package/dist/trend/TrendDetector.js.map +1 -0
- package/dist/trend/VisualizationGenerator.d.ts +75 -0
- package/dist/trend/VisualizationGenerator.d.ts.map +1 -0
- package/dist/trend/VisualizationGenerator.js +294 -0
- package/dist/trend/VisualizationGenerator.js.map +1 -0
- package/dist/trend/index.d.ts +16 -0
- package/dist/trend/index.d.ts.map +1 -0
- package/dist/trend/index.js +18 -0
- package/dist/trend/index.js.map +1 -0
- package/dist/trend/types.d.ts +279 -0
- package/dist/trend/types.d.ts.map +1 -0
- package/dist/trend/types.js +17 -0
- package/dist/trend/types.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepResearchOrchestrator - 深層リサーチの実行オーケストレーター
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-008
|
|
5
|
+
* @design DES-ANALYZE-008
|
|
6
|
+
* @task TASK-003
|
|
7
|
+
*/
|
|
8
|
+
import type { DeepResearchQuery, DeepResearchResult, ResearchProgress, UserGuidance } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* 深層リサーチを実行するオーケストレーター
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const orchestrator = new DeepResearchOrchestrator();
|
|
15
|
+
*
|
|
16
|
+
* // 基本的な使い方
|
|
17
|
+
* for await (const progress of orchestrator.research({
|
|
18
|
+
* topic: 'AI ethics',
|
|
19
|
+
* focusAreas: ['privacy', 'bias'],
|
|
20
|
+
* })) {
|
|
21
|
+
* console.log(`Iteration ${progress.iteration}: ${progress.phase}`);
|
|
22
|
+
* console.log(`Novelty: ${(progress.noveltyRate * 100).toFixed(1)}%`);
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* // 結果の取得
|
|
26
|
+
* const result = orchestrator.getResult();
|
|
27
|
+
* console.log(`Total findings: ${result.keyFindings.length}`);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class DeepResearchOrchestrator {
|
|
31
|
+
private wideResearch;
|
|
32
|
+
private gapAnalyzer;
|
|
33
|
+
private convergenceDetector;
|
|
34
|
+
private queryGenerator;
|
|
35
|
+
private findingIntegrator;
|
|
36
|
+
private currentResult;
|
|
37
|
+
constructor();
|
|
38
|
+
/**
|
|
39
|
+
* 深層リサーチを実行(AsyncGenerator)
|
|
40
|
+
*/
|
|
41
|
+
research(query: DeepResearchQuery): AsyncGenerator<ResearchProgress, void, UserGuidance | undefined>;
|
|
42
|
+
/**
|
|
43
|
+
* 最終結果を取得
|
|
44
|
+
*/
|
|
45
|
+
getResult(): DeepResearchResult | null;
|
|
46
|
+
/**
|
|
47
|
+
* ルートノードを追加
|
|
48
|
+
*/
|
|
49
|
+
private addRootNode;
|
|
50
|
+
/**
|
|
51
|
+
* サマリーを生成
|
|
52
|
+
*/
|
|
53
|
+
private generateSummary;
|
|
54
|
+
/**
|
|
55
|
+
* 主要発見を抽出
|
|
56
|
+
*/
|
|
57
|
+
private extractKeyFindings;
|
|
58
|
+
/**
|
|
59
|
+
* IDを正規化
|
|
60
|
+
*/
|
|
61
|
+
private normalizeId;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=DeepResearchOrchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepResearchOrchestrator.d.ts","sourceRoot":"","sources":["../../src/research/DeepResearchOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAKhB,YAAY,EACb,MAAM,YAAY,CAAC;AAcpB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,aAAa,CAAmC;;IAUxD;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAAC,gBAAgB,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IA0M3G;;OAEG;IACH,SAAS,IAAI,kBAAkB,GAAG,IAAI;IAItC;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,WAAW;CAOpB"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepResearchOrchestrator - 深層リサーチの実行オーケストレーター
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-008
|
|
5
|
+
* @design DES-ANALYZE-008
|
|
6
|
+
* @task TASK-003
|
|
7
|
+
*/
|
|
8
|
+
import { KnowledgeGraph } from '@nahisaho/katashiro-knowledge';
|
|
9
|
+
import { WideResearchEngine } from '@nahisaho/katashiro-collector';
|
|
10
|
+
import { isOk } from '@nahisaho/katashiro-core';
|
|
11
|
+
import { GapAnalyzer } from './GapAnalyzer.js';
|
|
12
|
+
import { ConvergenceDetector } from './ConvergenceDetector.js';
|
|
13
|
+
import { QueryGenerator } from './QueryGenerator.js';
|
|
14
|
+
import { FindingIntegrator } from './FindingIntegrator.js';
|
|
15
|
+
const DEFAULT_CONFIG = {
|
|
16
|
+
maxIterations: 10,
|
|
17
|
+
convergenceThreshold: 0.15,
|
|
18
|
+
iterationTimeout: 60000, // 1分
|
|
19
|
+
totalTimeout: 600000, // 10分
|
|
20
|
+
depthPriority: 'balanced',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* 深層リサーチを実行するオーケストレーター
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const orchestrator = new DeepResearchOrchestrator();
|
|
28
|
+
*
|
|
29
|
+
* // 基本的な使い方
|
|
30
|
+
* for await (const progress of orchestrator.research({
|
|
31
|
+
* topic: 'AI ethics',
|
|
32
|
+
* focusAreas: ['privacy', 'bias'],
|
|
33
|
+
* })) {
|
|
34
|
+
* console.log(`Iteration ${progress.iteration}: ${progress.phase}`);
|
|
35
|
+
* console.log(`Novelty: ${(progress.noveltyRate * 100).toFixed(1)}%`);
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* // 結果の取得
|
|
39
|
+
* const result = orchestrator.getResult();
|
|
40
|
+
* console.log(`Total findings: ${result.keyFindings.length}`);
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class DeepResearchOrchestrator {
|
|
44
|
+
wideResearch;
|
|
45
|
+
gapAnalyzer;
|
|
46
|
+
convergenceDetector;
|
|
47
|
+
queryGenerator;
|
|
48
|
+
findingIntegrator;
|
|
49
|
+
currentResult = null;
|
|
50
|
+
constructor() {
|
|
51
|
+
this.wideResearch = new WideResearchEngine();
|
|
52
|
+
this.gapAnalyzer = new GapAnalyzer();
|
|
53
|
+
this.convergenceDetector = new ConvergenceDetector();
|
|
54
|
+
this.queryGenerator = new QueryGenerator();
|
|
55
|
+
this.findingIntegrator = new FindingIntegrator();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 深層リサーチを実行(AsyncGenerator)
|
|
59
|
+
*/
|
|
60
|
+
async *research(query) {
|
|
61
|
+
const config = { ...DEFAULT_CONFIG, ...query };
|
|
62
|
+
const startTime = Date.now();
|
|
63
|
+
// 知識グラフを初期化
|
|
64
|
+
const graph = new KnowledgeGraph();
|
|
65
|
+
this.addRootNode(graph, query.topic);
|
|
66
|
+
// 状態の初期化
|
|
67
|
+
const iterations = [];
|
|
68
|
+
const allSources = [];
|
|
69
|
+
const noveltyRates = [];
|
|
70
|
+
let totalFindingsProcessed = 0;
|
|
71
|
+
let completionReason = 'max_iterations';
|
|
72
|
+
for (let i = 0; i < config.maxIterations; i++) {
|
|
73
|
+
// タイムアウトチェック
|
|
74
|
+
if (Date.now() - startTime > config.totalTimeout) {
|
|
75
|
+
completionReason = 'timeout';
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
// フェーズ1: クエリ生成
|
|
79
|
+
const queries = i === 0
|
|
80
|
+
? this.queryGenerator.generateInitialQueries(query.topic, query.focusAreas, query.context)
|
|
81
|
+
: this.queryGenerator.generateFromGaps(await this.gapAnalyzer.analyze(this.findingIntegrator.toSimpleGraph(graph), query.topic, query.focusAreas), this.findingIntegrator.toSimpleGraph(graph), query.excludeAreas);
|
|
82
|
+
// クエリが生成できない場合は終了
|
|
83
|
+
if (queries.length === 0) {
|
|
84
|
+
completionReason = 'converged';
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
// フェーズ2: 検索実行
|
|
88
|
+
yield {
|
|
89
|
+
iteration: i + 1,
|
|
90
|
+
phase: 'searching',
|
|
91
|
+
currentQuery: queries[0] || '',
|
|
92
|
+
totalFindingsCount: totalFindingsProcessed,
|
|
93
|
+
noveltyRate: i > 0 ? noveltyRates[noveltyRates.length - 1] || 0 : 1,
|
|
94
|
+
convergenceScore: this.convergenceDetector.calculate(noveltyRates, i > 0 ? noveltyRates[noveltyRates.length - 1] || 0 : 1),
|
|
95
|
+
gaps: [],
|
|
96
|
+
elapsedTime: Date.now() - startTime,
|
|
97
|
+
};
|
|
98
|
+
const findings = [];
|
|
99
|
+
for (const q of queries.slice(0, 3)) {
|
|
100
|
+
// 最大3クエリ
|
|
101
|
+
try {
|
|
102
|
+
const result = await this.wideResearch.research({
|
|
103
|
+
topic: q,
|
|
104
|
+
depth: 'medium',
|
|
105
|
+
maxResultsPerSource: 5,
|
|
106
|
+
agentTimeout: config.iterationTimeout / 3,
|
|
107
|
+
});
|
|
108
|
+
if (isOk(result)) {
|
|
109
|
+
findings.push(...result.value.findings);
|
|
110
|
+
// ソース情報を収集
|
|
111
|
+
for (const source of result.value.sources) {
|
|
112
|
+
allSources.push({
|
|
113
|
+
url: `search://${source.type}/${encodeURIComponent(source.query)}`,
|
|
114
|
+
title: `${source.type}: ${source.query}`,
|
|
115
|
+
type: source.type,
|
|
116
|
+
accessedAt: new Date(),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// 検索エラーは無視して続行
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// フェーズ3: 統合
|
|
126
|
+
yield {
|
|
127
|
+
iteration: i + 1,
|
|
128
|
+
phase: 'integrating',
|
|
129
|
+
currentQuery: queries[0] || '',
|
|
130
|
+
totalFindingsCount: totalFindingsProcessed,
|
|
131
|
+
noveltyRate: i > 0 ? noveltyRates[noveltyRates.length - 1] || 0 : 1,
|
|
132
|
+
convergenceScore: this.convergenceDetector.calculate(noveltyRates, i > 0 ? noveltyRates[noveltyRates.length - 1] || 0 : 1),
|
|
133
|
+
gaps: [],
|
|
134
|
+
elapsedTime: Date.now() - startTime,
|
|
135
|
+
};
|
|
136
|
+
const previousNodeCount = graph.getAllNodes().length;
|
|
137
|
+
const integrationResult = await this.findingIntegrator.integrate(graph, findings, query.topic);
|
|
138
|
+
// 新規情報率を計算
|
|
139
|
+
const noveltyRate = previousNodeCount > 0 ? integrationResult.newNodesCount / previousNodeCount : 1;
|
|
140
|
+
noveltyRates.push(noveltyRate);
|
|
141
|
+
totalFindingsProcessed += findings.length;
|
|
142
|
+
// イテレーション記録
|
|
143
|
+
iterations.push({
|
|
144
|
+
iterationNumber: i + 1,
|
|
145
|
+
queries,
|
|
146
|
+
findingsCount: findings.length,
|
|
147
|
+
newNodesCount: integrationResult.newNodesCount,
|
|
148
|
+
newEdgesCount: integrationResult.newEdgesCount,
|
|
149
|
+
noveltyRate,
|
|
150
|
+
duration: Date.now() - startTime - iterations.reduce((sum, r) => sum + r.duration, 0),
|
|
151
|
+
});
|
|
152
|
+
// フェーズ4: ギャップ分析
|
|
153
|
+
const gaps = await this.gapAnalyzer.analyze(this.findingIntegrator.toSimpleGraph(graph), query.topic, query.focusAreas);
|
|
154
|
+
yield {
|
|
155
|
+
iteration: i + 1,
|
|
156
|
+
phase: 'analyzing',
|
|
157
|
+
currentQuery: queries[0] || '',
|
|
158
|
+
totalFindingsCount: totalFindingsProcessed,
|
|
159
|
+
noveltyRate,
|
|
160
|
+
convergenceScore: this.convergenceDetector.calculate(noveltyRates.slice(0, -1), noveltyRate),
|
|
161
|
+
gaps,
|
|
162
|
+
elapsedTime: Date.now() - startTime,
|
|
163
|
+
};
|
|
164
|
+
// 収束チェック
|
|
165
|
+
if (this.convergenceDetector.hasConverged(noveltyRates.slice(0, -1), noveltyRate, config.convergenceThreshold)) {
|
|
166
|
+
completionReason = 'converged';
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
// ユーザーガイダンス(オプション)
|
|
170
|
+
if (query.userGuidance && gaps.length > 0) {
|
|
171
|
+
const guidance = yield {
|
|
172
|
+
iteration: i + 1,
|
|
173
|
+
phase: 'waiting_guidance',
|
|
174
|
+
currentQuery: queries[0] || '',
|
|
175
|
+
totalFindingsCount: totalFindingsProcessed,
|
|
176
|
+
noveltyRate,
|
|
177
|
+
convergenceScore: this.convergenceDetector.calculate(noveltyRates.slice(0, -1), noveltyRate),
|
|
178
|
+
gaps,
|
|
179
|
+
elapsedTime: Date.now() - startTime,
|
|
180
|
+
};
|
|
181
|
+
// ユーザーからの停止指示
|
|
182
|
+
if (guidance?.action === 'stop') {
|
|
183
|
+
completionReason = 'user_stopped';
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// 最終結果を構築
|
|
189
|
+
const simpleGraph = this.findingIntegrator.toSimpleGraph(graph);
|
|
190
|
+
const remainingGaps = await this.gapAnalyzer.analyze(simpleGraph, query.topic, query.focusAreas);
|
|
191
|
+
this.currentResult = {
|
|
192
|
+
topic: query.topic,
|
|
193
|
+
knowledgeGraph: simpleGraph,
|
|
194
|
+
summary: this.generateSummary(simpleGraph, query.topic),
|
|
195
|
+
keyFindings: this.extractKeyFindings(simpleGraph),
|
|
196
|
+
sources: allSources,
|
|
197
|
+
iterations,
|
|
198
|
+
remainingGaps,
|
|
199
|
+
statistics: {
|
|
200
|
+
totalIterations: iterations.length,
|
|
201
|
+
totalFindingsProcessed,
|
|
202
|
+
totalNodesCreated: simpleGraph.nodes.length,
|
|
203
|
+
totalEdgesCreated: simpleGraph.edges.length,
|
|
204
|
+
averageNoveltyRate: noveltyRates.length > 0 ? noveltyRates.reduce((sum, r) => sum + r, 0) / noveltyRates.length : 0,
|
|
205
|
+
totalDuration: Date.now() - startTime,
|
|
206
|
+
},
|
|
207
|
+
completionReason,
|
|
208
|
+
};
|
|
209
|
+
// 最終進捗
|
|
210
|
+
yield {
|
|
211
|
+
iteration: iterations.length,
|
|
212
|
+
phase: 'completed',
|
|
213
|
+
currentQuery: '',
|
|
214
|
+
totalFindingsCount: totalFindingsProcessed,
|
|
215
|
+
noveltyRate: noveltyRates.length > 0 ? noveltyRates[noveltyRates.length - 1] || 0 : 0,
|
|
216
|
+
convergenceScore: 1,
|
|
217
|
+
gaps: remainingGaps,
|
|
218
|
+
elapsedTime: Date.now() - startTime,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* 最終結果を取得
|
|
223
|
+
*/
|
|
224
|
+
getResult() {
|
|
225
|
+
return this.currentResult;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* ルートノードを追加
|
|
229
|
+
*/
|
|
230
|
+
addRootNode(graph, topic) {
|
|
231
|
+
graph.addNode({
|
|
232
|
+
id: `topic-${this.normalizeId(topic)}`,
|
|
233
|
+
type: 'topic',
|
|
234
|
+
label: topic,
|
|
235
|
+
properties: {
|
|
236
|
+
name: topic,
|
|
237
|
+
isRoot: true,
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* サマリーを生成
|
|
243
|
+
*/
|
|
244
|
+
generateSummary(graph, topic) {
|
|
245
|
+
const findingCount = graph.nodes.filter((n) => n.type === 'finding').length;
|
|
246
|
+
const conceptCount = graph.nodes.filter((n) => n.type === 'concept').length;
|
|
247
|
+
const entityCount = graph.nodes.filter((n) => !['finding', 'concept', 'topic'].includes(n.type)).length;
|
|
248
|
+
const topConcepts = graph.nodes
|
|
249
|
+
.filter((n) => n.type === 'concept')
|
|
250
|
+
.slice(0, 5)
|
|
251
|
+
.map((n) => n.label)
|
|
252
|
+
.join(', ');
|
|
253
|
+
return `Research on "${topic}" identified ${findingCount} findings, ${conceptCount} concepts, and ${entityCount} entities. Key concepts include: ${topConcepts || 'N/A'}.`;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 主要発見を抽出
|
|
257
|
+
*/
|
|
258
|
+
extractKeyFindings(graph) {
|
|
259
|
+
return graph.nodes
|
|
260
|
+
.filter((n) => n.type === 'finding')
|
|
261
|
+
.sort((a, b) => (b.properties.relevanceScore || 0) - (a.properties.relevanceScore || 0))
|
|
262
|
+
.slice(0, 10)
|
|
263
|
+
.map((node) => ({
|
|
264
|
+
id: node.id,
|
|
265
|
+
title: node.label,
|
|
266
|
+
summary: node.properties.description || '',
|
|
267
|
+
importance: ((node.properties.relevanceScore || 0) > 0.7 ? 'high' : 'medium'),
|
|
268
|
+
sources: [node.properties.url || ''],
|
|
269
|
+
relatedConcepts: [],
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* IDを正規化
|
|
274
|
+
*/
|
|
275
|
+
normalizeId(text) {
|
|
276
|
+
return text
|
|
277
|
+
.toLowerCase()
|
|
278
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
279
|
+
.replace(/^-|-$/g, '')
|
|
280
|
+
.slice(0, 50);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=DeepResearchOrchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepResearchOrchestrator.js","sourceRoot":"","sources":["../../src/research/DeepResearchOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAgB,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAWhD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,cAAc,GAAG;IACrB,aAAa,EAAE,EAAE;IACjB,oBAAoB,EAAE,IAAI;IAC1B,gBAAgB,EAAE,KAAK,EAAE,KAAK;IAC9B,YAAY,EAAE,MAAM,EAAE,MAAM;IAC5B,aAAa,EAAE,UAAmB;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,wBAAwB;IAC3B,YAAY,CAAqB;IACjC,WAAW,CAAc;IACzB,mBAAmB,CAAsB;IACzC,cAAc,CAAiB;IAC/B,iBAAiB,CAAoB;IACrC,aAAa,GAA8B,IAAI,CAAC;IAExD;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAwB;QACtC,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,KAAK,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,YAAY;QACZ,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAErC,SAAS;QACT,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAC/B,IAAI,gBAAgB,GAAgE,gBAAgB,CAAC;QAErG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,aAAa;YACb,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gBACjD,gBAAgB,GAAG,SAAS,CAAC;gBAC7B,MAAM;YACR,CAAC;YAED,eAAe;YACf,MAAM,OAAO,GACX,CAAC,KAAK,CAAC;gBACL,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC;gBAC1F,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAClC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC5B,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,EAC3C,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,UAAU,CACjB,EACD,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,EAC3C,KAAK,CAAC,YAAY,CACnB,CAAC;YAER,kBAAkB;YAClB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,gBAAgB,GAAG,WAAW,CAAC;gBAC/B,MAAM;YACR,CAAC;YAED,cAAc;YACd,MAAM;gBACJ,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,KAAK,EAAE,WAAoB;gBAC3B,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC9B,kBAAkB,EAAE,sBAAsB;gBAC1C,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAClD,YAAY,EACZ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACvD;gBACD,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;YAEF,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpC,SAAS;gBACT,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;wBAC9C,KAAK,EAAE,CAAC;wBACR,KAAK,EAAE,QAAQ;wBACf,mBAAmB,EAAE,CAAC;wBACtB,YAAY,EAAE,MAAM,CAAC,gBAAgB,GAAG,CAAC;qBAC1C,CAAC,CAAC;oBAEH,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;wBACjB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAExC,WAAW;wBACX,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;4BAC1C,UAAU,CAAC,IAAI,CAAC;gCACd,GAAG,EAAE,YAAY,MAAM,CAAC,IAAI,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gCAClE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE;gCACxC,IAAI,EAAE,MAAM,CAAC,IAAI;gCACjB,UAAU,EAAE,IAAI,IAAI,EAAE;6BACvB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;YACH,CAAC;YAED,YAAY;YACZ,MAAM;gBACJ,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,KAAK,EAAE,aAAsB;gBAC7B,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC9B,kBAAkB,EAAE,sBAAsB;gBAC1C,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAClD,YAAY,EACZ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACvD;gBACD,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;YAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;YACrD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAE/F,WAAW;YACX,MAAM,WAAW,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YACpG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,sBAAsB,IAAI,QAAQ,CAAC,MAAM,CAAC;YAE1C,YAAY;YACZ,UAAU,CAAC,IAAI,CAAC;gBACd,eAAe,EAAE,CAAC,GAAG,CAAC;gBACtB,OAAO;gBACP,aAAa,EAAE,QAAQ,CAAC,MAAM;gBAC9B,aAAa,EAAE,iBAAiB,CAAC,aAAa;gBAC9C,aAAa,EAAE,iBAAiB,CAAC,aAAa;gBAC9C,WAAW;gBACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;aACtF,CAAC,CAAC;YAEH,gBAAgB;YAChB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CACzC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,EAC3C,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,UAAU,CACjB,CAAC;YAEF,MAAM;gBACJ,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,KAAK,EAAE,WAAoB;gBAC3B,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC9B,kBAAkB,EAAE,sBAAsB;gBAC1C,WAAW;gBACX,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;gBAC5F,IAAI;gBACJ,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC,CAAC;YAEF,SAAS;YACT,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC/G,gBAAgB,GAAG,WAAW,CAAC;gBAC/B,MAAM;YACR,CAAC;YAED,mBAAmB;YACnB,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,MAAM;oBACrB,SAAS,EAAE,CAAC,GAAG,CAAC;oBAChB,KAAK,EAAE,kBAA2B;oBAClC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC9B,kBAAkB,EAAE,sBAAsB;oBAC1C,WAAW;oBACX,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;oBAC5F,IAAI;oBACJ,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACpC,CAAC;gBAEF,cAAc;gBACd,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChC,gBAAgB,GAAG,cAAc,CAAC;oBAClC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,UAAU;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAEjG,IAAI,CAAC,aAAa,GAAG;YACnB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,cAAc,EAAE,WAAW;YAC3B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;YACvD,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;YACjD,OAAO,EAAE,UAAU;YACnB,UAAU;YACV,aAAa;YACb,UAAU,EAAE;gBACV,eAAe,EAAE,UAAU,CAAC,MAAM;gBAClC,sBAAsB;gBACtB,iBAAiB,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;gBAC3C,iBAAiB,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;gBAC3C,kBAAkB,EAChB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjG,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACtC;YACD,gBAAgB;SACjB,CAAC;QAEF,OAAO;QACP,MAAM;YACJ,SAAS,EAAE,UAAU,CAAC,MAAM;YAC5B,KAAK,EAAE,WAAoB;YAC3B,YAAY,EAAE,EAAE;YAChB,kBAAkB,EAAE,sBAAsB;YAC1C,WAAW,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,gBAAgB,EAAE,CAAC;YACnB,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAqB,EAAE,KAAa;QACtD,KAAK,CAAC,OAAO,CAAC;YACZ,EAAE,EAAE,SAAS,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YACtC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE;gBACV,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAA2B,EAAE,KAAa;QAChE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAExG,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;aACnC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aACnB,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,gBAAgB,KAAK,gBAAgB,YAAY,cAAc,YAAY,kBAAkB,WAAW,oCAAoC,WAAW,IAAI,KAAK,GAAG,CAAC;IAC7K,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAA2B;QACpD,OAAO,KAAK,CAAC,KAAK;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC,UAAU,CAAC,cAAyB,IAAI,CAAC,CAAC,GAAG,CAAE,CAAC,CAAC,UAAU,CAAC,cAAyB,IAAI,CAAC,CAAC,CAAC;aAC/G,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAG,IAAI,CAAC,UAAU,CAAC,WAAsB,IAAI,EAAE;YACtD,UAAU,EAAE,CAAC,CAAE,IAAI,CAAC,UAAU,CAAC,cAAyB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAA8B;YACtH,OAAO,EAAE,CAAE,IAAI,CAAC,UAAU,CAAC,GAAc,IAAI,EAAE,CAAC;YAChD,eAAe,EAAE,EAAc;SAChC,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI;aACR,WAAW,EAAE;aACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;aAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FindingIntegrator - 検索結果を知識グラフに統合
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-008
|
|
5
|
+
* @design DES-ANALYZE-008
|
|
6
|
+
* @task TASK-003
|
|
7
|
+
*/
|
|
8
|
+
import { KnowledgeGraph } from '@nahisaho/katashiro-knowledge';
|
|
9
|
+
import type { Finding } from '@nahisaho/katashiro-collector';
|
|
10
|
+
import type { IntegrationResult, SimpleKnowledgeGraph } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* 検索結果を知識グラフに統合するクラス
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const integrator = new FindingIntegrator();
|
|
17
|
+
*
|
|
18
|
+
* const result = await integrator.integrate(graph, findings, 'AI ethics');
|
|
19
|
+
* console.log(`Added ${result.newNodesCount} nodes, ${result.newEdgesCount} edges`);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class FindingIntegrator {
|
|
23
|
+
private entityExtractor;
|
|
24
|
+
constructor();
|
|
25
|
+
/**
|
|
26
|
+
* Findingを知識グラフに統合
|
|
27
|
+
*/
|
|
28
|
+
integrate(graph: KnowledgeGraph, findings: Finding[], _topic: string): Promise<IntegrationResult>;
|
|
29
|
+
/**
|
|
30
|
+
* グラフをシンプルな形式に変換
|
|
31
|
+
*/
|
|
32
|
+
toSimpleGraph(graph: KnowledgeGraph): SimpleKnowledgeGraph;
|
|
33
|
+
/**
|
|
34
|
+
* IDを正規化
|
|
35
|
+
*/
|
|
36
|
+
private normalizeId;
|
|
37
|
+
/**
|
|
38
|
+
* タイトルからコンセプトキーワードを抽出
|
|
39
|
+
*/
|
|
40
|
+
private extractConceptKeywords;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=FindingIntegrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindingIntegrator.d.ts","sourceRoot":"","sources":["../../src/research/FindingIntegrator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG1E;;;;;;;;;;GAUG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,eAAe,CAAkB;;IAMzC;;OAEG;IACG,SAAS,CACb,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC;IAkI7B;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,oBAAoB;IAO1D;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAqE/B"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FindingIntegrator - 検索結果を知識グラフに統合
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-008
|
|
5
|
+
* @design DES-ANALYZE-008
|
|
6
|
+
* @task TASK-003
|
|
7
|
+
*/
|
|
8
|
+
import { EntityExtractor } from '../entity/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* 検索結果を知識グラフに統合するクラス
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const integrator = new FindingIntegrator();
|
|
15
|
+
*
|
|
16
|
+
* const result = await integrator.integrate(graph, findings, 'AI ethics');
|
|
17
|
+
* console.log(`Added ${result.newNodesCount} nodes, ${result.newEdgesCount} edges`);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export class FindingIntegrator {
|
|
21
|
+
entityExtractor;
|
|
22
|
+
constructor() {
|
|
23
|
+
this.entityExtractor = new EntityExtractor();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Findingを知識グラフに統合
|
|
27
|
+
*/
|
|
28
|
+
async integrate(graph, findings, _topic) {
|
|
29
|
+
let newNodesCount = 0;
|
|
30
|
+
let newEdgesCount = 0;
|
|
31
|
+
let updatedNodesCount = 0;
|
|
32
|
+
const existingNodeIds = new Set(graph.getAllNodes().map((n) => n.id));
|
|
33
|
+
for (const finding of findings) {
|
|
34
|
+
// Findingからノードを作成
|
|
35
|
+
const findingNodeId = `finding-${finding.id}`;
|
|
36
|
+
if (!existingNodeIds.has(findingNodeId)) {
|
|
37
|
+
graph.addNode({
|
|
38
|
+
id: findingNodeId,
|
|
39
|
+
type: 'finding',
|
|
40
|
+
label: finding.title,
|
|
41
|
+
properties: {
|
|
42
|
+
name: finding.title,
|
|
43
|
+
description: finding.summary,
|
|
44
|
+
url: finding.url,
|
|
45
|
+
sourceType: finding.sourceType,
|
|
46
|
+
sourceName: finding.sourceName,
|
|
47
|
+
relevanceScore: finding.relevanceScore,
|
|
48
|
+
credibilityScore: finding.credibilityScore,
|
|
49
|
+
publishedAt: finding.publishedAt?.toISOString(),
|
|
50
|
+
author: finding.author,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
existingNodeIds.add(findingNodeId);
|
|
54
|
+
newNodesCount++;
|
|
55
|
+
// ルートトピックとの関連を追加
|
|
56
|
+
const rootNodes = graph.getAllNodes().filter((n) => n.type === 'topic');
|
|
57
|
+
for (const rootNode of rootNodes) {
|
|
58
|
+
try {
|
|
59
|
+
graph.addEdge({
|
|
60
|
+
source: rootNode.id,
|
|
61
|
+
target: findingNodeId,
|
|
62
|
+
predicate: 'has_finding',
|
|
63
|
+
weight: finding.relevanceScore,
|
|
64
|
+
});
|
|
65
|
+
newEdgesCount++;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// エッジが既に存在する場合はスキップ
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// エンティティを抽出してノードとして追加
|
|
73
|
+
const content = `${finding.title} ${finding.summary}`;
|
|
74
|
+
const entities = await this.entityExtractor.extract(content);
|
|
75
|
+
for (const entity of entities.all) {
|
|
76
|
+
const entityNodeId = `entity-${entity.type}-${this.normalizeId(entity.text)}`;
|
|
77
|
+
if (!existingNodeIds.has(entityNodeId)) {
|
|
78
|
+
graph.addNode({
|
|
79
|
+
id: entityNodeId,
|
|
80
|
+
type: entity.type,
|
|
81
|
+
label: entity.text,
|
|
82
|
+
properties: {
|
|
83
|
+
name: entity.text,
|
|
84
|
+
entityType: entity.type,
|
|
85
|
+
sources: [finding.url],
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
existingNodeIds.add(entityNodeId);
|
|
89
|
+
newNodesCount++;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// 既存ノードのソースを更新 - KnowledgeGraphには updateNode がないので追加はスキップ
|
|
93
|
+
updatedNodesCount++;
|
|
94
|
+
}
|
|
95
|
+
// FindingとEntityの関連を追加
|
|
96
|
+
const edgeId = `edge-${findingNodeId}-${entityNodeId}`;
|
|
97
|
+
try {
|
|
98
|
+
graph.addEdge({
|
|
99
|
+
id: edgeId,
|
|
100
|
+
source: findingNodeId,
|
|
101
|
+
target: entityNodeId,
|
|
102
|
+
predicate: 'mentions',
|
|
103
|
+
weight: 1,
|
|
104
|
+
});
|
|
105
|
+
newEdgesCount++;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// エッジが既に存在する場合はスキップ
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// キーワードベースのコンセプトノードを追加
|
|
112
|
+
const conceptKeywords = this.extractConceptKeywords(finding.title);
|
|
113
|
+
for (const keyword of conceptKeywords) {
|
|
114
|
+
const conceptNodeId = `concept-${this.normalizeId(keyword)}`;
|
|
115
|
+
if (!existingNodeIds.has(conceptNodeId)) {
|
|
116
|
+
graph.addNode({
|
|
117
|
+
id: conceptNodeId,
|
|
118
|
+
type: 'concept',
|
|
119
|
+
label: keyword,
|
|
120
|
+
properties: {
|
|
121
|
+
name: keyword,
|
|
122
|
+
sources: [finding.url],
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
existingNodeIds.add(conceptNodeId);
|
|
126
|
+
newNodesCount++;
|
|
127
|
+
}
|
|
128
|
+
// FindingとConceptの関連を追加
|
|
129
|
+
try {
|
|
130
|
+
graph.addEdge({
|
|
131
|
+
source: findingNodeId,
|
|
132
|
+
target: conceptNodeId,
|
|
133
|
+
predicate: 'relates_to',
|
|
134
|
+
weight: 0.7,
|
|
135
|
+
});
|
|
136
|
+
newEdgesCount++;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// エッジが既に存在する場合はスキップ
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
newNodesCount,
|
|
145
|
+
newEdgesCount,
|
|
146
|
+
updatedNodesCount,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* グラフをシンプルな形式に変換
|
|
151
|
+
*/
|
|
152
|
+
toSimpleGraph(graph) {
|
|
153
|
+
return {
|
|
154
|
+
nodes: graph.getAllNodes(),
|
|
155
|
+
edges: graph.getAllEdges(),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* IDを正規化
|
|
160
|
+
*/
|
|
161
|
+
normalizeId(text) {
|
|
162
|
+
return text
|
|
163
|
+
.toLowerCase()
|
|
164
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
165
|
+
.replace(/^-|-$/g, '')
|
|
166
|
+
.slice(0, 50);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* タイトルからコンセプトキーワードを抽出
|
|
170
|
+
*/
|
|
171
|
+
extractConceptKeywords(title) {
|
|
172
|
+
// シンプルな実装:重要そうな単語を抽出
|
|
173
|
+
const stopWords = new Set([
|
|
174
|
+
'the',
|
|
175
|
+
'a',
|
|
176
|
+
'an',
|
|
177
|
+
'is',
|
|
178
|
+
'are',
|
|
179
|
+
'was',
|
|
180
|
+
'were',
|
|
181
|
+
'be',
|
|
182
|
+
'been',
|
|
183
|
+
'being',
|
|
184
|
+
'have',
|
|
185
|
+
'has',
|
|
186
|
+
'had',
|
|
187
|
+
'do',
|
|
188
|
+
'does',
|
|
189
|
+
'did',
|
|
190
|
+
'will',
|
|
191
|
+
'would',
|
|
192
|
+
'could',
|
|
193
|
+
'should',
|
|
194
|
+
'may',
|
|
195
|
+
'might',
|
|
196
|
+
'must',
|
|
197
|
+
'of',
|
|
198
|
+
'in',
|
|
199
|
+
'to',
|
|
200
|
+
'for',
|
|
201
|
+
'with',
|
|
202
|
+
'on',
|
|
203
|
+
'at',
|
|
204
|
+
'by',
|
|
205
|
+
'from',
|
|
206
|
+
'as',
|
|
207
|
+
'into',
|
|
208
|
+
'through',
|
|
209
|
+
'during',
|
|
210
|
+
'before',
|
|
211
|
+
'after',
|
|
212
|
+
'above',
|
|
213
|
+
'below',
|
|
214
|
+
'and',
|
|
215
|
+
'or',
|
|
216
|
+
'but',
|
|
217
|
+
'not',
|
|
218
|
+
'this',
|
|
219
|
+
'that',
|
|
220
|
+
'these',
|
|
221
|
+
'those',
|
|
222
|
+
'it',
|
|
223
|
+
'its',
|
|
224
|
+
'how',
|
|
225
|
+
'what',
|
|
226
|
+
'when',
|
|
227
|
+
'where',
|
|
228
|
+
'who',
|
|
229
|
+
'why',
|
|
230
|
+
]);
|
|
231
|
+
const words = title
|
|
232
|
+
.toLowerCase()
|
|
233
|
+
.split(/\W+/)
|
|
234
|
+
.filter((word) => word.length > 3 && !stopWords.has(word));
|
|
235
|
+
// 最大3つのキーワードを返す
|
|
236
|
+
return [...new Set(words)].slice(0, 3);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=FindingIntegrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindingIntegrator.js","sourceRoot":"","sources":["../../src/research/FindingIntegrator.ts"],"names":[],"mappings":"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"}
|