mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-15 15:41:05 +00:00
339 lines
9.7 KiB
TypeScript
339 lines
9.7 KiB
TypeScript
import { createTokenizer } from '@orama/tokenizers/mandarin';
|
|
|
|
export const enhancedTokenizer = () => {
|
|
// 整词配置 - 需要保持完整的词汇
|
|
const wholeWords = [
|
|
// 产品相关
|
|
'fastgpt',
|
|
'FastGPT',
|
|
'快速GPT',
|
|
'Saas',
|
|
'SaaS',
|
|
'云服务',
|
|
'社区版',
|
|
'商业版',
|
|
'开源版',
|
|
'企业版',
|
|
'专业版',
|
|
'智能对话系统',
|
|
'AI应用平台',
|
|
'知识库问答系统',
|
|
|
|
// 核心功能模块
|
|
'知识库',
|
|
'工作流',
|
|
'应用构建',
|
|
'对话管理',
|
|
'可视化编排',
|
|
'拖拽式设计',
|
|
'零代码搭建',
|
|
'低代码开发',
|
|
'流程编排',
|
|
|
|
// 工作流节点
|
|
'AI对话',
|
|
'知识库搜索',
|
|
'问题分类',
|
|
'内容提取',
|
|
'用户选择',
|
|
'表单输入',
|
|
'文本编辑',
|
|
'指定回复',
|
|
'文档解析',
|
|
'HTTP请求',
|
|
'真假判断',
|
|
'变量更新',
|
|
'代码运行',
|
|
'循环',
|
|
'指代消解',
|
|
'自定义反馈',
|
|
'工具调用',
|
|
|
|
// AI模型相关
|
|
'AI',
|
|
'Agent',
|
|
'LLM',
|
|
'大语言模型',
|
|
'ChatGPT',
|
|
'GPT-4',
|
|
'GPT-3.5',
|
|
'Claude',
|
|
'文心一言',
|
|
'通义千问',
|
|
'DeepSeek',
|
|
'Function Call',
|
|
'Prompt',
|
|
'提示词',
|
|
'系统提示词',
|
|
'Temperature',
|
|
'温度参数',
|
|
'Token',
|
|
'OpenAI',
|
|
'Anthropic',
|
|
'百度',
|
|
'阿里云',
|
|
'智谱AI',
|
|
'One-API',
|
|
'AI-Proxy',
|
|
'Ollama',
|
|
'Xinference',
|
|
|
|
// 技术术语
|
|
'API',
|
|
'OpenAPI',
|
|
'SSO',
|
|
'MCP',
|
|
'向量数据库',
|
|
'语义搜索',
|
|
'embedding',
|
|
'RAG',
|
|
'检索增强生成',
|
|
'PGVector',
|
|
'Milvus',
|
|
'MongoDB',
|
|
'PostgreSQL',
|
|
'Redis',
|
|
'Docker',
|
|
'Sealos',
|
|
'Nginx',
|
|
'Cloudflare',
|
|
|
|
// 数据处理
|
|
'数据集',
|
|
'Dataset',
|
|
'文档导入',
|
|
'数据处理',
|
|
'索引模型',
|
|
'重排模型',
|
|
'分块策略',
|
|
'增强处理',
|
|
'问答拆分',
|
|
'向量化',
|
|
'文本分割',
|
|
'知识结构化',
|
|
'自动索引',
|
|
'图片标注',
|
|
'OCR识别',
|
|
|
|
// 集成相关
|
|
'Webhook',
|
|
'第三方集成',
|
|
'企业微信',
|
|
'钉钉',
|
|
'DingTalk',
|
|
'飞书',
|
|
'Feishu',
|
|
'Lark',
|
|
'微信公众号',
|
|
|
|
// 业务概念
|
|
'沙盒',
|
|
'Sandbox',
|
|
'插件',
|
|
'Plugin',
|
|
'模板',
|
|
'权限管理',
|
|
'团队协作',
|
|
'用户角色',
|
|
'访问控制',
|
|
'数据安全',
|
|
'隐私保护',
|
|
|
|
// 界面元素
|
|
'工作台',
|
|
'Dashboard',
|
|
'调试预览',
|
|
'发布分享',
|
|
'对话窗口',
|
|
'聊天界面',
|
|
'引用展示',
|
|
'猜你想问',
|
|
'文件上传',
|
|
'表单配置',
|
|
'系统配置',
|
|
'模型配置',
|
|
'参数设置',
|
|
'高级编排',
|
|
'简易模式',
|
|
'专业模式',
|
|
|
|
// 搜索插件
|
|
'Bing搜索',
|
|
'Google搜索',
|
|
'SearXNG搜索',
|
|
'Doc2x插件',
|
|
|
|
// 文件格式
|
|
'PDF',
|
|
'Word',
|
|
'Excel',
|
|
'CSV',
|
|
'TXT',
|
|
'Markdown',
|
|
'JSON',
|
|
|
|
// 部署运维
|
|
'环境变量',
|
|
'config.json',
|
|
'配置文件',
|
|
'负载均衡',
|
|
'高可用',
|
|
'容灾备份',
|
|
'监控告警',
|
|
'性能优化',
|
|
'响应速度',
|
|
'并发处理',
|
|
'缓存机制',
|
|
|
|
// 多语言
|
|
'i18n',
|
|
'国际化',
|
|
'中文',
|
|
'英文',
|
|
'日文',
|
|
'多语言支持',
|
|
|
|
// 版本管理
|
|
'版本更新',
|
|
'升级指南',
|
|
'更新日志',
|
|
'兼容性',
|
|
'迁移指南'
|
|
];
|
|
|
|
// 同义词配置 - 为整词添加相关的同义词
|
|
const synonymsMap: Record<string, string[]> = {
|
|
// 产品版本相关
|
|
开源版: ['社区版', '开源', '开源版', '免费版'],
|
|
商业版: ['商业版', '付费版', '企业版', '专业版', '标准版', '高级版'],
|
|
社区版: ['社区版', '开源版', '免费版'],
|
|
企业版: ['企业版', '商业版', '付费版', '专业版'],
|
|
|
|
// 核心功能
|
|
知识库: ['知识库', '知识体系', '数据库', '文档库', '资料库', '信息库', '语料库'],
|
|
工作流: ['工作流', '流程', '工作流程', '业务流程', '可视化流程', '流程图', '编排', '组合'],
|
|
应用构建: ['应用构建', '应用搭建', '应用创建', '搭建', '构建', '创建应用'],
|
|
对话管理: ['对话管理', '聊天管理', '会话管理', '对话控制'],
|
|
|
|
// AI相关
|
|
AI: ['AI', '人工智能', '机器学习', '深度学习', '智能', '智能化'],
|
|
大语言模型: ['大语言模型', 'LLM', '语言模型', '大模型', '生成式AI', '对话模型'],
|
|
Agent: ['Agent', '智能体', '代理', '智能助手', 'AI助理', '机器人'],
|
|
提示词: ['提示词', 'Prompt', '指令', '命令', '提示', '指示'],
|
|
|
|
// 技术概念
|
|
API: ['API', '接口', '接口调用', '应用程序接口', '集成接口', '外部接口'],
|
|
向量数据库: ['向量数据库', '向量存储', '向量索引', 'Vector Database'],
|
|
语义搜索: [
|
|
'语义搜索',
|
|
'语义检索',
|
|
'智能检索',
|
|
'相似度搜索',
|
|
'向量搜索',
|
|
'检索系统',
|
|
'搜索引擎'
|
|
],
|
|
RAG: ['RAG', '检索增强生成', '检索增强', '知识检索'],
|
|
|
|
// 数据处理
|
|
数据集: ['数据集', 'Dataset', '数据源', '数据', '资料'],
|
|
文档导入: ['文档导入', '文件导入', '数据导入', '批量导入', '上传文档'],
|
|
数据处理: ['数据处理', '文档处理', '内容处理', '文件解析', '信息提取', '结构化处理'],
|
|
向量化: ['向量化', 'embedding', '向量转换', '特征提取'],
|
|
|
|
// 界面相关
|
|
工作台: ['工作台', 'Dashboard', '控制台', '管理台', '操作台', '仪表板'],
|
|
调试预览: ['调试预览', '预览', '调试', '测试', '试运行'],
|
|
发布分享: ['发布分享', '发布', '分享', '部署', '上线'],
|
|
|
|
// 插件相关
|
|
插件: ['插件', 'Plugin', '扩展', '组件', '模块', '附加功能', '外部工具', '第三方工具'],
|
|
搜索插件: ['搜索插件', '搜索工具', '搜索扩展', '网络搜索'],
|
|
|
|
// 集成相关
|
|
第三方集成: ['第三方集成', '外部集成', '平台集成', '系统对接', '接口集成'],
|
|
企业微信: ['企业微信', '企微', 'WeWork'],
|
|
钉钉: ['钉钉', 'DingTalk', '阿里钉钉'],
|
|
飞书: ['飞书', 'Feishu', 'Lark', '字节飞书'],
|
|
|
|
// 权限管理
|
|
权限管理: ['权限管理', '访问控制', '用户权限', '权限控制', '授权管理'],
|
|
团队协作: ['团队协作', '多人协作', '协同工作', '团队管理'],
|
|
用户角色: ['用户角色', '角色管理', '权限角色', '用户权限'],
|
|
|
|
// 安全相关
|
|
数据安全: ['数据安全', '信息安全', '数据保护', '安全防护'],
|
|
隐私保护: ['隐私保护', '数据隐私', '信息保护', '隐私安全'],
|
|
访问控制: ['访问控制', '权限控制', '访问权限', '安全认证'],
|
|
|
|
// 部署相关
|
|
Docker: ['Docker', '容器', '容器化', '镜像部署'],
|
|
环境变量: ['环境变量', '配置变量', '系统变量', '环境配置'],
|
|
配置文件: ['配置文件', '配置', '设置文件', 'config'],
|
|
|
|
// 性能相关
|
|
性能优化: ['性能优化', '系统优化', '速度提升', '效率优化', '性能调优'],
|
|
响应速度: ['响应速度', '响应时间', '处理速度', '执行速度'],
|
|
并发处理: ['并发处理', '并发', '多线程', '高并发'],
|
|
缓存机制: ['缓存机制', '缓存', '内存缓存', '数据缓存'],
|
|
|
|
// 多语言
|
|
国际化: ['国际化', 'i18n', '多语言', '本地化'],
|
|
多语言支持: ['多语言支持', '多语言', '国际化支持', '语言切换'],
|
|
|
|
// 版本管理
|
|
版本更新: ['版本更新', '系统更新', '功能更新', '补丁更新', '版本升级'],
|
|
升级指南: ['升级指南', '更新指南', '迁移指南', '升级说明'],
|
|
更新日志: ['更新日志', '版本日志', '修改日志', '发布日志'],
|
|
|
|
// 工作流节点
|
|
AI对话: ['AI对话', 'AI聊天', '智能对话', '机器人对话'],
|
|
知识库搜索: ['知识库搜索', '文档搜索', '资料搜索', '内容搜索'],
|
|
问题分类: ['问题分类', '意图识别', '分类器', '问题识别'],
|
|
内容提取: ['内容提取', '信息提取', '文本提取', '数据提取'],
|
|
用户选择: ['用户选择', '选择器', '用户输入', '交互选择'],
|
|
表单输入: ['表单输入', '用户输入', '数据输入', '信息收集'],
|
|
文档解析: ['文档解析', '文件解析', '内容解析', '格式转换'],
|
|
代码运行: ['代码运行', '代码执行', '脚本执行', '沙盒执行'],
|
|
工具调用: ['工具调用', '函数调用', 'Function Call', 'API调用']
|
|
};
|
|
|
|
const baseTokenizer = createTokenizer();
|
|
|
|
return {
|
|
...baseTokenizer,
|
|
tokenize: (text: string) => {
|
|
// 先处理整词,用特殊标记保护它们
|
|
let processedText = text;
|
|
const protectedTokens = new Map();
|
|
let tokenIndex = 0;
|
|
|
|
wholeWords.forEach((word) => {
|
|
const regex = new RegExp(`\\b${word}\\b`, 'gi');
|
|
processedText = processedText.replace(regex, (match) => {
|
|
const placeholder = `__PROTECTED_TOKEN_${tokenIndex}__`;
|
|
protectedTokens.set(placeholder, match.toLowerCase());
|
|
tokenIndex++;
|
|
return placeholder;
|
|
});
|
|
});
|
|
|
|
// 用基础分词器处理
|
|
let tokens = baseTokenizer.tokenize(processedText);
|
|
|
|
// 恢复被保护的整词,并添加同义词
|
|
tokens = tokens
|
|
.map((token) => {
|
|
if (protectedTokens.has(token)) {
|
|
const originalWord = protectedTokens.get(token);
|
|
return synonymsMap[originalWord] || [originalWord];
|
|
}
|
|
return token;
|
|
})
|
|
.flat();
|
|
|
|
return [...new Set(tokens)]; // 去重
|
|
}
|
|
};
|
|
};
|