输入输出模块
该模块负责与LLM做交互,通过该接口向模型输入 Prompt 并提取模型输出信息。主要包括:提示词、语言模型,输出解析器。
数据连接
已训练好的大语言模型,在训练时使用了大量的训练数据,但这些训练数据中可能并未包含用户所需的信息,包括模型训练数据本身也有时效限制,不包括训练数据时效后的新事件。为支持利用新数据,LangChain提供了数据连接模块,包括加载,转换,存储和数据查询,即加载新数据,将新数据按照模型规则转换,将转换的数据做Embedding处理,将Embedding数据存储。
链
为处理复杂的需求,LangChain 可使用链式调用多个LLM,这样可以创建一个独立的应用程序以处理特定的情况。
记忆
LangChain中的记忆指的是模型的短期记忆,例如在对话中,模型可以将前面的Prompt及对应回答作为后面问题的参考,使问答更流畅,而在对话结束后,这些记忆会被清除。注:模型预训练的参数不会被改变。
代理
LLM 在处理计算、检索外部信息的能力较弱,这是受限于模型训练数据的时效问题。LangChain 通过代理为LLM提供计算、检索等支持。
回调
回调函数CallBack 适用于程序于各个阶段,可应用于日志记录、监事、流程处理等任务。例如在代理模块中,可记录代理的调用次数,返回的参数值等。CallBack 收集的信息可直接输出到控制台也可输出到文件或应用。
CallBack 有两个类:CallbackHandler 和 CallbackManager。CallbackHandler 用于记录每个应用场景的日志的完整日志信息,属于单个日志处理器。CallbackManager 负责封装管理所有 CallbackHandler。
在构造函数中定义回调函数,此时被用于对该对象的所有调用,对日志、监控等对整个链的监控很有用。
在发出请求中定义回调函数,如在call()/run()/apply()中使用,此时回调函数仅用于特定请求及其所有子请求。
verbose 参数在整个 API 的大多数对象(链、模型、工具、代理等)上都可以作为构造参数使用,如 LLMChain(verbose=True),相当于将 ConsoleCallbackHandler 传递给该对象和所有子对象的 callbacks 参数。这对调试很有用,此时会把所有事件记录到控制台。