【大模型入门】ollama + lobechat打造个人专属大模型助手

admin 2024年4月19日21:54:00评论12 views字数 4776阅读15分55秒阅读模式

这是一系列教小白怎么使用大模型的文章,不讲原理和公式,就讲小白都听得懂的怎么安装使用。

01

简介

昨天介绍了在本地运行大模型的工具LM studio,他上手简单,但想要远程调用或者在手机上使用就不是很方便,今天介绍一下ollama,他可以提供一个服务,然后就可以远程使用了。当然ollama还可以提供AIP让我们的程序去调用,这样大模型就可以赋能我们正在开发的应用了,例如可以通过构建智能体来实现自动漏洞复现,自动写POC。

02

安装ollama

ollama的安装很简单,先上官网下载安装包

https://ollama.com/

【大模型入门】ollama + lobechat打造个人专属大模型助手

然后选择适合自己操作系统的安装包即可,下载完了直接双击运行就行了。等待安装完成,打开cmd界面,输入ollama -h

【大模型入门】ollama + lobechat打造个人专属大模型助手

说明ollama已经安装完成

03

模型下载

上官网查看大模型

【大模型入门】ollama + lobechat打造个人专属大模型助手

然后选择一个自己喜欢的模型打开,右侧能看到运行命令,复制到本地cmd命令行进行粘贴,ollama会自动帮我们下载并运行模型

【大模型入门】ollama + lobechat打造个人专属大模型助手

【大模型入门】ollama + lobechat打造个人专属大模型助手

然后就等待漫长的下载,下载完成就可以使用了

04

使用本地模型

ollama目前官网提供的模型中支持中文的只有一个llama2微调的大模型,那怎么使用国产的中文大模型呢?

【大模型入门】ollama + lobechat打造个人专属大模型助手

首先去哪里找这些大模型,最全的肯定是huggingface,注意一定要下载gguf文件,别的文件格式使用不了。

https://huggingface.co/

也可以上国内的大模型社区找自己喜欢的模型

https://modelscope.cn/home

首先找到昨天下载的大模型gguf文件的目录,在这个目录下面新建一个文件Modelfile.txt,在文件中写入

FROM D:LargeModelGGUF-LISTTheBlokeQwen-1_7B-Chat-q5-GGUFqwen1_5-7b-chat-q5_k_m.gguf

后面这个路径就是gguf文件的全路径

然后在cmd命令行运行命令创建模型,命令中 qwen1-7b 是模型的名称,-f指定上面创建的Modelfile.txt文件,这个文件的作用是告诉ollama去哪里找大模型的gguf文件

ollama create qwen1-7b -f D:LargeModelGGUF-LISTTheBlokeQwen-1_7B-Chat-q5-GGUFModelfile.txt

【大模型入门】ollama + lobechat打造个人专属大模型助手

模型创建完成

使用ollama list命令查看本地模型

ollama list

【大模型入门】ollama + lobechat打造个人专属大模型助手

运行这个模型来回答问题

ollama run qwen1-7b

【大模型入门】ollama + lobechat打造个人专属大模型助手

05

安装lobe-chat

lobe-chat是一个开源的、现代设计的LLM/AI聊天框架,支持多家厂商的大模型,可以一键部署个人专用GPT聊天应用程序。

lobe-chat支持docker安装,简单方便一条命令搞定,其中sk-xxxx是你自己chatGPT账号的key,如果使用本地模型的话可以不管

$ docker run -d -p 3210:3210   -e OPENAI_API_KEY=sk-xxxx   -e ACCESS_CODE=lobe66   --name lobe-chat   lobehub/lobe-chat

【大模型入门】ollama + lobechat打造个人专属大模型助手

安装完成后IP+3210访问

【大模型入门】ollama + lobechat打造个人专属大模型助手

到此lobechat安装完成

05

lobe-chat配置本地大模型

首先启动ollama服务

ollama serve

然后运行大模型

ollama run qwen1-7b

然后找到设置 ->语言模型,修改接口代理地址http://localhost:11434和模型,模型选择qwen1-7b

【大模型入门】ollama + lobechat打造个人专属大模型助手

【大模型入门】ollama + lobechat打造个人专属大模型助手

然后再修改下默认助手中的模型即可

【大模型入门】ollama + lobechat打造个人专属大模型助手

【大模型入门】ollama + lobechat打造个人专属大模型助手

06

python调用ollama

运行下面这段程序需要安装python3的环境,做人工智能建议直接安装anaconda,anaconda可以帮我们管理一些包,也可以通过conda管理虚拟环境,使用起来非常方便。通常我喜欢在jupyter中调试代码,anaconda也集成了这个环境。

【大模型入门】ollama + lobechat打造个人专属大模型助手

