1. 项目概述:基于LlamaIndex构建《长安的荔枝》智能问答系统
这个项目展示了如何利用LlamaIndex框架,将马伯庸的历史小说《长安的荔枝》转化为一个智能问答系统。通过检索增强生成(RAG)技术,系统能够理解小说内容并回答相关问题,如主角身份、故事情节和荔枝运输方法等。
我在实际构建过程中发现,这种技术特别适合处理长篇文学作品。传统的关键词搜索在面对"主角是谁?"这类需要语义理解的问题时表现不佳,而直接询问大语言模型又可能产生虚构内容。RAG系统完美解决了这两个痛点,既能基于真实文本回答,又能理解问题的深层含义。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. RAG核心原理与实现细节
2.1 RAG技术三阶段工作流程
RAG系统的工作流程可以分为三个关键阶段,我用图书馆的比喻来解释:
-
建立索引卡片(Indexing):就像图书管理员为每本书制作摘要卡片
- 文本分块:将170页小说切分为500字左右的段落
- 向量化:使用text-embedding-3-small模型生成1536维向量
- 存储:将文本块和对应向量存入向量数据库
-
检索相关段落(Retrieval):相当于根据问题查找相关图书卡片
- 问题向量化:将用户查询转换为相同维度的向量
- 相似度计算:使用余弦相似度找出最相关的3-5个文本块
-
生成答案(Generation):如同图书管理员综合多本书籍给出解答
- 上下文构建:将检索到的文本块组合成提示词
- 答案生成:通过GPT-3.5-turbo模型产生最终回答
2.2 关键参数影响分析
在项目中,我发现三个参数对系统性能影响最大:
| 参数 | 类比 | 影响 | 推荐值 |
|---|---|---|---|
| chunk_size | 笔记卡片大小 | 越大上下文越完整,但可能含噪音 | 512-1024 tokens |
| top_k | 参考的卡片数量 | 越多答案越全面,但速度越慢 | 3-5 |
| chunk_overlap | 卡片间重复内容 | 防止关键信息被切断 | 20-128 tokens |
实际测试表明,对于"李善德的心理变化"这类复杂问题,chunk_size=1024比512能提供更
