收到问题后,应用程序首先会在 Elasticsearch 索引中搜索相关文档。具体做法是为问题生成一个稀疏的向量嵌入,然后在索引中搜索与之最接近的嵌入,每个嵌入都与文档的一个段落相关联。
与摄取阶段一样,Elasticsearch 索引通过ElasticsearchStore 与 Langchain 的集成进行管理:
Langchain 的 retriever 接口的invoke() 方法很好地抽象了为问题生成嵌入,然后进行搜索的过程,该方法可执行所有这些任务,并返回找到的最相关文档列表:
您可以看到返回的段落是如何作为源文件发送到客户端的。React 应用程序将在答案下方以"搜索结果" 的形式显示这些结果。
需要注意的是,在ElasticsearchStore 类中使用的strategy 参数必须与摄取过程中使用的策略相匹配。在本例中,SparseVectorRetrievalStrategy 从 Elastic 的 ELSER 模型中创建并搜索稀疏向量。您可以评估的另一个有趣选项是使用ApproxRetrievalStrategy ,它使用密集向量嵌入。