14.板端Qwen3-VL知识库实现

📅 发布时间:2026/8/12 17:17:52
14.板端Qwen3-VL知识库实现 一、整体架构二、核心组件1. ChunkParser文档分块器职责 将上传的文本文档切割成合适大小的知识块关键参数 min_chunk_size_ : 最小块大小默认150字符max_chunk_size_ : 最大块大小默认250字符overlap_size_ : 重叠字符数默认30字符核心方法 parse_text() : 解析文本内容为块get_utf8_boundary() : 确保在UTF-8字符边界分割 解决中文乱码关键merge_short_chunks() : 合并过短的块分块策略 按段落分割段落过长时按字符数切分确保UTF-8边界短段落合并避免碎片化相邻块保留重叠保证上下文连贯2. KnowledgeStore知识存储职责 知识的持久化存储与检索检索算法 IDF加权包含相似度核心思想用查询的n-gram在文档中查找匹配按IDF加权计算得分 1. 将查询和文档都转为2-gram集合 2. 统计每个gram在所有文档中的出现频率(df) 3. 计算每个gram的IDF权重: log((总文档数1)/df) 4. 匹配得分 匹配到的gram权重之和 / 查询所有gram权重之和 5. 阈值过滤默认0.3取Top-K默认53. rag_serverWeb服务职责 提供HTTP接口供用户上传文档技术栈 cpp-httplib轻量级C HTTP库接口 POST /upload : 上传文档支持.txt和.mdGET / : 上传页面upload.html文件处理流程 格式验证仅支持txt/md大小限制5MB编码检测UTF-8BOM头清理非法字符过滤控制字符等分块解析批量写入数据库三、知识检索流程与LLM集成在 main.cpp 中用户提问时的处理流程关键判断逻辑 相似度 0.3 时使用知识库相似度 0.3 时使用记忆库知识库优先记忆库补充四、技术选型决策五、关键问题与解决方案六、文件清单deploy/src/ ├── knowledge_store.h # 知识存储接口定义 ├── knowledge_store.cpp # 知识存储实现含检索算法 ├── chunk_parser.h # 分块器接口 ├── chunk_parser.cpp # 分块器实现UTF-8处理 ├── rag_server.cpp # Web上传服务 ├── main.cpp # 主程序集成知识记忆LLM └── memory_store.h # 对话记忆已有七.使用方式1.启动文档上传服务./rag_server --db knowledge.db --port 8080 --web ./web2.上传知识文档浏览器访问 http://ip:8080选择txt/md文件上传3.启动对话程序./demo demo.jpg ../models/qwen3-vl_vision_rk3588.rknn ../models/qwen3-vl-2b-instruct_w8a8_rk3588.rkllm 2048 4096 3 |vision_start| |vision_end| |image_pad|4.查看知识库sqlite3 knowledge.db SELECT * FROM knowledge_base LIMIT 5; SELECT * FROM documents;八.边界情况处理空文档 上传时检测并拒绝非UTF-8编码 检测编码提示用户转换超大文件 5MB限制防止内存溢出知识库为空 检索时直接返回空结果并发访问 使用 std::mutex 保护数据库操作八.实际运行结果1.文档上传2.知识库查看3.RK3588 使用RAG进行增强检索