mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-10-07 23:03:51 +08:00
feat: 重构问问微信并完善知识库增量检索
统一问问微信与 Agent Hub 的查询链路 完善查询覆盖度、新鲜度和部分结果表达,避免索引滞后产生错误结论 基于会话实现真正的增量追新与历史补齐 支持后台同步、取消恢复、重启续传以及同步期间继续查询 优化知识库跨会话检索、同步状态、进度展示和侧栏布局
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { QueryAgentService, type QueryAgentProvider } from '../../src/main/services/query-agent-service'
|
||||
|
||||
function capturingProvider(configured = true): {
|
||||
provider: QueryAgentProvider
|
||||
calls: Array<{ messages: Array<Record<string, unknown>>; tools: string[] }>
|
||||
} {
|
||||
const calls: Array<{ messages: Array<Record<string, unknown>>; tools: string[] }> = []
|
||||
const provider: QueryAgentProvider = {
|
||||
getRuntimeConfig: () => ({
|
||||
configured,
|
||||
providerName: 'Fixture Provider',
|
||||
model: 'fixture-model',
|
||||
modelName: 'Fixture Model'
|
||||
}),
|
||||
chatWithTools: vi.fn(async (messages, tools) => {
|
||||
calls.push({ messages, tools: tools.map((tool) => tool.function.name) })
|
||||
return { success: true, data: 'ok' }
|
||||
})
|
||||
}
|
||||
return { provider, calls }
|
||||
}
|
||||
|
||||
describe('QueryAgentService — 历史上下文不改变毕业语义', () => {
|
||||
it('不传 history 时 messages 仍然只有 system + user(与毕业版本一致)', async () => {
|
||||
const { provider, calls } = capturingProvider()
|
||||
const service = new QueryAgentService(provider, vi.fn())
|
||||
|
||||
await service.run('我和 BOBO 第一次聊了什么')
|
||||
|
||||
expect(calls[0].messages.map((message) => message.role)).toEqual(['system', 'user'])
|
||||
expect(calls[0].messages[1]).toMatchObject({ content: '我和 BOBO 第一次聊了什么' })
|
||||
expect(calls[0].tools).toEqual([
|
||||
'query_messages',
|
||||
'search_messages',
|
||||
'message_context',
|
||||
'conversation_overview'
|
||||
])
|
||||
})
|
||||
|
||||
it('传 history 时按 问 / 答 顺序插在 system 之后', async () => {
|
||||
const { provider, calls } = capturingProvider()
|
||||
const service = new QueryAgentService(provider, vi.fn())
|
||||
|
||||
await service.run('是 BOBO', {
|
||||
history: [{ question: '我们第一次聊了什么', answer: '你说的是哪位联系人?' }]
|
||||
})
|
||||
|
||||
expect(calls[0].messages.map((message) => message.role)).toEqual([
|
||||
'system',
|
||||
'user',
|
||||
'assistant',
|
||||
'user'
|
||||
])
|
||||
})
|
||||
|
||||
it('失败分类是 additive 字段:成功时不存在', async () => {
|
||||
const { provider } = capturingProvider()
|
||||
const service = new QueryAgentService(provider, vi.fn())
|
||||
|
||||
const result = await service.run('你好')
|
||||
|
||||
expect(result.errorKind).toBeUndefined()
|
||||
expect(result.answer).toBe('ok')
|
||||
})
|
||||
|
||||
it('Provider 未配置 / 空问题仍返回可区分的失败分类', async () => {
|
||||
const notConfigured = new QueryAgentService(capturingProvider(false).provider, vi.fn())
|
||||
const unconfigured = await notConfigured.run('你好')
|
||||
expect(unconfigured.errorKind).toBe('provider_unavailable')
|
||||
expect(unconfigured.modelCallCount).toBe(0)
|
||||
|
||||
const configured = new QueryAgentService(capturingProvider().provider, vi.fn())
|
||||
const empty = await configured.run(' ')
|
||||
expect(empty.errorKind).toBe('invalid_question')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user