微信扫码
添加专属顾问
我要投稿
这是一系列教小白怎么使用大模型的文章,不讲原理和公式,就讲小白都听得懂的怎么安装使用。
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+中大型企业
2026-02-04
Coding Agent 的最终形态是 TUI + GUI 吗?
2026-02-03
从 Clawdbot 看见个人 AI 助理元年的真正到来
2026-01-30
警惕!MoltBot 改名 OpenClaw:为什么你应该立即删除它?
2026-01-30
Vue 核心成员 Anthony Fu 发布了他的 Vue skills,这不就来了!
2026-01-29
飞牛OS | 相遇clawdbot,让小龙虾接管飞牛充当贾维斯
2026-01-29
不只PPT,Kimi K2.5 Agent可以帮你做Excel、Word和PDF了
2026-01-28
Clawdbot是什么?小白可以学习的技术概念指南
2026-01-28
一个Skill复用无数次:Manus如何用开放标准重新定义agent能力扩展
2026-01-24
2026-01-08
2026-01-30
2026-01-18
2025-12-10
2025-12-04
2026-01-29
2026-01-27
2026-01-21
2025-12-14
2026-02-04
2026-01-30
2026-01-21
2026-01-18
2025-12-25
2025-12-10
2025-12-09
2025-12-04