当前位置:   article > 正文

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

lobechat ollama

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

01

简介

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

02

安装ollama

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

https://ollama.com/
  • 1

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

说明ollama已经安装完成

03

模型下载

上官网查看大模型

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

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

04

使用本地模型

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

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

https://huggingface.co/
  • 1

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

https://modelscope.cn/home
  • 1

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

FROM D:\LargeModel\GGUF-LIST\TheBloke\Qwen-1_7B-Chat-q5-GGUF\qwen1_5-7b-chat-q5_k_m.gguf
  • 1

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

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

ollama create qwen1-7b -f D:\LargeModel\GGUF-LIST\TheBloke\Qwen-1_7B-Chat-q5-GGUF\Modelfile.txt
  • 1

模型创建完成

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

ollama list
  • 1

运行这个模型来回答问题

ollama run qwen1-7b
  • 1

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
  • 1

安装完成后IP+3210访问

到此lobechat安装完成

05

lobe-chat配置本地大模型

首先启动ollama服务

ollama serve
  • 1

然后运行大模型

ollama run qwen1-7b
  • 1

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

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

06

python调用ollama

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

`# -*-  coding = utf-8 -*-``import json``import sys``import traceback``import logging` `#######################日志配置#######################``import requests``from requests.adapters import HTTPAdapter` `logging.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=11434``DEFAULT_MAX_TOKENS = 32768``DEFAULT_CONNECT_TIMEOUT=3``DEFAULT_REQUEST_TIMEOUT=60``DEFAULT_MAX_RETRIES=0``DEFAULT_POOLSIZE=100` `class 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)` 
  • 1

运行结果如下

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/815342
推荐阅读
相关标签