搭建 Agentic RAG 实现本地知识搜索
除了集成网络 API之,很多公司都会通过数据收集、积累等方式搭建自有数据知识库。可以看出搜索 “公办小学划片” 结果颗粒度太粗,没有精准匹配。可以看出,在TextLoader加载之后,会生成一个Document的数组类型。先将 school_info.txt 加载到内存中,需要使用 TextLoader。这篇文章就来介绍,如何基于公司内部私有知识,实现 Agentic RAG 查询。可以看出,经过

上篇文章中介绍了 Agent 集成 Google Serper API 实现联网实时信息搜索。除了集成网络 API 之,很多公司都会通过数据收集、积累等方式搭建自有数据知识库。
这篇文章就来介绍,如何基于公司内部私有知识,实现 Agentic RAG 查询。
实现思路
1. 搭建本地知识库,封装 Tool 函数
2. 实现 Agent, 调用 Tool 函数

搭建本地知识库
创建本地文件 school_info.txt 用来模拟公司本地知识。添加如下内容:
【政策】2024年上海市幼升小入学政策主要遵循“就近入学、免试入学”原则。公办小学按户籍地或居住地划片招生,民办小学实行摇号入学。【报名时间】幼升小信息登记一般于每年10月中下旬开放,家长需登录“上海市义务教育入学报名系统”完成网上报名。【公办小学划片】家长可根据户籍地址或居住证地址,查询所在街道对应的划片公办小学。部分区会公布具体小区对口学校表。【民办小学报名规则】自2020年起,上海所有民办小学实行“报名人数超过招生计划则100%摇号”的政策,不得面谈或测试学生。【居住要求】公办小学入学要求“人户一致”,即孩子与父母户口和房产一致,优先录取。非沪籍家庭需持有效居住证并符合积分标准。【外来人员子女入学】非沪籍家长需提供“三证”(居住证、就业证明、社保)并满足各区具体积分条件,方可参与入学。【小升初对口】大多数公办初中实行对口直升制,依据小学对应划片对口学校录取。各区教育局会公布对口关系表。【民办初中录取】民办初中同样执行摇号招生政策。学生只能填报一个民办初中志愿。部分民办学校招生人数有限,竞争激烈。【特殊人群】本市户籍无房但有户口的学生可依据“租赁备案”情况申请学区学校入学,但优先级低于有房产的家庭。【招生流程提醒】每年招生时间段主要集中在4月到6月。流程包括:网上信息登记→资料审核→摇号录取(民办)或划片通知(公办)。【热门学校介绍】徐汇区的汇师小学、长宁区的玉屏南路小学、静安区的一中心小学为部分家长关注的优质小学,入学竞争较大。【对口中学样例】例如,静安区的一中心小学通常对口静教院附属初中,但对口关系需参考当年区教育局公告。【中高考衔接】从小学起规划初中、高中路径尤为重要。部分家长会关注初中是否有直升高中部或实验班设置。【政策调整】每年上海义务教育政策可能有所调整,建议家长关注“上海市教育委员会”官网及所在区教育局发布的公告。【学区房误区】并非所有房产都对口优质学校,部分学区房存在“对口学校调整”或“多个家庭共享学区”的风险。
先将 school_info.txt 加载到内存中,需要使用 TextLoader。如下:

打印结果如下:
[ Document( metadata={ 'source': '../../data/school_info.txt' }, page_content=' 【政策】2024年上海市幼升小入学政策主要遵循“就近入学、免试入学”原则。公办小学按户籍地或居住地划片招生,民办小学实行摇号入学。 【报名时间】幼升小信息登记一般于每年10月中下旬开放,家长需登录“上海市义务教育入学报名系统”完成网上报名。 【公办小学划片】家长可根据户籍地址或居住证地址,查询所在街道对应的划片公办小学。部分区会公布具体小区对口学校表。 【民办小学报名规则】自2020年起,上海所有民办小学实行“报名人数超过招生计划则100%摇号”的政策,不得面谈或测试学生。 【居住要求】公办小学入学要求“人户一致”,即孩子与父母户口和房产一致,优先录取。非沪籍家庭需持有效居住证并符合积分标准。 【外来人员子女入学】非沪籍家长需提供“三证”(居住证、就业证明、社保)并满足各区具体积分条件,方可参与入学。 【小升初对口】大多数公办初中实行对口直升制,依据小学对应划片对口学校录取。各区教育局会公布对口关系表。 【民办初中录取】民办初中同样执行摇号招生政策。学生只能填报一个民办初中志愿。部分民办学校招生人数有限,竞争激烈。 【特殊人群】本市户籍无房但有户口的学生可依据“租赁备案”情况申请学区学校入学,但优先级低于有房产的家庭。 【招生流程提醒】每年招生时间段主要集中在4月到6月。流程包括:网上信息登记→资料审核→摇号录取(民办)或划片通知(公办)。 【热门学校介绍】徐汇区的汇师小学、长宁区的玉屏南路小学、静安区的一中心小学为部分家长关注的优质小学,入学竞争较大。 【对口中学样例】例如,静安区的一中心小学通常对口静教院附属初中,但对口关系需参考当年区教育局公告。 【中高考衔接】从小学起规划初中、高中路径尤为重要。部分家长会关注初中是否有直升高中部或实验班设置。 【政策调整】每年上海义务教育政策可能有所调整,建议家长关注“上海市教育委员会”官网及所在区教育局发布的公告。 【学区房误区】并非所有房产都对口优质学校,部分学区房存在“对口学校调整”或“多个家庭共享学区”的风险。')]
可以看出,在TextLoader加载之后,会生成一个Document的数组类型。每一个Document中,包含 metadata 和 page_content 结果。
然后将生成的 docs 进行切片(chunk)操作,这里需要使用到 Text Spliter 工具,如下:

