第四章:大模型(LLM)

第十一部分:LLM + RAG 构建私有领域专家

第三节:RAG 实战——使用通义千问 API 实现一个调用通义千问模型的 RAG


1. 背景介绍

在私有领域(例如医疗、金融、法律、制造业等)中,企业往往拥有大量专业文档,但这些知识通常无法直接被通用大模型学习。
RAG(Retrieval-Augmented Generation) 提供了一个解决方案:通过向量数据库存储知识,并在推理阶段进行检索,将相关内容注入到模型 Prompt 中,从而增强模型的专业问答能力。

本节我们将以 通义千问(Qwen)API 为例,演示如何搭建一个 RAG 应用,实现领域专家系统。


2. 实现流程

整个 RAG 系统由三部分组成:

  1. 数据准备:将领域知识(PDF、Word、txt 文档)转为文本,并切分为合适的段落。

  2. 向量化存储:利用通义千问 Embedding API 生成向量,存入向量数据库(如 FAISS、Milvus、Weaviate)。

  3. 问答流程:用户输入问题 → 检索数据库 → 召回相关文档 → 拼接到 Prompt → 调用通义千问模型生成答案。


3. 环境准备

需要安装以下 Python 包:

pip install openai faiss-cpu

配置环境变量(以 OpenAI SDK 兼容的方式调用通义千问 API):

import os
from openai import OpenAI

# 替换为你的通义千问 API Key
os.environ["OPENAI_API_KEY"] = "your_qwen_api_key"
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

4. 向量化与存储
import faiss
import numpy as np

# 示例文档
docs = [
    "通义千问是阿里巴巴研发的大语言模型。",
    "RAG 可以通过检索增强生成,提高问答的准确性。",
    "在金融领域,RAG 可用于合规文档查询与智能问答。"
]

# 生成向量
embeddings = []
for doc in docs:
    resp = client.embeddings.create(model="text-embedding-v1", input=doc)
    embeddings.append(resp.data[0].embedding)

# 转换为 numpy 数组
embedding_matrix = np.array(embeddings).astype("float32")

# 建立向量索引
index = faiss.IndexFlatL2(embedding_matrix.shape[1])
index.add(embedding_matrix)

5. RAG 推理流程
def rag_query(query, top_k=2):
    # 1. 生成查询向量
    resp = client.embeddings.create(model="text-embedding-v1", input=query)
    query_vec = np.array(resp.data[0].embedding).astype("float32").reshape(1, -1)

    # 2. 检索
    D, I = index.search(query_vec, top_k)
    retrieved_docs = [docs[i] for i in I[0]]

    # 3. 构造 Prompt
    context = "\n".join(retrieved_docs)
    prompt = f"已知信息:\n{context}\n\n用户问题:{query}\n请基于已知信息回答用户问题:"

    # 4. 调用通义千问模型
    response = client.chat.completions.create(
        model="qwen-plus",
        messages=[
            {"role": "system", "content": "你是一个专业领域助手。"},
            {"role": "user", "content": prompt}
        ]
    )
    return response.choices[0].message.content

# 示例调用
print(rag_query("RAG 在金融领域的应用是什么?"))

6. 效果展示

输入:

RAG 在金融领域的应用是什么?

输出(示例):

RAG 在金融领域可用于自动化合规检查、智能客服问答、风险报告生成等场景。通过向量检索技术,它能快速定位到相关法规与金融文档,并结合大模型生成自然语言答案。

7. 总结

通过通义千问 API,我们实现了一个 简易 RAG 系统

  • 使用 Embedding 向量化 文档知识;

  • 借助 FAISS 向量数据库 进行高效检索;

  • 在推理时通过 Prompt 注入领域知识,增强通义千问的专业表现。

该方案具有以下优点:

  • 灵活性:支持任意私有领域文档;

  • 低成本:无需重新微调大模型;

  • 实用性:可快速构建企业级问答助手。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