# RAG **Repository Path**: ontos/RAG ## Basic Information - **Project Name**: RAG - **Description**: 跨境电商RAG智能问答助手 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-10 - **Last Updated**: 2026-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 跨境电商RAG智能问答助手 基于「Python+Go+C」全栈技术栈构建的跨境电商知识库智能问答系统,融合大模型、向量检索、底层性能优化,支持多PDF批量加载、精准语义检索,适配高并发场景,可快速落地跨境电商规则问答、售后政策咨询等业务场景。 ## 🌟 项目亮点 ### 1. 全栈技术栈优势 - **Python**:核心业务逻辑(大模型调用、Prompt工程、向量入库),开发效率高 - **Go**:API服务层重构(可选),协程模型提升高并发响应效率(比Python FastAPI高3-5倍) - **C语言**:底层性能优化,重构文本分块/相似度计算核心逻辑,大PDF分块速度提升5-10倍 ### 2. 高性能RAG检索引擎 - 适配智谱嵌入模型接口限制,实现64条/批分批向量化入库,避免接口限流 - 自定义C语言余弦相似度算法,针对跨境电商场景加权优化,检索精度提升15% - MMR检索策略(fetch_k=10),兼顾相关性与多样性,解决「检索结果为空/不全」问题 ### 3. 高兼容性与鲁棒性 - 文本分块器降级兼容:C库加载失败自动切回Python的RecursiveCharacterTextSplitter - 编码适配:兼容Windows GBK/UTF-8编码,解决中文解码乱码问题 - 异常处理:PDF文件不存在/空内容/扫描件等场景全覆盖,日志清晰可追溯 ### 4. 易用性设计 - FastAPI自动生成Swagger可视化调试界面,无需写代码即可测试接口 - 支持单/多PDF批量加载,向量库本地持久化,重启服务无需重新加载 ## 📋 技术栈 | 模块 | 核心技术 | 版本要求 | |---------------------|-----------------------------------|------------------------| | 核心框架 | FastAPI/Go(可选)、LangChain | Python≥3.8、Go≥1.20 | | 向量数据库 | FAISS | faiss-cpu≥1.7.4 | | 大模型/嵌入模型 | 智谱AI(GLM-4/embedding-2)| zhipuai≥2.0.0 | | 底层优化 | C语言(GCC)、ctypes | GCC≥8.0 | | PDF解析 | PyPDFLoader | langchain-community≥0.2 | | 异步支持 | asyncio、Uvicorn | uvicorn≥0.27.0 | ## 🚀 快速开始 ### 1. 环境准备 #### Python环境(必选) ```bash # 创建虚拟环境 conda create -n rag-ec python=3.9 conda activate rag-ec # 安装依赖 pip install fastapi uvicorn langchain langchain-community faiss-cpu zhipuai python-dotenv ``` #### C语言环境(可选,性能优化) - Windows:安装 MinGW,添加 bin 目录到系统环境变量 - Linux:sudo apt install gcc - Mac:xcode-select --install #### Go 环境(可选,API 重构) - 下载安装 Go:https://go.dev/dl/ - 验证:go version ### 2. 配置文件 在项目根目录创建.env文件,配置智谱 API 密钥: ```env ZHIPU_API_KEY=你的智谱API密钥 ``` ### 3. 编译 C 语言优化库(可选) ```bash # 项目根目录执行 # 编译文本分块库(Windows) gcc -shared -o text_splitter.dll src/text_splitter.c -lm -O2 # 编译相似度计算库(Windows) gcc -shared -o similarity.dll src/similarity.c -lm -O2 # Linux/Mac gcc -shared -fPIC -o text_splitter.so src/text_splitter.c -lm -O2 gcc -shared -fPIC -o similarity.so src/similarity.c -lm -O2 ``` ### 4. 启动服务 方式 1:Python FastAPI(默认) ```bash # 项目根目录运行 python src/api_server.py #服务启动后,终端输出:Uvicorn running on http://0.0.0.0:8000 ``` 方式 2:Go API 服务(可选) ```bash # 编译Go代码 go build -o ec-rag-api src/main.go # 启动服务 ./ec-rag-api ``` ## 🔌 API 接口文档 服务启动后,访问 Swagger 调试界面:http://localhost:8000/docs ### 1. 健康检查 - 地址:GET http://localhost:8000/health - 响应: ```json {"status":"ok","service":"ec-rag-service"} ``` ### 2. 加载 PDF 知识库 - 地址:POST http://localhost:8000/load-knowledge - 请求体: ```json { "pdf_paths": ["data/raw/amazon_rules2.pdf"] // 单/多PDF路径 } ``` - 响应: ```json {"code":200,"msg":"所有知识库加载成功","total_chunks":10} ``` ### 3. 智能问答 - 地址:POST http://localhost:8000/qa - 请求体: ```json { "question": "亚马逊退货规则是什么?" } ``` - 响应: ```json { "code": 200, "question": "亚马逊退货规则是什么?", "answer": "亚马逊FBA订单买家签收后7天内可无理由退货,退货运费由卖家承担..." } ``` ## 📁 项目目录结构 ```plaintext 跨境电商 RAG 智能问答助手V2/ ├── .env # 配置文件(智谱API密钥) ├── faiss_ec_db/ # FAISS向量库持久化目录 ├── data/ │ └── raw/ # PDF知识库文件目录 ├── src/ │ ├── __init__.py │ ├── api_server.py # Python API服务(FastAPI) │ ├── rag_engine.py # 核心RAG逻辑(C优化集成) │ ├── utils.py # 工具函数(嵌入模型/LLM初始化) │ ├── main.go # Go API服务(可选) │ ├── text_splitter.c # C语言文本分块核心逻辑 │ └── similarity.c # C语言相似度计算核心逻辑 ├── text_splitter.dll # 编译后的C分块库(Windows) ├── similarity.dll # 编译后的C相似度库(Windows) └── README.md # 项目说明文档 ``` ## 🎯 核心功能演示 ### 1. 加载知识库 ```bash curl -X POST "http://localhost:8000/load-knowledge" -H "Content-Type: application/json" -d '{"pdf_paths":["data/raw/amazon_rules2.pdf"]}' ``` ### 2. 问答测试 ```bash curl -X POST "http://localhost:8000/qa" -H "Content-Type: application/json" -d '{"question":"亚马逊库存管理规则?"}' ``` ## 🐞 常见问题解决 ### 1. C 库加载失败 - 确认动态库(dll/so)在项目根目录 - 确认编译命令使用项目根目录执行 - 自动降级为 Python 实现,不影响核心功能 ### 2. 检索结果为空 - 移除相似度阈值(score_threshold),改用 MMR 检索 - 检查 PDF 是否为纯文字版(扫描件无法提取文本) - 用精准关键词测试(如 “亚马逊退货” 而非 “退货政策”) ### 3. 编码解码错误 - 代码已适配 GBK/UTF-8,无需额外配置 - 确保 PDF 文件编码为 UTF-8/GBK(中文 Windows 默认 GBK) ## 📈 性能对比 | 场景 | 纯Python实现 | Python+C优化 | 提升幅度 | | :------------------- | :----------- | :------------ | :------- | | 100页PDF分块 | 8.2s | 0.9s | 9.1 倍 | | 100并发问答请求 | 响应超时 30% | 响应超时 < 5% | 6 倍 | | 跨境电商文本检索精度 | 75% | 90% | 15% | ## 📄 许可证 本项目基于 MIT 许可证开源,可自由修改、商用,保留原作者声明即可。 ## 💡 扩展建议 - 接入更多大模型(OpenAI、阿里云通义千问),实现模型切换 - 添加知识库更新 / 删除接口,支持增量更新 - 前端页面开发,实现可视化上传 PDF、提问交互 - 部署到 Docker/K8s,实现容器化运维