第7章 实战三:知识库问答系统
-
目标概述:构建一个简易知识库问答系统,实现对特定资料的提问回答。此项目让读者学习如何利用 AI 模型结合本地资料(如FAQ文档或维基条目)进行问答,实现检索增强型应用雏形。读者将掌握文本嵌入、匹配查询或直接通过提示将知识库内容纳入上下文的技巧,体验让 AI 基于给定知识而非通用知识回答问题的开发方法。
-
提示词结构:向 AI 描述知识库 QA 系统需求时,需要覆盖:数据来源(例如一个文本文件或一组文档作为知识库)、实现方式(读取文档内容,将问题与文档匹配,提供相关段落给LLM产生答案),以及交互形式(CLI对话或Web接口)。我们将提示 AI 使用 Python 构建,阅读一个 knowledge.txt 文件内容作为知识库,对每个用户问题先在文本中找到相关句子,再让 AI 根据相关内容生成回答。提示词将指定使用何种简单文本搜索(例如关键词匹配或向量嵌入搜索,考虑到初学者难度,可采用关键词搜索结合 GPT 总结),并要求模块化设计:如 search.py 负责检索,answer.py 负责调用 LLM 生成答案。
-
流程图:绘制系统流程:用户提问 -> 程序在知识库文本中查找相关信息 -> 将找到的信息和问题一起作为Prompt发送给 LLM -> 获得答案并返回用户。若找不到相关信息,则返回默认回答(如“未找到相关信息”)。该图清晰展示检索与生成结合的过程,也是当前许多知识问答类应用的典型架构。
-
可视化代码生成过程:利用 Cursor 编写系统关键部分。首先生成 search.py:例如提示AI“编写函数,从给定文档文本中根据用户问题找到最相关的一段文字(可简单以关键词频率衡量相关性)”,AI 输出代码(截图展示函数实现)。然后生成 answer.py:提示“编写函数,调用OpenAI API,将用户问题和检索到的文本整合在一起,让模型依据提供资料回答问题”,观察AI如何构造 Prompt 模板并调用。展示关键代码由 AI 生成的截图,并标注其中核心逻辑。最后整合到主程序 main.py:串联调用检索与回答功能,在终端循环读取问题、输出回答。整个过程中如AI出现错误理解(如用复杂算法导致代码超长),我们通过交互调整提示。
-
样例项目代码结构:列出知识库 QA 系统文件结构:
-
main.py:主程序,负责读取知识库文件、初始化检索模块,循环等待用户输入问题并输出答案;
-
search.py:文本检索模块,提供 find_relevant(text, question) 函数;
-
answer.py:答案生成模块,提供 generate_answer(question, context) 函数,内部调用 LLM 接口;
-
knowledge.txt:知识库文本(例如包含若干常见问题及答案的段落)。
描述各文件作用,特别指出知识库如何存储以及代码如何读取利用。 -
生成结果截图:示范系统运行:知识库预先填入例如“OpenAI是什么?”等条目的解释。当用户输入该问题或类似问题,系统正确提取知识库内容并生成准确回答(截图展示问答过程)。也展示一个知识库无匹配的问题,系统输出“抱歉未找到答案”的截图。
-
测试点与失败案例:测试系统对不同提问的鲁棒性。例如问法不同但意思相同的问题,能否匹配;大写小写、错别字等简单扰动是否处理。失败案例举例:一开始AI检索模块只按简单关键词,可能提取了不完整句子导致回答不准确,我们改进提示让AI增加提取段落范围或多取几句上下文。另一个常见问题:LLM 可能在知识不充分时胡编乱造(幻觉),因此我们的Prompt需提醒“如果知识库没有相关信息,只回答不知道”,测试这一情况确保模型遵循指令。
-
术语解释:解释“知识库”“向量嵌入”“相关性匹配”“幻觉”等术语。特别说明我们此处未深入用向量数据库,是采用简化方法实现知识问答,但提及工业界常用如 FAISS/向量数据库 的概念,供有兴趣读者扩展了解。