微调与接入
LangChain 支持三种模型:
- 大语言模型 LLM:输入文本,返回字符串
- OpenAI,豆包,星火等在线大模型,可参考此处接入
- 在 HuggingFace 下载预训练模型,微调后使用,如 Llama2。使用
HuggingFaceHub或HuggingFacePipeline
- 聊天模型 Chat Model:基于 LLM 但更结构化,支持将聊天消息列表作为输入
- 文本嵌入模型 Embedding Model:用于文本嵌入,将文本存入
预训练模型
[!note] 预训练模型:通过
Transformer等架构初步学习词汇、语法、句子结构和上下文信息等语言知识后的模型
可使用 HuggingFace 下载预训练模型并进行微调,需要申请 HuggingFace Token 并安装 transformers 库
[!note] 模型量化:简化模型权重,以减少模型大小和计算需求,量化后的模型常以 GGML 或 GPTQ 结尾
自定义模型
创建类继承自 LLM,实现 _call 方法即可
_call(self, prompt: str, stop: Optional[List[str]]) -> str:接收输入字符串并返回响应字符串_identifying_params(self):可选,输出模型信息
输出解析器
构建语言响应,将文本信息转化为结构化信息,是包含以下方法的类:
get_format_instructions() -> str:指导如何格式化语言模型的输出parse(output: str):接收语言模型输出parse_with_prompt(output: str, prompt: str):可选,接收一个提示,根据提示修正模型输出
LangChain 自带解析器位于 langchain.output_parsers 包中,可单独导入使用
PydanticOutputParser
使用 Pydantic 将输出解析为 Json 数据,并提供数据验证、数据转换等功能
- 创建 Pydantic 模型,定义需要接受的数据格式
- 创建解析器,通过
get_format_instructions获取输出提示用于指导大语言模型输出
- 创建提示模板并包含输出提示指导,也可以在模板中包含输出解析器(
output_parser参数)
- 生成提示并使用输出解析器输出
OutputFixingParser
自动修复解析器,用于修复模型返回的数据中的格式错误
原理:当格式化错误时,将错误数据和格式化指令传递给大模型,让 LLM 进行相关修复
parser:原本的解析器,如前面的PydanticOutputParser等,自动修复解析器用于修复该解析器产生的错误
RetryWithErrorOutputParser
重试解析器,错误时重新向大模型发起查询并附带更多指导信息,可修复完整性、准确性等问题
与自动修复解析器相比,自动修复解析器只能修复格式上的错误,重试解析器通过重新请求生成可以修复内容上的错误,如缺项等