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

01

简介

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

02

安装ollama

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

https://ollama.com/

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

说明ollama已经安装完成

03

模型下载

上官网查看大模型

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

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

04

使用本地模型

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

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

https://huggingface.co/

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

https://modelscope.cn/home

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

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

后面这个路径就是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

模型创建完成

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

ollama list

运行这个模型来回答问题

ollama run qwen1-7b

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

安装完成后IP+3210访问

到此lobechat安装完成

05

lobe-chat配置本地大模型

首先启动ollama服务

ollama serve

然后运行大模型

ollama run qwen1-7b

然后找到设置 ->语言模型,修改接口代理地址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)` 

运行结果如下

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

对于0基础小白入门:

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

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

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

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