引言

在现代信息技术快速发展的背景下,智能问答系统已成为提升知识获取效率的重要工具。葡萄城技术团队开发的gc-qa-rag系统采用RAG(Retrieval-Augmented Generation)架构,通过检索增强生成技术,实现了高效、准确的智能问答功能。本文将深入剖析系统中"生成(Generation)"阶段的核心原理与实现细节,揭示如何利用大语言模型(LLM)结合检索知识生成自然流畅、综合全面的答案。

正文

1. 生成流程整体架构

问答生成阶段位于RAG三阶段架构的最后一环,承担着将检索结果转化为自然语言答案的关键任务。其完整工作流程如下:

  1. 用户输入自然语言问题,系统完成混合检索,获取TopK(典型值为8条)高相关知识条目
  2. 知识条目包含问题、答案、详细解释、摘要、原文链接等丰富元数据
  3. 系统整合用户问题与检索结果,构造标准化提示词(Prompt)
  4. 大语言模型(LLM)综合分析上下文与知识库内容
  5. 生成最终答案并附带相关参考信息返回用户。

这一架构设计确保了系统既能充分利用结构化知识库的准确性,又能发挥LLM的自然语言理解和生成能力。

2. 输入结构与提示词工程

生成环节的输入主要由两大核心要素构成:

  • 用户问题(User Input):用户的原始自然语言提问
  • 检索结果(Hits):经过混合检索与RRF融合排序得到的高质量知识条目列表。

系统采用高度结构化的提示词模板,将上述信息有机整合后输入LLM。典型提示词结构如下:

"""
你正在和用户对话,请综合参考上下文以及下面的用户问题和知识库检索结果,回答用户的问题。回答时附上文档链接。
## 用户问题
{keyword}

## 知识库检索结果
{hits_text}
"""

其中hits_text为检索结果的JSON序列化内容,包含以下关键字段:

  • Question:知识条目对应的问题
  • Answer:简洁答案
  • FullAnswer:详细解释
  • Summary:内容摘要
  • Url:原文链接。

这种结构化设计确保LLM能够充分理解和利用检索到的专业知识。

3. 生成服务的技术实现

系统采用异步调用方式实现生成服务,并支持流式输出以优化用户体验。主要技术实现包括:

3.1 消息体组装
async def summary_hits(keyword, messages, hits):
    hits_text = json.dumps(hits, ensure_ascii=False, default=vars)
    hits_prompt = f"""你正在和用户对话,请综合参考上下文以及下面的用户问题和知识库检索结果,回答用户的问题。回答时附上文档链接。
    ## 用户问题
    {keyword}
    ## 知识库检索结果
    {hits_text}
    """
    ...
    return chat(messages_with_hits)
3.2 LLM参数配置
  • 调用chat/completions接口
  • 合理设置temperaturetop_p参数平衡创造性与准确性
  • 启用流式输出(stream=True)实现边生成边返回
3.3 流式处理机制

通过异步迭代方式实时获取模型输出:

async for chunk in completion:
    content = chunk.choices[0].delta.content
    ...

这种实现方式显著降低了用户等待时间,提升了交互体验。

4. 思考模式与推理透明化

为提高答案的可信度和可解释性,系统特别设计了"思考模式"(Reasoning Mode)。在该模式下:

  1. LLM先输出完整的推理过程
  2. 使用特定标记区分推理步骤与最终答案
  3. 典型输出格式:
> 首先分析用户问题中的关键概念...
> 然后结合知识库中的第三条信息...
---
最终答案是:...

技术实现上,系统适配支持reasoning_content的特殊模型(如deepseek-R1):

async def think(messages):
    ...
    async for chunk in completion:
        reasoning_content = chunk.choices[0].delta.reasoning_content
        ...
        content = chunk.choices[0].delta.content
        ...

这种透明化设计增强了用户对系统输出的信任感,便于结果溯源和验证。

5. 多轮对话与问题重写

为处理复杂的多轮对话场景,系统集成了问题重写功能:

  1. 收集历史对话上下文
  2. 输入给专门的问题生成器LLM
  3. 输出用户真实意图问题用于后续检索

核心实现代码:

async def chat_for_query(contents):
    prompt = f"""你是一个问题生成器,你需要从下面的对话中识别出用户想要查询的问题,直接输出该文本,该文本将用于在知识库中检索相关知识。
    ## 对话内容
    {contents}
    """
    ...
    return chat(messages)

这一机制有效解决了用户在多轮对话中问题表述不完整或隐含上下文的问题。

6. 生成结果的结构化输出

系统生成的答案采用丰富的结构化格式,包含:

  • 核心答案:直接回答用户问题的内容
  • 辅助信息
    • 原文链接(Url)
    • 标题(Title)
    • 分类(Category)
    • 详细解释(FullAnswer)
    • 内容摘要(Summary)
  • 可选内容
    • 思考模式的完整推理过程
    • 相关知识的交叉引用。

这种多维度的输出结构满足了不同用户的信息需求层次。

7. 技术优势与工程实践

gc-qa-rag系统的生成模块具有以下显著优势:

  1. 结构化Prompt设计:最大化利用检索知识,提升答案准确性
  2. 流式输出:采用异步流式传输,优化用户体验
  3. 多轮对话支持:通过问题重写理解复杂意图
  4. 推理透明化:思考模式增强结果可信度
  5. 模块化实现:各功能组件解耦,便于扩展维护。

在工程实践中,团队特别注重:

  • 提示词模板的持续优化
  • 模型参数的精细调校
  • 异常情况的健壮处理
  • 性能指标的监控优化

结论

葡萄城gc-qa-rag智能问答系统的生成模块通过创新的技术架构和精细的工程实现,解决了传统问答系统在答案质量、响应速度和用户体验等方面的关键挑战。系统综合应用了检索增强生成、结构化提示词、流式输出、多轮对话理解等先进技术,在保证答案准确性的同时,提供了自然流畅的交互体验。特别是思考模式和问题重写等特色功能,体现了系统在设计上对用户需求和技术透明化的深度思考。未来,随着大语言模型技术的持续发展,该系统的生成能力还将不断提升,为知识工作者提供更加智能高效的信息获取体验。

QA - RAG智能问答系统实现效果

系统开源地址

Logo

全面兼容主流 AI 模型,支持本地及云端双模式

更多推荐