# code-rag **Repository Path**: zhongzhaoxie/code-rag ## Basic Information - **Project Name**: code-rag - **Description**: 离线辅助编程AI助手 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-12 - **Last Updated**: 2026-02-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 1. CODE-RAG架构 ``` 用户问题 ↓ 问题分类 ↓ 选择库(code or pdf) ↓ dense + sparse 召回 top20 ↓ rerank ↓ top3 拼接 ↓ LLM ``` 1.1 用户请求预处理 问题清洗:去特殊字符、错别字校正、意图识别 场景分类:自动识别「部署咨询 / 代码答疑 / 性能调优」,定向检索 1.2 多路粗检索 采用 「向量检索 + BM25 关键词检索」 多路召回,避免单一检索漏召回: 向量检索:用户问题 Embedding→向量库匹配→召回 Top20 关键词检索:BM25 国产适配→关键词匹配→召回 Top10 合并去重:多路结果融合,去重后得到候选集 Top30 元数据过滤:按用户问题的硬件 / 平台过滤无关分块 1.3 重排精排 国产重排精排(后重排:精准度≥90%) 重排模型:BGE-rerank-base-zh(轻量,端侧 / 服务器均可推理,延迟 < 100ms) 推理逻辑:候选集送入重排模型→输出相关性分数→倒序排序→取 Top5 这种架构会存在一个问题,用户问通用的问题时也会参考背景信息,这样会干扰回答的效果,因此需要对Query进行分类(阈值和专用分类模型): ``` 1. top1相似度 < 阈值 → 直接LLM 2. top1相似度 ≥ 阈值 → RAG 3. prompt允许忽略背景 ``` ### 2. 策略优化 #### 2.1 代码和PDF分库:两个向量库 1. 先做代码结构解析 文件名、 类名、函数名、注释、调用关系,然后构造文本,例如: ``` 文件: model.cpp 类: InferEngine 函数: run_inference 描述: 执行端侧推理流程,包含DMA copy和tensor reshape 代码: <代码片段> ``` 2. PDF切分 需要保持PDF有标题结构,有代码块,有表格,有章节逻辑,如果直接按照长度切分,会导致语义被打断,embedding失真。 #### 2.2 需要rerank bge-m3是embdding模型作用是召回而不是排序,工业级RAG一般是:embedding召回20~30,rerank排序,选择top3拼接. ### 3. 附录 vllm启动大模型推理 ``` CUDA_VISIBLE_DEVICES=0,1 vllm serve qwen3-8b/ --host 0.0.0.0 --port 30652 --max-model-len 16384 --tensor-parallel-size 2 ``` 设置环境变量 ``` import os os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" ``` 设置 Hugging Face 镜像地址 ``` export HF_ENDPOINT="https://hf-mirror.com" ``` 端口映射 ``` ssh -L 8000:localhost:8000 root@192.168.150.12 ``` 模型下载 ``` modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local_dir ./deepseek-7b modelscope download --model Qwen/Qwen3-8B --local_dir ./qwen3-8b modelscope download --model Qwen/Qwen3-32B --local_dir ./qwen3-32b ```