# -*-  coding = utf-8 -*-import jsonimport sysimport tracebackimport logging#######################日志配置#######################import requestsfrom requests.adapters import HTTPAdapterlogging.basicConfig(    level=logging.INFO,    format='%(asctime)s [%(levelname)s]: %(message)s',  # 指定日志输出格式    datefmt='%Y-%m-%d %H:%M:%S'  # 指定日期时间格式)# 创建一个日志记录器formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s')  # 指定日志输出格式logger = logging.getLogger(__name__)logger.setLevel(logging.INFO)if sys.platform == "linux":    # 创建一个文件处理器,将日志写入到文件中    file_handler = logging.FileHandler('/data/logs/app.log')else:    # 创建一个文件处理器,将日志写入到文件中    file_handler = logging.FileHandler('E:\logs\app.log')file_handler.setFormatter(formatter)# 创建一个控制台处理器,将日志输出到控制台# console_handler = logging.StreamHandler()# console_handler.setFormatter(formatter)# 将处理器添加到日志记录器中logger.addHandler(file_handler)# logger.addHandler(console_handler)DEFAULT_MODEL = "qwen1-7b"DEFAULT_IP='127.0.0.1'DEFAULT_PORT=11434DEFAULT_MAX_TOKENS = 32768DEFAULT_CONNECT_TIMEOUT=3DEFAULT_REQUEST_TIMEOUT=60DEFAULT_MAX_RETRIES=0DEFAULT_POOLSIZE=100class Model:    def __init__(self):        self.headers = {"User-Agent": "Test Client"}        self.s = requests.Session()        self.s.mount('http://', HTTPAdapter(pool_connections=DEFAULT_POOLSIZE, pool_maxsize=DEFAULT_POOLSIZE, max_retries=DEFAULT_MAX_RETRIES))        self.s.mount('https://', HTTPAdapter(pool_connections=DEFAULT_POOLSIZE, pool_maxsize=DEFAULT_POOLSIZE, max_retries=DEFAULT_MAX_RETRIES))    def chat(self, message, history=None, system=None, config=None, stream=True):        if config is None:            config = {'temperature': 0.45, 'top_p': 0.9, 'repetition_penalty': 1.2, 'max_tokens': DEFAULT_MAX_TOKENS,'n':1}        logger.info(f'config: {config}')        messages = []        if system is not None:            messages.append({"role": "system", "content": system})        if history is not None:            if len(history) > 0 and len(history) % 2 == 0:                for his in history:                    user,assistant = his                    user_obj = {"role": "user", "content": user}                    assistant_obj = {"role": "assistant", "content": assistant}                    messages.append(user_obj)                    messages.append(assistant_obj)        if message is None:            raise RuntimeError("prompt不能为空!")        else:            messages.append({"role": "user", "content": message})        logger.info(messages)        try:            merge_pload = {"model": DEFAULT_MODEL, "messages": messages, **config}            logger.info(merge_pload)            response = self.s.post(f"http://{DEFAULT_IP}:{DEFAULT_PORT}/api/chat", headers=self.headers,                                   json=merge_pload, stream=stream, timeout=(DEFAULT_CONNECT_TIMEOUT, DEFAULT_REQUEST_TIMEOUT))            str = ''            for msg in response:                # logger.info(msg)                if msg and len(msg) > 0:                    decode_msg = msg.decode('UTF-8')                    if 'n' in decode_msg :                        if len(str) == 0:                            obj = json.loads(decode_msg)                            if 'message' in obj:                                content = obj['message']['content']                                if content is not None:                                    yield content                        else:                            str = str + decode_msg                            obj = json.loads(str)                            if 'message' in obj:                                content = obj['message']['content']                                if content is not None:                                    str=''                                    yield content                    else:                        str = str + decode_msg        except Exception as e:            traceback.print_exc()if __name__ == '__main__':    model = Model()    message = '我家有什么特产?'    system = 'You are a helpful assistant.'    history = [('hi,你好','你好!有什么我可以帮助你的吗?'),('我家在天水,很好玩哦','天水是一个美丽的城市,有很多有趣的地方可以去。'),]    config = {'temperature': 0.45, 'top_p': 0.9, 'repetition_penalty': 1.2, 'max_tokens': 8192}    gen = model.chat(message=message, history=history, system=system, config=config, stream=True)    results = []    for value in gen:        results.append(value)    str = ''.join(results)    logger.info(str)

运行结果如下

【大模型入门】ollama + lobechat打造个人专属大模型助手

原文始发于微信公众号(AI与网安):【大模型入门】ollama + lobechat打造个人专属大模型助手

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月19日21:54:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【大模型入门】ollama + lobechat打造个人专属大模型助手http://cn-sec.com/archives/2661990.html

发表评论

匿名网友 填写信息