跳转至

快速开始

本页面面向调用方。完成以下步骤后,可验证:健康检查、纯检索、完整问答、流式输出、图片隐患识别。

若服务已由他人部署完毕,可直接跳至 第 3 步,将地址替换为对方提供的地址。

1. 配置

CG_RAG 的入口脚本为 backend/src/run_cg_rag_http.sh。建议将非密钥配置写入 YAML 文件,API key 则存放于不纳入版本控制的 secrets 文件:

cp config/question_app.yaml.example config/question_app.yaml
cp config/question_app.secrets.yaml.example config/question_app.secrets.yaml
chmod 600 config/question_app.secrets.yaml

路径与上游配置写入 config/question_app.yaml,密钥配置仅写入 question_app.secrets.yaml。各字段的写法见 字段手册。

仅使用检索功能(无需调用模型)时,生成上游字段可留空。若需使用问答功能,YAML 中至少须包含以下配置:

cg_rag:
  provider: deepseek   # 或 poly / openai_compatible
  generation_endpoint: https://example.com/v1/chat/completions
  generation_model: your-model

以及 secrets 文件中的 cg_rag.api_key。等价的环境变量写法同样有效:

export CG_RAG_GENERATION_ENDPOINT='https://example.com/v1/chat/completions'
export CG_RAG_GENERATION_MODEL='your-model'
export CG_RAG_API_KEY='server-side-secret'
export CG_RAG_LLM_PROVIDER='deepseek'

如需使用图片识别功能,在 cg_rag.vision 下填写 endpoint / model,密钥写入 cg_rag.vision.api_key(或通过 CG_RAG_VISION_* 环境变量配置)。

检索 profile 的语料、索引、embedding 和 rerank 配置写在 retrieval:(含 usual / usual_plus_law / full),完整字段说明见配置指南与 CG 字段手册。

2. 启动

cd backend
bash src/run_cg_rag_http.sh

默认地址:

HTTP: http://127.0.0.1:8864/cg-rag
MCP:  http://127.0.0.1:8864/cg-rag/mcp/

首次启动需加载索引,通常约需一分钟后方可响应请求。

3. 确认服务是否健康

curl --noproxy '*' -sS http://127.0.0.1:8864/cg-rag/health
{
  "ok": true,
  "service": "CG_RAG",
  "available_scopes": ["full", "usual", "usual_plus_law"],
  "active_scope": "full",
  "config_issues": [],
  "generation": { "configured": true, "provider": "deepseek" },
  "vision": { "configured": true }
}

须确认以下四项:ok=true、config_issues 为空、所需 scope 存在于 available_scopes 中、generation.configured=true。如有异常,请参阅故障排查。

响应中不会出现 API key、完整本地路径或上游响应正文,此为预期行为。

4. 只检索,不调用模型

curl --noproxy '*' -sS \
  -X POST http://127.0.0.1:8864/cg-rag/retrieve-rerank \
  -H 'Content-Type: application/json' \
  -d '{"query":"脚手架搭设完毕后,验收应当由谁组织?","scope":"usual","topk":3}'

返回 retrieval_docs 数组,已按相关度降序排列:

{
  "num_docs": 3,
  "retrieval_docs": [
    {
      "law_name": "DB44-1876-2016轮扣式钢管脚手架安全技术规程",
      "article_number": "9.3.5",
      "text": "模板支撑架搭设完毕后,应组织相关人员验收,验收合格后方可进入下一工序施工。",
      "source": "bm25",
      "retrieval_score": 0.9409563541412354
    }
  ],
  "cache": { "hit": false, "ttl_seconds": 300.0 }
}

此接口不调用 LLM。首次请求可能需要加载 retriever,后续请求将复用常驻实例。

5. 完整问答

curl --noproxy '*' -sS \
  -X POST http://127.0.0.1:8864/cg-rag/rag \
  -H 'Content-Type: application/json' \
  -d '{"query":"脚手架搭设完毕后,验收应当由谁组织?","scope":"usual","topk":5,"max_items":3}'
{
  "retrieval": { "num_docs": 5, "retrieval_docs": ["..."] },
  "generation": {
    "ok": true,
    "generation_mode": "constrained",
    "answer_text": "我根据在线检索与候选筛选结果,整理出以下最相关条文:\n1. 《建筑施工竹脚手架安全技术规范》(JGJ254-2011)第7.2.3条:竹脚手架应由单位工程负责人组织技术、安全人员进行检查验收。",
    "pred_indices": [3],
    "usage": { "prompt_tokens": 487, "completion_tokens": 6, "total_tokens": 493 }
  }
}

retrieval 为召回与重排结果,generation 为条文选择结果。

HTTP 200 不等于生成成功

检索成功但模型未选出条文时,HTTP 状态码仍为 200,而 generation.ok 为 false。业务代码必须判断 generation.ok。

pred_indices 为 1-based 序号,对应 retrieval.retrieval_docs 中的位置——取文档时使用 docs[i - 1]。

6. 流式输出

curl --noproxy '*' -N \
  -X POST http://127.0.0.1:8864/cg-rag/rag/stream \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/event-stream' \
  -H 'X-Request-ID: req_quickstart_001' \
  -d '{"query":"施工现场临时用电有哪些关键要求?","scope":"usual_plus_law","topk":20,"max_items":5}'

事件顺序为 progress → retrieval → 若干 token → final。业务失败时会先出现 error 事件,随后仍以结构完整的 final 事件收尾。

客户端须以 final 作为唯一权威终态,不得以接收到最后一个 token 作为结束判断依据。

可运行的解析代码见代码示例。

7. 图片隐患识别

首先确认视觉上游已完成配置:

curl --noproxy '*' -sS http://127.0.0.1:8864/cg-rag/health \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["vision"]["configured"])'

图片以 base64 格式传入。base64 命令在不同系统上参数有所差异:

# Linux
IMG=$(base64 -w0 site.jpg)
# macOS
IMG=$(base64 -i site.jpg)

自由生成模式,单次模型调用、不执行检索,通常数秒内返回:

curl --noproxy '*' -sS \
  -X POST http://127.0.0.1:8864/cg-rag/vision/answer \
  -H 'Content-Type: application/json' \
  -d "{\"images\":[{\"data\":\"$IMG\",\"mime_type\":\"image/jpeg\"}]}"

智能生成模式,模型自行检索法规并给出 [cite^n] 引用,通常需要一到三分钟:

curl --noproxy '*' -sS --max-time 600 \
  -X POST http://127.0.0.1:8864/cg-rag/vision/agentic \
  -H 'Content-Type: application/json' \
  -d "{\"images\":[{\"data\":\"$IMG\",\"mime_type\":\"image/jpeg\"}],\"scope\":\"full\",\"topk\":12}"

两者的字段说明、上限、隐患定级口径及错误码见视觉。

下一步