You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取LangChain相似性搜索输出中的page_content等字段数据

从LangChain相似性搜索结果提取指定字段的方法

LangChain的相似性搜索(比如similarity_search_with_score()方法)返回结果通常是嵌套结构,以下分两种场景给出提取page_content、metadata、source、page及score字段的方法:

场景1:返回结果为(Document实例, 分数)的元组列表

这是最常见的情况,搜索返回的列表中每个元素是元组,第一个元素是Document对象,第二个是相似度分数。直接通过对象属性提取即可:

示例代码

# 假设similarity_results是搜索返回的结果列表
extracted_data = []
for doc, score in similarity_results:
    extracted_item = {
        "page_content": doc.page_content,
        "metadata": doc.metadata,
        "source": doc.metadata.get("source"),
        "page": doc.metadata.get("page"),
        "score": score
    }
    extracted_data.append(extracted_item)

关键说明

  • doc.page_content:直接获取文档的内容文本
  • doc.metadata:获取完整的元数据字典,source和page字段通常嵌套在这里(具体取决于文档加载时的配置)
  • 使用dict.get()方法是为了避免字段不存在时抛出KeyError,如果你的场景中这些字段必存在,可以直接用doc.metadata["source"]

场景2:返回结果为包含Document字符串与分数的子列表

如果你的结果是字符串形式的Document(比如打印输出的文本),需要先解析字符串内容:

示例代码

import ast

extracted_data = []
for doc_str, score in similarity_results:
    # 提取page_content
    content_start_idx = doc_str.find("page_content='") + len("page_content='")
    content_end_idx = doc_str.find("', metadata=")
    page_content = doc_str[content_start_idx:content_end_idx]
    
    # 解析metadata字符串为字典
    meta_start_idx = doc_str.find("metadata=") + len("metadata=")
    meta_end_idx = doc_str.rfind(")")
    metadata_str = doc_str[meta_start_idx:meta_end_idx]
    metadata = ast.literal_eval(metadata_str)
    
    extracted_item = {
        "page_content": page_content,
        "metadata": metadata,
        "source": metadata.get("source"),
        "page": metadata.get("page"),
        "score": score
    }
    extracted_data.append(extracted_item)

关键说明

  • 通过字符串切片定位page_content和metadata的位置
  • 使用ast.literal_eval()安全地将metadata的字符串转为字典(禁止使用eval(),避免安全风险)

内容的提问来源于stack exchange,提问作者Satyam Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:20:15