上篇文章中介绍了 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 进行调整如下: