agent-knowledge-smoke-test.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict';
  2. const assert = require('assert/strict');
  3. const path = require('path');
  4. const { AgentKnowledgeStore, stripRetrievalAliases, scoreKnowledgeChunk } = require('../mcp/src/core/agent-knowledge');
  5. function main() {
  6. const knowledge = new AgentKnowledgeStore({
  7. knowledgeDir: path.resolve(__dirname, '..', 'knowledge'),
  8. });
  9. const rules = knowledge.compactRulesText();
  10. assert.match(rules, /把客户当前问题闭环/);
  11. assert.match(rules, /像真人微信交流,普通回复限定 1-3 句、优先 50-80 字、问号最多 1 个/);
  12. assert.match(rules, /不是每轮必须提问/);
  13. assert.doesNotMatch(rules, /接触即邀约|默认朝向邀约带看|每一轮沟通的真实目的都是把客户约出来带看/);
  14. assert.doesNotMatch(rules, /专业房产经纪人|促成有效带看/);
  15. const index = knowledge.knowledgeIndex();
  16. assert.match(index, /knowledge\/customer-service\/chat-role\.md/);
  17. assert.doesNotMatch(index, /knowledge\/real-estate\//);
  18. const stats = knowledge.stats();
  19. assert(stats.knowledgeChunks >= 8, `expected knowledge chunks, got ${stats.knowledgeChunks}`);
  20. const headingHit = scoreKnowledgeChunk({
  21. heading: '北极星目标',
  22. content: '辅助说明',
  23. }, ['北极星']);
  24. const bodyHit = scoreKnowledgeChunk({
  25. heading: '其他',
  26. content: '这里也提到北极星作为背景',
  27. }, ['北极星']);
  28. assert(headingHit > bodyHit, `heading should outrank body: ${headingHit} vs ${bodyHit}`);
  29. const billing = knowledge.search('怎么收费', 5);
  30. assert(billing.length > 0);
  31. assert(billing.some(item => /收费|费用|人工/.test(`${item.heading}\n${item.content}`)));
  32. const aliasQuery = knowledge.search('客服机器人', 5);
  33. assert(aliasQuery.some(item => item.source === 'faq.md'));
  34. for (const item of aliasQuery) {
  35. assert.doesNotMatch(item.content, /常见说法/);
  36. }
  37. assert.equal(stripRetrievalAliases('> 常见说法:客服机器人\n\n正文').includes('常见说法'), false);
  38. process.stdout.write(`${JSON.stringify({
  39. status: 'ok',
  40. chunks: stats.knowledgeChunks,
  41. billingHits: billing.length,
  42. }, null, 2)}\n`);
  43. }
  44. try { main(); }
  45. catch (error) {
  46. process.stderr.write(`${error.stack || error.message}\n`);
  47. process.exit(1);
  48. }