如何使用一个现成的大语言模型?| 青训营笔记

77 阅读4分钟

接着上一篇继续总结,上一篇是对于大语言模型从无到有过程的个人理解,这一篇则是一个现有的大语言模型如何与之进行交互。当然,我是一个编程小白,也缺乏与机器学习、深度学习相关的数学基础,许多内容只是浅显的个人理解,如有纰漏,欢迎交流。

如何使用一个现成的大语言模型?

现成的大语言模型也就是已经经过训练、预训练并发布的模型,沿着上一篇,首先是发布在hugging face上可以自由下载的模型,其中7B、9B这样的小尺寸模型,或许对于一块有着18GB、24GB的GPU是能够支撑的,也就可以在本地部署。其次是现有的服务商提供的在线部署的大尺寸模型,可以直接通过web界面与之进行交互,此外也可通过调用API的形式在本地间接使用。

1.本地部署:

通过在课程中的学习,可以通过hugging face平台的transformer库中的AutoModelForCausalLM类自动拉取模型(类似于在cmd中直接pip一个库或者用git命令拉取一个项目?看起来本质依然是把模型下载到本地),或者直接在hugging face平台下载模型的bin文件至本地,在使用时,通过如下方式导入模型:

'''模型的名称和路径常量 '''
MODEL_NAME = 'llama-2-7b-chat.ggmlv3.q4_K_S.bin' 
MODEL_PATH = '/home/huangj/03_Llama/

再定义一个供llm函数接收的类:

from langchain.llms.base import LLM

class CustomLLM(LLM):
    model_name = MODEL_NAME

    # 该方法使用Llama库调用模型生成回复
    def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
        prompt_length = len(prompt) + 5
        # 初始化Llama模型,指定模型路径和线程数
        llm = Llama(model_path=MODEL_PATH+MODEL_NAME, n_threads=4)
        # 使用Llama模型生成回复
        response = llm(f"Q: {prompt} A: ", max_tokens=256)

        # 从返回的回复中提取文本部分
        output = response['choices'][0]['text'].replace('A: ', '').strip()

        # 返回生成的回复,同时剔除了问题部分和额外字符
        return output[prompt_length:]

此外,通过网络查阅,似乎也可以直接通过Langchain.llm库得如下类创建大语言模型实例:

llm = LlamaCPP(model_path=MODEL_PATH)

不过在本地使用模型对内存、显存存在一定要求,生成效率与token容量有限,所运行的小尺寸模型往往也效果欠佳。

2.使用Web页面:

这应该也是对于大多数人最常用的一种接触大语言模型的方式,比如直接使用网页版的豆包、智谱清言。但是这同样存在一些问题:

首先是批处理问题,对于一个通过代码调用的模型,可以直接以一个循环的方式从数据集中读取问题、逐一提交、并接收格式化回答后写入新的文件之中,而网页端大多时候需要以聊天的形式获取输出,在同一个对话框中还可能会受到前置对话的影响。

其次是自由度问题,通过代码调用模型的过程中,可以通过token上限、是否需要mermory、temperature等方式更灵活的调整模型,而在网页对话中,这些参数通常是默认的,同时可能由于超过token容量使得模型在不知道什么时候突然发生“失忆”。

其次也是我个人的一些顾虑,也就是稳定性。线上的模型可能会随时更新调整,比如之前小数点比大小的问题,就很快进行了修复。而一些其他修复可能并不是所有人都需要的,当然,调用API同样会有这样的问题,只能是在本地设备不足情况不得不进行的取舍吧。

3.使用API:

最早对它的了解来自于情感陪伴方向,通过酒馆,借助角色卡、世界观等提示词公车,拉取一个claude 3.5或其他模型,进行定制化聊天。这次学习主要也是借助豆包的API进行,增长了不少认识。

首先是申请到的API怎么读入代码中,直接放在工程文件可能会导致密钥暴露,因而更多时候会选择存入环境变量文件并通过环境变量读取进来,即:

'''.env file'''
OPENAI_API_KEY =  
OPENAI_BASE_URL = 
LLM_MODELEND = 

在项目中:

import os
import python-dotenv
load_dotenv('/path/to/your/.env')
llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))