字数 2502,阅读大约需 13 分钟
还在为云端大模型的这些问题头疼?
本地AI模型搭建,就是解决这些痛点的终极方案:数据100%可控、离线随时可用、按需深度定制,真正把AI的主权握在自己手里。
今天整理了7个本地AI搭建全链路平台,从「找模型」到「跑模型」再到「管模型」一站式覆盖!
全球最大的AI开源社区与模型托管平台适合人群:所有需要找开源模型的个人开发者、企业
transformers库原生调用,一行代码加载本地模型Trainer训练API,支持私有数据微调、全量训练国产开源「模型即服务」共享平台适合人群:国内用户、中文场景、新手开发者
全球最前沿的开源大模型框架聚集地适合人群:技术极客、AI框架开发者、想深度定制模型的用户
本地运行开源大模型的「轻量神器」适合人群:新手、个人用户、普通电脑用户,本地部署首选
ollama run 模型名 就能拉起大模型服务,自动完成环境配置、模型量化、依赖管理AI模型聚合与统一API平台适合人群:AI应用开发者、需要多模型统一调度的团队
高颜值多模型管理桌面客户端适合人群:普通用户、不想敲命令的开发者,本地AI可视化管理首选
一站式本地知识库+大模型管理系统适合人群:企业、隐私敏感用户、需要搭建私有知识库的用户
# -*- coding:utf-8 -*-from ollama import chatimport jsonimport osfrom datetime import datetimeclass OllamaChatSession: def __init__(self, model_name, system_prompt=None): self.model_name = model_name self.messages = [] # 添加系统提示(可选) if system_prompt: self.messages.append({'role': 'system', 'content': system_prompt}) self.conversation_history = [] def chat_loop(self): """主对话循环""" print(f"🤖 Ollama对话系统 - 模型: {self.model_name}") print("命令: quit/exit=退出, clear=清空历史, save=保存对话, load=加载对话") print("=" * 40) while True: try: user_input = input("\n👤 你: ").strip() # 处理命令 if self._handle_commands(user_input): continue # 添加用户消息 self.messages.append({'role': 'user', 'content': user_input}) # 获取AI响应 response = self._get_ai_response() # 记录对话历史 self.conversation_history.append({ 'timestamp': datetime.now().isoformat(), 'user': user_input, 'assistant': response }) except KeyboardInterrupt: print("\n\n⚠️ 对话中断") break except Exception as e: print(f"\n❌ 错误: {e}") def _get_ai_response(self): """获取AI响应""" print("\n🤖 AI: ", end='', flush=True) stream = chat( model=self.model_name, messages=self.messages, stream=True, ) response = '' for chunk in stream: if 'message' in chunk and 'content' in chunk['message']: content = chunk['message']['content'] print(content, end='', flush=True) response += content # 添加AI响应到消息历史 if response: self.messages.append({'role': 'assistant', 'content': response}) return response def _handle_commands(self, user_input): """处理用户命令""" cmd = user_input.lower() if cmd in ['quit', 'exit', 'q']: print("\n👋 再见!") exit(0) elif cmd in ['clear', 'reset']: self.messages = [msg for msg in self.messages if msg['role'] == 'system'] if any(msg['role'] == 'system' for msg in self.messages) else [] print("🗑️ 对话历史已清空") return True elif cmd == 'save': self.save_conversation() return True elif cmd == 'load': self.load_conversation() return True elif cmd == 'history': self.show_history() return True return False def save_conversation(self, filename=None): """保存对话历史到文件""" if not filename: timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"conversation_{timestamp}.json" try: with open(filename, 'w', encoding='utf-8') as f: json.dump({ 'model': self.model_name, 'timestamp': datetime.now().isoformat(), 'conversation': self.conversation_history }, f, ensure_ascii=False, indent=2) print(f"💾 对话已保存到: {filename}") except Exception as e: print(f"❌ 保存失败: {e}") def load_conversation(self, filename=None): """从文件加载对话历史""" if not filename: # 列出所有对话文件 files = [f for f in os.listdir('.') if f.startswith('conversation_') and f.endswith('.json')] if not files: print("📁 未找到对话文件") return print("可加载的对话文件:") for i, f in enumerate(files, 1): print(f" {i}. {f}") try: choice = int(input("选择文件编号: ")) - 1 filename = files[choice] except: print("❌ 无效选择") return try: with open(filename, 'r', encoding='utf-8') as f: data = json.load(f) self.conversation_history = data.get('conversation', []) # 重建消息历史 self.messages = [] if 'system' in [msg.get('role') for msg in data.get('messages', [])]: # 如果有系统消息,保留它 system_msg = next(msg for msg in data.get('messages', []) if msg.get('role') == 'system') self.messages.append(system_msg) print(f"📂 已加载对话: {filename}") print(f"📊 包含 {len(self.conversation_history)} 轮对话") except Exception as e: print(f"❌ 加载失败: {e}") def show_history(self): """显示最近的对话历史""" if not self.conversation_history: print("📭 对话历史为空") return print(f"\n📜 最近 {min(5, len(self.conversation_history))} 轮对话:") for i, conv in enumerate(self.conversation_history[-5:], 1): print(f"\n{i}. [{conv['timestamp'][11:19]}]") print(f" 你: {conv['user'][:50]}...") print(f" AI: {conv['assistant'][:50]}...")# 使用示例if __name__ == "__main__": # 可以自定义系统提示 system_prompt = "你是一个有帮助的AI助手,请用中文简洁明了地回答问题。" # 创建对话会话 chat_session = OllamaChatSession( model_name='deepseek-r1', system_prompt=system_prompt ) # 开始对话 chat_session.chat_loop()#Hugging Face Transformers :提供丰富的预训练LLM 需要能上外网https://huggingface.cofrom transformers import AutoTokenizer, AutoModelForCausalLM# 加载预训练模型gpt2tokenizer = AutoTokenizer.from_pretrained("gpt2")model = AutoModelForCausalLM.from_pretrained("gpt2")# 写提示词,生成后续文本prompt = "马上要五一了,你有什么旅行推荐"inputs = tokenizer.encode(prompt, return_tensors="pt") #编码outputs = model.generate(inputs["input_ids"], max_length=100, num_return_sequences=1, no_repeat_ngram_size=2)print("gpt生成的文本:", tokenizer.decode(outputs[0], skip_special_tokens=True))# 使用 BERT 进行情感分析from transformers import pipelinesentiment_analysis = pipeline("sentiment-analysis")text = "I do not want to work, i want go home for new year"# 情感分析print("情感分析结果:", sentiment_analysis(text))#使用BERT进行NER(命名实体识别)from transformers import BertTokenizer, BertForTokenClassificationfrom transformers import pipeline# 加载预训练的 BERT 模型和分词器tokenizer = BertTokenizer.from_pretrained('dbmdz/bert-large-cased-finetuned-conll03-english')model = BertForTokenClassification.from_pretrained('dbmdz/bert-large-cased-finetuned-conll03-english')# 创建 NER pipelinenlp_ner = pipeline("ner", model=model, tokenizer=tokenizer)# 示例文本text = "苹果公司总部位于美国加利福尼亚州的库比蒂诺市。"# 进行命名实体识别ner_results = nlp_ner(text)# 输出识别结果for entity in ner_results: print(f"实体: {entity['word']}, 类别: {entity['entity']}, 分数: {entity['score']:.4f}")from langchain.llms import OpenAIfrom langchain.chains import LLMChainfrom langchain.prompts import PromptTemplate# 初始化LLMllm = OpenAI(temperature=0.7)# 创建提示模板template = "Tell me a {adjective} story about {topic}"prompt = PromptTemplate(input_variables=["adjective", "topic"], template=template)# 创建链chain = LLMChain(llm=llm, prompt=prompt)# 运行链result = chain.run(adjective="funny", topic="robots")print(result)结语本地AI早已不是技术极客的专属,7大平台覆盖模型下载、一键部署、Python调用、本地训练全流程,真正实现数据可控、离线可用、自定义定制。无论是个人用Python开发AI工具,还是企业本地训练私有模型,这套方案都能完美满足需求。告别云端限制,把AI的控制权牢牢握在自己手中!