微信扫码
添加专属顾问
我要投稿
这是一系列教小白怎么使用大模型的文章,不讲原理和公式,就讲小白都听得懂的怎么安装使用。
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-7b05
—
安装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 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 = hisuser_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 contentelse:str = str + decode_msgobj = json.loads(str)if 'message' in obj:content = obj['message']['content']if content is not None:str=''yield contentelse:str = str + decode_msgexcept 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)
运行结果如下
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-28
Shadow:非技术背景如何利用Agent OS,将专业经验“技能化”实现个人效能增强#趋势#讲座文字稿
2025-10-28
十五五规划来了,普通人如何不被AI淘汰?
2025-10-16
“AI智能做课”还是“智障做课”?我被某SAAS上市公司的AI产品坑哭了!
2025-10-10
提效40%?揭秘AI驱动的支付方式“一键接入”系统
2025-10-10
靠谱是AI Agent最关键的衡量条件吗?恐怕不是。
2025-09-12
AI赋能前端开发提效实践:以长颈鹿接入为例
2025-08-26
让浏览器自己工作:AI自动化技术落地全攻略【AI助力全员提效方向】
2025-08-25
从"技术牛马"到AI参与者:我的300小时突围实战指南
2025-08-25
2025-08-06
2025-09-12
2025-08-26
2025-10-16
2025-08-12
2025-08-23
2025-08-25
2025-10-28
2025-10-10