上述代码打印结果如下:
[Document( metadata={'source': '../../data/school_info.txt'}, page_content='【政策】2024年上海市幼升小入学政策主要遵循“就近入学、免试入学”原则。公办小学按户籍地或居住地划片招生,民办小学实行摇号入学。【报名时间】幼升小信息登记一般于每年10月中下旬开放,家长需登录“上海市义务教育入学报名系统”完成网上报名。【公办小学划片】家长可根据户籍地址或居住证地址,查询所在街道对应的划片公办小学。部分区会公布具体小区对口学校表。【民办小学报名规则】自2020年起,上海所有民办小学实行“报名人数超过招生计划则100%摇号”的政策,不得面谈或测试学生。【居住要求】公办小学入学要求“人户一致”,即孩子与父母户口和房产一致,优先录取。非沪籍家庭需持有效居住证并符合积分标准。【外来人员子女入学】非沪籍家长需提供“三证”(居住证、就业证明、社保)并满足各区具体积分条件,方可参与入学。【小升初对口】大多数公办初中实行对口直升制,依据小学对应划片对口学校录取。各区教育局会公布对口关系表。【民办初中录取】民办初中同样执行摇号招生政策。学生只能填报一个民办初中志愿。部分民办学校招生人数有限,竞争激烈。'), Document( metadata={'source': '../../data/school_info.txt'}, page_content='【民办初中录取】民办初中同样执行摇号招生政策。学生只能填报一个民办初中志愿。部分民办学校招生人数有限,竞争激烈。【特殊人群】本市户籍无房但有户口的学生可依据“租赁备案”情况申请学区学校入学,但优先级低于有房产的家庭。【招生流程提醒】每年招生时间段主要集中在4月到6月。流程包括:网上信息登记→资料审核→摇号录取(民办)或划片通知(公办)。【热门学校介绍】徐汇区的汇师小学、长宁区的玉屏南路小学、静安区的一中心小学为部分家长关注的优质小学,入学竞争较大。【对口中学样例】例如,静安区的一中心小学通常对口静教院附属初中,但对口关系需参考当年区教育局公告。【中高考衔接】从小学起规划初中、高中路径尤为重要。部分家长会关注初中是否有直升高中部或实验班设置。【政策调整】每年上海义务教育政策可能有所调整,建议家长关注“上海市教育委员会”官网及所在区教育局发布的公告。【学区房误区】并非所有房产都对口优质学校,部分学区房存在“对口学校调整”或“多个家庭共享学区”的风险。')]
chunks length: 2
可以看出,经过切片后 docs 被分为2段 Document 结果。
切好片之后,接下来一步是建立向量库 vectorstore。这一步需要借助嵌入模型 Embedding Model 来实现。我使用的是 langchain 框架中的 HuggingFaceEmbeddings 来创建向量模型对象,如下:

上述代码中通过 FAISS.from_documents 方法创建一个向量库实例,并传入之前创建的 chunks 和 embedding_model。接下来通过vectorstore进行向量搜索:

打印结果如下:
Score: 202.0199, Content: 【政策】2024年上海市幼升小入学政策主要遵循“就近入学、免试入学”原则。公办小学按户籍地或居住地划片招生,民办小学实行摇号入学。 【报名时间】幼升小信息登记一般于每年10月中下旬开放,家长需登录“上海市义务教育入学报名系统”完成网上报名。 【公办小学划片】家长可根据户籍地址或居住证地址,查询所在街道对应的划片公办小学。部分区会公布具体小区对口学校表。 【民办小学报名规则】自2020年起,上海所有民办小学实行“报名人数超过招生计划则100%摇号”的政策,不得面谈或测试学生。 【居住要求】公办小学入学要求“人户一致”,即孩子与父母户口和房产一致,优先录取。非沪籍家庭需持有效居住证并符合积分标准。 【外来人员子女入学】非沪籍家长需提供“三证”(居住证、就业证明、社保)并满足各区具体积分条件,方可参与入学。 【小升初对口】大多数公办初中实行对口直升制,依据小学对应划片对口学校录取。各区教育局会公布对口关系表。 【民办初中录取】民办初中同样执行摇号招生政策。学生只能填报一个民办初中志愿。部分民办学校招生人数有限,竞争激烈。Score: 235.8982, Content: 【民办初中录取】民办初中同样执行摇号招生政策。学生只能填报一个民办初中志愿。部分民办学校招生人数有限,竞争激烈。 【特殊人群】本市户籍无房但有户口的学生可依据“租赁备案”情况申请学区学校入学,但优先级低于有房产的家庭。 【招生流程提醒】每年招生时间段主要集中在4月到6月。流程包括:网上信息登记→资料审核→摇号录取(民办)或划片通知(公办)。 【热门学校介绍】徐汇区的汇师小学、长宁区的玉屏南路小学、静安区的一中心小学为部分家长关注的优质小学,入学竞争较大。 【对口中学样例】例如,静安区的一中心小学通常对口静教院附属初中,但对口关系需参考当年区教育局公告。 【中高考衔接】从小学起规划初中、高中路径尤为重要。部分家长会关注初中是否有直升高中部或实验班设置。 【政策调整】每年上海义务教育政策可能有所调整,建议家长关注“上海市教育委员会”官网及所在区教育局发布的公告。 【学区房误区】并非所有房产都对口优质学校,部分学区房存在“对口学校调整”或“多个家庭共享学区”的风险。
Process finished with exit code 0
可以看出搜索 “公办小学划片” 结果颗粒度太粗,没有精准匹配。这是因为我们在做切片时的 chunk_size 选择过大,重新将 chunk_size 进行调整如下:
更多推荐
所有评论(0)