Source code for langchain_community.utilities.wolfram_alpha

"""调用WolframAlpha的工具。"""
from typing import Any, Dict, Optional

from langchain_core.pydantic_v1 import BaseModel, Extra, root_validator
from langchain_core.utils import get_from_dict_or_env


[docs]class WolframAlphaAPIWrapper(BaseModel): """Wolfram Alpha的封装器。 使用文档: 1. 前往Wolfram Alpha注册开发者账户 2. 创建一个应用并获取您的APP ID 3. 将您的APP ID保存到WOLFRAM_ALPHA_APPID环境变量中 4. pip install wolframalpha""" wolfram_client: Any #: :meta private: wolfram_alpha_appid: Optional[str] = None class Config: """此pydantic对象的配置。""" extra = Extra.forbid @root_validator() def validate_environment(cls, values: Dict) -> Dict: """验证环境中是否存在API密钥和Python包。""" wolfram_alpha_appid = get_from_dict_or_env( values, "wolfram_alpha_appid", "WOLFRAM_ALPHA_APPID" ) values["wolfram_alpha_appid"] = wolfram_alpha_appid try: import wolframalpha except ImportError: raise ImportError( "wolframalpha is not installed. " "Please install it with `pip install wolframalpha`" ) client = wolframalpha.Client(wolfram_alpha_appid) values["wolfram_client"] = client return values
[docs] def run(self, query: str) -> str: """通过WolframAlpha运行查询并解析结果。""" res = self.wolfram_client.query(query) try: assumption = next(res.pods).text answer = next(res.results).text except StopIteration: return "Wolfram Alpha wasn't able to answer it" if answer is None or answer == "": # We don't want to return the assumption alone if answer is empty return "No good Wolfram Alpha Result was found" else: return f"Assumption: {assumption} \nAnswer: {answer}"