Phi-3-mini-4k-instruct代码实例:10个实用功能实现
1. 开篇:为什么选择Phi-3-mini
Phi-3-mini-4k-instruct是微软推出的轻量级语言模型,虽然只有38亿参数,但性能表现相当出色。它特别适合在资源有限的环境下运行,比如个人电脑或者小型服务器,而且响应速度快,效果也不错。
今天我就带大家用10个实际的代码例子,看看这个模型能做些什么。从简单的文本生成到复杂的代码编写,每个例子都有完整的代码和说明,你可以直接复制粘贴到自己的项目里试试看。
2. 环境准备与快速开始
2.1 安装必要的库
首先确保你已经安装了Python和必要的库:
pip install transformers torch2.2 基础模型加载
from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "microsoft/Phi-3-mini-4k-instruct" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto") print("模型加载完成,可以开始使用了!")3. 10个实用功能代码示例
3.1 智能问答系统
def ask_question(question): prompt = f"<|user|>\n{question}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=200, temperature=0.7) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response.split("<|assistant|>")[-1].strip() # 使用示例 question = "Python中如何读取CSV文件?" answer = ask_question(question) print(f"问题:{question}") print(f"回答:{answer}")3.2 代码生成与解释
def generate_code(description): prompt = f"<|user|>\n请根据以下描述生成Python代码:{description}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=300, temperature=0.5) code = tokenizer.decode(outputs[0], skip_special_tokens=True) return code.split("<|assistant|>")[-1].strip() # 生成一个简单的数据处理代码 description = "读取CSV文件,计算某列的平均值" generated_code = generate_code(description) print(generated_code)3.3 文本摘要生成
def summarize_text(text, max_length=150): prompt = f"<|user|>\n请为以下文本生成摘要:{text}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=max_length, temperature=0.3) summary = tokenizer.decode(outputs[0], skip_special_tokens=True) return summary.split("<|assistant|>")[-1].strip() # 摘要示例 long_text = "人工智能是当前科技领域的热门话题,它正在改变我们的生活方式和工作方式。机器学习、深度学习等技术使得计算机能够像人类一样学习和思考..." summary = summarize_text(long_text) print(f"原文:{long_text}") print(f"摘要:{summary}")3.4 多语言翻译
def translate_text(text, target_language="英文"): prompt = f"<|user|>\n请将以下文本翻译成{target_language}:{text}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=200, temperature=0.2) translation = tokenizer.decode(outputs[0], skip_special_tokens=True) return translation.split("<|assistant|>")[-1].strip() # 翻译示例 chinese_text = "今天天气真好,适合出去散步" english_translation = translate_text(chinese_text, "英文") print(f"中文:{chinese_text}") print(f"英文:{english_translation}")3.5 创意写作助手
def creative_writing(prompt_text, style="故事"): prompt = f"<|user|>\n请以{style}的风格继续写作:{prompt_text}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=250, temperature=0.8) writing = tokenizer.decode(outputs[0], skip_special_tokens=True) return writing.split("<|assistant|>")[-1].strip() # 创意写作示例 story_prompt = "在一个遥远的星球上,有一个会说话的机器人" continued_story = creative_writing(story_prompt, "科幻") print(continued_story)3.6 代码调试与优化
def debug_code(buggy_code): prompt = f"<|user|>\n请帮我调试以下Python代码:\n{buggy_code}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=300, temperature=0.4) debug_advice = tokenizer.decode(outputs[0], skip_special_tokens=True) return debug_advice.split("<|assistant|>")[-1].strip() # 调试示例 problematic_code = """ def calculate_average(numbers): total = 0 for i in range(len(numbers)): total += numbers[i] return total / len(numbers) # 测试 print(calculate_average([1, 2, 3, 4, 5])) """ advice = debug_code(problematic_code) print(advice)3.7 学习概念解释
def explain_concept(concept, level="简单"): prompt = f"<|user|>\n请用{level}的方式解释:{concept}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=200, temperature=0.3) explanation = tokenizer.decode(outputs[0], skip_special_tokens=True) return explanation.split("<|assistant|>")[-1].strip() # 概念解释示例 concept = "机器学习" explanation = explain_concept(concept, "通俗易懂") print(f"{concept}的解释:{explanation}")3.8 邮件写作助手
def write_email(purpose, tone="正式"): prompt = f"<|user|>\n请写一封{tone}的邮件,目的是:{purpose}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=250, temperature=0.6) email = tokenizer.decode(outputs[0], skip_special_tokens=True) return email.split("<|assistant|>")[-1].strip() # 邮件写作示例 email_purpose = "申请休假三天" vacation_email = write_email(email_purpose, "礼貌") print(vacation_email)3.9 数据分析建议
def data_analysis_advice(data_description): prompt = f"<|user|>\n我有以下数据:{data_description},应该用什么分析方法?<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=250, temperature=0.5) advice = tokenizer.decode(outputs[0], skip_special_tokens=True) return advice.split("<|assistant|>")[-1].strip() # 数据分析建议示例 data_desc = "销售数据,包含日期、产品类别、销售额、利润" analysis_advice = data_analysis_advice(data_desc) print(analysis_advice)3.10 多轮对话系统
class ChatBot: def __init__(self): self.conversation_history = [] def chat(self, user_input): # 构建对话历史 history_text = "\n".join([f"<|{role}|>\n{text}<|end|>" for role, text in self.conversation_history]) prompt = f"{history_text}\n<|user|>\n{user_input}<|end|>\n<|assistant|>" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=400, temperature=0.7) response = tokenizer.decode(outputs[0], skip_special_tokens=True) # 更新对话历史 self.conversation_history.append(("user", user_input)) self.conversation_history.append(("assistant", response.split("<|assistant|>")[-1].strip())) # 保持最近5轮对话 if len(self.conversation_history) > 10: self.conversation_history = self.conversation_history[-10:] return self.conversation_history[-1][1] # 使用多轮对话 bot = ChatBot() print(bot.chat("你好,我是小明")) print(bot.chat("你能帮我写代码吗?")) print(bot.chat("写一个Python函数计算斐波那契数列"))4. 使用技巧和注意事项
在实际使用Phi-3-mini时,有几个小技巧可以让你获得更好的效果:
温度参数调整:温度值控制生成的随机性,0.1-0.3适合事实性回答,0.7-0.9适合创意内容。
最大长度设置:根据任务复杂度调整max_length,简单问答150-200就够了,复杂任务可能需要300-400。
提示词设计:清晰的指令能获得更好的结果,比如明确要求"用Python代码"或者"用简单语言解释"。
错误处理:在实际应用中记得添加异常处理:
try: response = ask_question(question) except Exception as e: print(f"生成过程中出现错误:{e}") response = "抱歉,我现在无法回答这个问题"5. 实际应用场景
这些代码示例可以直接用在很多实际场景中:
教育辅助:用解释概念的功能帮助学生理解复杂知识点编程助手:代码生成和调试功能对开发者很有帮助内容创作:写作助手能帮你写邮件、文章甚至创意故事客户服务:智能问答系统可以处理常见客户问题数据分析:获取分析建议,指导数据探索方向
每个功能都可以根据具体需求进一步定制和优化,比如调整温度参数、修改提示词格式,或者结合其他工具一起使用。
6. 总结
整体用下来,Phi-3-mini-4k-instruct确实是个很实用的模型,虽然参数不多,但效果出乎意料的好。部署简单,运行速度快,而且能在普通的电脑上就跑起来,对个人开发者和小团队特别友好。
这10个代码示例覆盖了大部分常见的使用场景,你可以直接拿来用,也可以根据自己的需求修改。建议先从简单的功能开始试起,比如问答或者摘要生成,熟悉了再尝试更复杂的多轮对话或者代码生成。
模型的表现还会继续改进,后续可能会有更好的版本出来。不过就目前来说,Phi-3-mini已经足够应对很多日常的AI辅助任务了,值得一试。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。