96SEO 2026-08-09 22:36 0
怎么说呢,
在之前的 RAG 示例中。知识库直接使用了硬编码的 knowledge 数组,这在实际项目里根本不可行。真实比如业务中,资料往往散落在 TXT,还有PDF。再有Word,另外甚至是在线 HTML 页面中。如何高效、可靠地把这些文档转化为可检索的文本,是每个想要落地 AI 应用的开发者都会碰到的第一道坎。
很多同学在 Windows 环境下直接使用以下代码读取 knowledge.txt结果出现:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position ...
根本原因是 Windows 默认保存为 GBK,而代码硬性指定了 UTF‑8。
def load_knowledge_from_txt:
"""自动尝试 UTF‑8,若失败回退到 GBK"""
knowledge =
# 先尝试 UTF‑8,如果抛异常则切换为 GBK
for enc in :
说到try。with open as f:
for line in f:
line = line.strip
if line: # 剔除空行
knowledge.append
break # 成功读取后退出循环
except UnicodeDecodeError:
continue # 换下一个编码再试
return knowledge
# 自动加载同目录下的 knowledge.txt
knowledge = load_knowledge_from_txt
如果每行都是几百字的大段落,向量化后会出现:
需要把原始文本按照句号拆分。而且合并成适当长度的块,
def load_full_text:
"""一次性读取完整文本,兼容 UTF‑8 与 GBK"""
for enc in :
从try来看。with open as f:
return f.read.strip
except UnicodeDecodeError:
continue
raise ValueError
raw_text = load_full_text
def split_text:
"""
按句号切分,保证每块长度在 之间。若当前块不足 min_len,则与下一句合并。"""
sentences =
chunks,cur =,""
for sen in sentences:
# 若加入当前句后仍不超过上限,就累加
if len + len <= max_len:
cur += sen
else:
# 当前块已满足最小长度要求,直接存入
if len>= min_len:
chunks.append)
cur = sen
至于else。# 不足最小长度时强制合并下一句
cur += sen
if cur:
chunks.append)
return chunks
# 得到符合要求的知识块列表
knowledge = split_text
load_knowledge_from_txt/load_full_text 自动识别编码。split_text 按句号切分、过滤空行、控制块大小。knowledge 列表逐条送入 Embedding 模型,得到向量。
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
# 1️⃣ 加载模型
model = SentenceTransformer
# 2️⃣ 将知识块转成向量
embeds = model.encode
# 3️⃣ 建立 FAISS 索引
dim = embeds.shape
index = faiss.IndexFlatL2
index.add.astype)
# 4️⃣ 简单检索函数
def retrieve:
q_vec = model.encode
D。I = index.search.astype,top_k)
return for i in I]
# 示例查询
print)
本系列完整目录请参考《15天学会 AI 应用开发全目录》。其中还有 PDF/Word/HTML 文档抽取、Chunking 调整、混合检索等进阶章节。
祝你在「15 天速成 AI 开发」之路上顺利建立出实战级 RAG 知识库!🎉
痛点一:Tiny‑RAG 示例里直接使用硬编码数组knowledge,而真实项目中数据散落在 TXT、PDF、Word、HTML 等各种文件里如何批量提取文本成为第一道拦路虎。话说回来,痛点二:windows 下常见 “UnicodeDecodeError: 'utf‑8' codec can't decode byte…”,因为程序默认保存为 GBK,而代码硬写成 UTF‑8 导致报错。
def load_knowledge_from_txt:
"""自动尝试 UTF‑8,若失败回退到 GBK"""
knowledge =
# 按顺序尝试两种常见编码,一旦成功立即跳出循环
for enc in :
至于try。with open as f:
for line in f:
line = line.strip
if line: # 剔除空行和空白字符
knowledge.append
break # 成功读取后退出循环
except UnicodeDecodeError:
continue # 编码不匹配则换下一个继续尝试
return knowledge
# 自动加载同目录下的 knowledge.txt → 返回 List
knowledge = load_knowledge_from_txt
痛点三:TXT 中往往是一段段大段文字,一行可能包含数十个句子。怎么说呢,直接把每行塞进数组会导致:
def loadfulltext:
"""一次性读入整个文件,一样兼容 UTF‑8 与 GBK"""
for enc in :
try的观点是。with open as f:
return f.read.strip
except UnicodeDecodeError:
continue
raise ValueError
rawtext = loadfull_text
def splittext: """ 1️⃣ 按中文句号“。”拆分 2️⃣ 每个块长度保持在 区间 3️⃣ 若当前块不足 minlen,则与下一句合并 """ sentences = chunks,cur =,"" for sen in sentences: if len + len <= maxlen: # 未超上限 → 累加 cur += sen 从else来看。if len>= minlen: # 已满足最小阈值 → 写入 chunks.append)
...
... # End of response
。作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback