mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-10-04 02:53:47 +08:00
- 问问微信:Host 分配稳定 citationId 并注入模型上下文,正文 [E#] 与证据按钮同号 - 问问微信:回答返回前校验引用,幻觉编号移除并提示,不再出现不可信的引用按钮 - Agent Hub:收紧「最近会话」快捷路由,内容查询交回 Query Agent
69 lines
2.7 KiB
TypeScript
69 lines
2.7 KiB
TypeScript
/**
|
|
* 回答规则的语义断言。
|
|
*
|
|
* 这几条是**产品契约**,不是措辞偏好 —— 换行、改写都可以,但实质约束不能丢:
|
|
*
|
|
* 1. 当前是单次检索回答,没有自动连续的多轮工具执行;
|
|
* 2. 因此禁止任何"下一步还能帮你继续"的邀约(那是能力幻觉);
|
|
* 3. 多条命中结果不能用 Markdown 表格承载(结果栏放不下,会错位)。
|
|
*
|
|
* 这里只断言关键语义片段,不做巨型 snapshot —— 措辞会调整,语义不会。
|
|
*/
|
|
import { describe, expect, it, vi } from 'vitest'
|
|
|
|
vi.mock('electron', () => ({ app: { getPath: () => '/tmp' } }))
|
|
|
|
import { ANSWER_RULES } from '../../src/main/services/query-agent-service'
|
|
|
|
describe('Query Agent 回答规则', () => {
|
|
it('明确当前是单次检索回答,没有连续多轮执行', () => {
|
|
expect(ANSWER_RULES).toContain('单次检索回答')
|
|
expect(ANSWER_RULES).toContain('没有自动连续的多轮工具执行')
|
|
})
|
|
|
|
it('禁止续问邀约,并点名常见的错误句式', () => {
|
|
expect(ANSWER_RULES).toContain('禁止')
|
|
for (const phrase of [
|
|
'如果你需要,我可以',
|
|
'要不要我继续',
|
|
'我还可以帮你进一步',
|
|
'需要的话我再查'
|
|
]) {
|
|
expect(ANSWER_RULES).toContain(phrase)
|
|
}
|
|
})
|
|
|
|
it('禁止用 Markdown 表格承载多条命中结果', () => {
|
|
expect(ANSWER_RULES).toContain('不要用 Markdown 表格')
|
|
})
|
|
|
|
it('派生内容要自报来源,不伪装成原始聊天文本', () => {
|
|
expect(ANSWER_RULES).toContain('图片 OCR')
|
|
expect(ANSWER_RULES).toContain('语音转写')
|
|
expect(ANSWER_RULES).toContain('派生内容')
|
|
})
|
|
|
|
it('范围说明按需给,不机械复读', () => {
|
|
expect(ANSWER_RULES).toContain('范围说明只在确有必要时给')
|
|
expect(ANSWER_RULES).toContain('不要')
|
|
})
|
|
|
|
it('没有同一性证据时不把"疑似同图"写成确定事实', () => {
|
|
expect(ANSWER_RULES).toContain('内容高度相似')
|
|
})
|
|
|
|
it('引用规则:关键事实要标 [E#],只能引用真实存在的编号', () => {
|
|
expect(ANSWER_RULES).toContain('[E3]')
|
|
expect(ANSWER_RULES).toContain('citationId')
|
|
// 必须明说"不得创建/改写"——只要求"请引用"是不够的,那会诱发幻觉编号
|
|
expect(ANSWER_RULES).toContain('严禁')
|
|
expect(ANSWER_RULES).toContain('创建')
|
|
expect(ANSWER_RULES).toContain('改写')
|
|
// 其他括号写法必须被点名排除,否则模型会自创 [1] / (E3)
|
|
expect(ANSWER_RULES).toContain('[1]')
|
|
expect(ANSWER_RULES).toContain('(E3)')
|
|
// 概述/推断不加编号:避免"每句话都挂编号"的假依据
|
|
expect(ANSWER_RULES).toContain('不加')
|
|
})
|
|
})
|