mimo code rag知识库接入需三步:先确认服务健康并验证/v1/query接口可用;再规范整理api文档等三类文本至单层目录并清洗文件名;最后用cli、http api或python sdk注入知识,调用时按条件触发检索并将top-k结果注入prompt。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

将MiMo Code RAG知识库接入现有开发项目,让代码生成模型能实时调用你私有的API文档、内部SDK说明和历史故障排查记录,避免模型“瞎猜”接口参数或返回结构。
确认RAG服务已部署并可访问
打开终端,执行 curl -X GET "http://localhost:8000/health",返回 {"status":"healthy"} 表示服务正常。如果报错 connection refused,说明服务未启动,需先运行 docker-compose up -d 启动容器组。
访问 http://localhost:8000/docs 查看FastAPI自动生成的交互式文档页面,确认 【/v1/query 接口存在且 method 为 POST】,这是后续调用的唯一入口。
准备待注入的知识源文件
整理三类文本文件:Markdown格式的API手册(如 api_v3.md)、JSON Schema定义(如 user_profile_schema.json)、纯文本故障案例(如 error_502_timeout.txt)。
所有文件必须放在同一目录下(例如 ./rag_data/),且不能包含子文件夹——否则加载时会跳过嵌套路径,导致知识缺失。
文件名中不要出现空格或中文括号(如“用户登录(新版).md”),改用下划线,因为部分解析器会因URL编码异常而静默丢弃该文件。
向知识库批量注入文档
方法一:使用内置CLI工具注入
在项目根目录执行:python -m mimocode.rag ingest --data-dir ./rag_data/ --chunk-size 512 --overlap 64。其中 --chunk-size 决定单个文本块长度,过大会丢失上下文关联,过小会导致检索召回碎片化。
方法二:通过HTTP API逐条提交
构造POST请求:curl -X POST http://localhost:8000/v1/ingest -H "Content-Type: application/json" -d '{"text": "POST /v1/users 201 Created 返回 user_id 和 created_at 字段", "metadata": {"source": "api_log_202404.md"}}'。每次只能传一条,适合调试单条高优先级内容,但不适用于百量级文档。
方法三:调用Python SDK批量写入
安装SDK:pip install mimocode-rag-sdk;然后编写脚本:
from mimocode.rag import RAGClient<br>client = RAGClient(base_url="http://localhost:8000")<br>client.bulk_ingest(files=["./rag_data/api_v3.md", "./rag_data/error_502_timeout.txt"])
这一步执行完成后,终端会打印类似 Ingested 127 chunks from 2 files 的日志,【请勿跳过该日志确认环节】,没有输出即代表未真正写入。
在代码生成流程中调用RAG检索结果
第一步:在生成函数前插入检索逻辑
假设你正在编写一个生成Flask路由函数的prompt,先用RAG查出相关接口约束:
query = "如何实现带JWT校验的POST /v1/orders接口?" → response = requests.post("http://localhost:8000/v1/query", json={"query": query, "top_k": 3})
第二步:解析返回的context片段
响应体中 response.json()["results"] 是按相关性排序的列表,每个元素含 text 和 metadata。取前两项拼接成context字符串,直接注入到LLM prompt的system message中。
第三步:控制检索触发时机
仅当用户输入含明确动词+路径(如“写一个GET /metrics接口”)或术语如“JWT”“幂等”“429”时才触发RAG查询,否则跳过——频繁无效检索会拖慢整体响应,且无意义context反而干扰模型判断。










