Source code for langchain_community.utilities.semanticscholar

"""与Semantic Scholar API交互的工具。"""
import logging
from typing import Any, Dict, Optional

from langchain_core.pydantic_v1 import BaseModel, root_validator

logger = logging.getLogger(__name__)


[docs]class SemanticScholarAPIWrapper(BaseModel): """包装了对semanticscholar.org API的调用。 https://github.com/danielnsilva/semanticscholar 您应该已经安装了这个库。 `pip install semanticscholar` Semantic Scholar API可以进行搜索并获取文档元数据,如标题、摘要、作者等。 属性: top_k_results: 用于Semantic Scholar工具的得分最高的文档数量 load_max_docs: 加载文档的数量限制 示例: .. code-block:: python from langchain_community.utilities.semanticscholar import SemanticScholarAPIWrapper ss = SemanticScholarAPIWrapper( top_k_results = 3, load_max_docs = 3 ) ss.run("biases in large language models")""" semanticscholar_search: Any #: :meta private: top_k_results: int = 5 S2_MAX_QUERY_LENGTH: int = 300 load_max_docs: int = 100 doc_content_chars_max: Optional[int] = 4000 returned_fields = [ "title", "abstract", "venue", "year", "paperId", "citationCount", "openAccessPdf", "authors", "externalIds", ] @root_validator() def validate_environment(cls, values: Dict) -> Dict: """验证Python包是否存在于环境中。""" try: from semanticscholar import SemanticScholar sch = SemanticScholar() values["semanticscholar_search"] = sch.search_paper except ImportError: raise ImportError( "Could not import Semanticscholar python package. " "Please install it with `pip install semanticscholar`." ) return values
[docs] def run(self, query: str) -> str: """运行 Semantic Scholar API。""" results = self.semanticscholar_search( query, limit=self.load_max_docs, fields=self.returned_fields ) documents = [] for item in results[: self.top_k_results]: authors = ", ".join( author["name"] for author in getattr(item, "authors", []) ) documents.append( f"Published year: {getattr(item, 'year', None)}\n" f"Title: {getattr(item, 'title', None)}\n" f"Authors: {authors}\n" f"Astract: {getattr(item, 'abstract', None)}\n" ) if documents: return "\n\n".join(documents)[: self.doc_content_chars_max] else: return "No results found."