文章目录
前言
本文主要是继续深挖Tongyi
类,并进一步探究详细的流程。个人理解不够全面,能够为大家给出的解释有限。
导入Tongyi类
Tongyi
类是langchain_community.llms
中的一个类。实际上,这个类是在langchain_community.llms
文件夹下tongyi.py
中的一个类,只不过因为langchain_community.llms
文件夹下的__init__.py
文件追加了一个方法:
def _import_tongyi() -> Type[BaseLLM]:
from langchain_community.llms.tongyi import Tongyi
return Tongyi
最终,在一个包含了无数个if-else
的__getattr__
方法中,会根据传入name
的值判断执到底执行哪一个大模型的import
方法。
这个意思就是说,我们假设现在新开发了一个大模型,叫做Ninedays
(就当这个叫做九天吧),并存入ninedays.py
。我们想要导入这个Ninedays
大模型,也就可以通过from langchain_community.llms import Ninedays
导入。
导入的过程将首先经过__init__.py
方法中的__getattr__
方法,用于访问没有直接定义出来的数据。此时,在__getattr__
方法中增加:
if name == "Ninedays":
from langchain_community.llms.ninedays import Ninedays
这个意思就是,我经过__getattr__
访问到了Ninedayes
这个name
,并且通过大量的if-else
查询到了这个执行条件,于是开始导入大模型。
这种方法是一种懒加载的实现方法,非常方便。
配置Tongyi类
在langchain_community.llms
文件夹下的tongyi.py
文件中,里面有这么几个属性:
client: Any #: :meta private:
model_name: str = "qwen-plus"
"""Model name to use."""
model_kwargs: Dict[str, Any] = Field(default_factory=dict)
top_p: float = 0.8
"""Total probability mass of tokens to consider at each step."""
dashscope_api_key: Optional[str] = None
"""Dashscope api key provide by Alibaba Cloud."""
streaming: bool = False
"""Whether to stream the results or not."""
max_retries: int = 10
"""Maximum number of retries to make when generating."""
其中:
client
并不确定是什么,没有相关定义,但是会按照llm.client.call
执行,其中llm
是Tongyi
类的实例。model_name
是qwen-plus
,表示默认的模型名称。model_kwargs
是空字典,表示默认的模型参数。top_p
是0.8,是model_kwargs
中的top_p
参数。dashscope_api_key
是通义千问的api-key
。streaming
表示最终的输出是否是流式输出。max_retries
是10,表示最多允许的重试次数。
我们初始化的过程中,往往也是直接自定义这些参数:
llm = Tongyi(
dashscope_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)
读取api-key
读取的方式有很多种,包括yaml
配置、xml
配置、txt
配置、properties
配置乃至数据库配置等等,Python
也为每一种配置都有特定的工具库,非常方便。下面仅介绍3种推荐配置方法。
os配置
在Tongyi
初始化的过程中,会执行一个validate_environment
方法,将检查环境是否满足要求:
@root_validator()
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values["dashscope_api_key"] = get_from_dict_or_env(
values, "dashscope_api_key", "DASHSCOPE_API_KEY"
)
try:
import dashscope
except ImportError:
raise ImportError(
"Could not import dashscope python package. "
"Please install it with `pip install dashscope`."
)
try:
values["client"] = dashscope.Generation
except AttributeError:
raise ValueError(
"`dashscope` has no `Generation` attribute, this is likely "
"due to an old version of the dashscope package. Try upgrading it "
"with `pip install --upgrade dashscope`."
)
return values
首先一上来就是执行get_from_dict_or_env
,这个方法将会在values
中获取dashscope_api_key
,如果获取不到,则从os.environ
中获取DASHSCOPE_API_KEY
。
既然知道这个,那就好办了&#