106 lines
4.8 KiB
JavaScript
106 lines
4.8 KiB
JavaScript
const DPMLContentParser = require('../../../lib/core/resource/DPMLContentParser')
|
||
const path = require('path')
|
||
const fs = require('fs-extra')
|
||
|
||
describe('DPMLContentParser 集成测试', () => {
|
||
let parser
|
||
|
||
beforeEach(() => {
|
||
parser = new DPMLContentParser()
|
||
})
|
||
|
||
describe('真实角色文件测试', () => {
|
||
test('应该正确解析internet-debater角色的完整内容', async () => {
|
||
const roleFile = '/Users/sean/WorkSpaces/DeepracticeProjects/PromptX/.promptx/resource/domain/internet-debater/internet-debater.role.md'
|
||
|
||
// 检查文件是否存在
|
||
const exists = await fs.pathExists(roleFile)
|
||
if (!exists) {
|
||
console.log('跳过测试:internet-debater角色文件不存在')
|
||
return
|
||
}
|
||
|
||
const roleContent = await fs.readFile(roleFile, 'utf-8')
|
||
const roleSemantics = parser.parseRoleDocument(roleContent)
|
||
|
||
// 验证personality解析
|
||
expect(roleSemantics).toHaveProperty('personality')
|
||
expect(roleSemantics.personality.metadata.contentType).toBe('direct-only')
|
||
expect(roleSemantics.personality.directContent).toContain('网络杠精思维模式')
|
||
expect(roleSemantics.personality.directContent).toContain('挑刺思维')
|
||
expect(roleSemantics.personality.directContent).toContain('抬杠本能')
|
||
|
||
// 验证principle解析
|
||
expect(roleSemantics).toHaveProperty('principle')
|
||
expect(roleSemantics.principle.metadata.contentType).toBe('direct-only')
|
||
expect(roleSemantics.principle.directContent).toContain('网络杠精行为原则')
|
||
expect(roleSemantics.principle.directContent).toContain('逢言必反')
|
||
expect(roleSemantics.principle.directContent).toContain('抠字眼优先')
|
||
|
||
// 验证knowledge解析
|
||
expect(roleSemantics).toHaveProperty('knowledge')
|
||
expect(roleSemantics.knowledge.metadata.contentType).toBe('direct-only')
|
||
expect(roleSemantics.knowledge.directContent).toContain('网络杠精专业知识体系')
|
||
expect(roleSemantics.knowledge.directContent).toContain('逻辑谬误大全')
|
||
expect(roleSemantics.knowledge.directContent).toContain('稻草人谬误')
|
||
|
||
console.log('✅ internet-debater角色内容完整解析成功')
|
||
console.log(` - personality: ${roleSemantics.personality.directContent.length} 字符`)
|
||
console.log(` - principle: ${roleSemantics.principle.directContent.length} 字符`)
|
||
console.log(` - knowledge: ${roleSemantics.knowledge.directContent.length} 字符`)
|
||
})
|
||
|
||
test('应该正确解析系统角色的@引用内容', async () => {
|
||
const roleFile = '/Users/sean/WorkSpaces/DeepracticeProjects/PromptX/prompt/domain/assistant/assistant.role.md'
|
||
|
||
const exists = await fs.pathExists(roleFile)
|
||
if (!exists) {
|
||
console.log('跳过测试:assistant角色文件不存在')
|
||
return
|
||
}
|
||
|
||
const roleContent = await fs.readFile(roleFile, 'utf-8')
|
||
const roleSemantics = parser.parseRoleDocument(roleContent)
|
||
|
||
// 验证personality有@引用
|
||
if (roleSemantics.personality) {
|
||
expect(roleSemantics.personality.references.length).toBeGreaterThan(0)
|
||
console.log('✅ assistant角色@引用解析成功')
|
||
console.log(` - personality引用数量: ${roleSemantics.personality.references.length}`)
|
||
}
|
||
})
|
||
})
|
||
|
||
describe('修复前后对比测试', () => {
|
||
test('模拟ActionCommand当前解析vs新解析的差异', () => {
|
||
const mixedContent = `@!thought://remember
|
||
@!thought://recall
|
||
|
||
# 网络杠精思维模式
|
||
## 核心思维特征
|
||
- 挑刺思维:看到任何观点都先找问题和漏洞
|
||
- 抬杠本能:天生反对派,习惯性质疑一切表述`
|
||
|
||
// 模拟当前ActionCommand的解析(只提取@引用)
|
||
const currentParsing = {
|
||
thoughtReferences: ['remember', 'recall'],
|
||
directContent: '' // 完全丢失
|
||
}
|
||
|
||
// 新的DPMLContentParser解析
|
||
const newParsing = parser.parseTagContent(mixedContent, 'personality')
|
||
|
||
// 对比结果
|
||
expect(newParsing.references).toHaveLength(2)
|
||
expect(newParsing.references.map(r => r.resource)).toEqual(['remember', 'recall'])
|
||
expect(newParsing.directContent).toContain('网络杠精思维模式')
|
||
expect(newParsing.directContent).toContain('挑刺思维')
|
||
expect(newParsing.directContent).toContain('抬杠本能')
|
||
|
||
console.log('📊 解析能力对比:')
|
||
console.log(` 当前ActionCommand: 只解析${currentParsing.thoughtReferences.length}个引用,丢失${newParsing.directContent.length}字符直接内容`)
|
||
console.log(` 新DPMLContentParser: 解析${newParsing.references.length}个引用 + ${newParsing.directContent.length}字符直接内容`)
|
||
console.log(` 🎯 语义完整性提升: ${((newParsing.directContent.length / mixedContent.length) * 100).toFixed(1)}%`)
|
||
})
|
||
})
|
||
}) |