智源社区 2024年11月24日
社区供稿|阿里国际AI团队最新开源!探索面向开放性问题的推理模型 Marco-o1
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了一个基于Marco-o1模型构建的对话生成系统。该系统使用Hugging Face平台上的预训练模型,并提供了一个简单的Python代码示例,演示了如何加载模型、生成文本以及进行人机交互。此外,为了应对模型输出较长的挑战,还提供了vllm版本供用户使用。用户可以通过输入文本与模型进行对话,模型会根据输入内容生成相应的回复,实现人机交互的功能。该系统可用于各种对话场景,例如客服、聊天机器人等,为用户提供便捷的交互体验。

😊 **模型加载与使用:** 该系统使用Hugging Face平台上的Marco-o1模型,用户可以通过简单的Python代码加载模型和分词器,并使用GPU进行加速,以提升模型的运行效率。

🤖 **对话生成过程:** 系统采用基于Transformer的语言模型,通过输入用户文本,预测下一个token,从而生成连贯的回复。模型会根据历史对话上下文和当前输入生成更符合逻辑和语境的回复,实现流畅的对话体验。

💬 **人机交互功能:** 系统提供了一个简单的交互界面,用户可以通过输入文本与模型进行对话,模型会根据输入内容生成相应的回复。用户还可以通过输入'q'退出对话,或输入'c'清空对话历史,方便用户进行灵活的操作。

🚀 **vllm版本优化:** 考虑到模型输出较长的特点,系统还提供了一个vllm版本,可以更好地处理长文本生成任务,提升模型的实用性。

💡 **应用场景广泛:** 该系统可以应用于各种对话场景,例如客服、聊天机器人等,为用户提供便捷的交互体验,提升用户满意度。

目前模型已经上传到huggingface,只需要简单代码即可使用。考虑到模型输出较长,因此我们还提供了一个vllm版本供大家使用。

import torchfrom typing import List, Dict, Tuplefrom transformers import AutoModelForCausalLM, AutoTokenizer

def load_model_and_tokenizer(path): tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained(path, trust_remote_code=True).to('cuda:0') model.eval() return tokenizer, model

def generate_response(model, tokenizer, input_ids, attention_mask, max_new_tokens=4096): generated_ids = input_ids with torch.inference_mode(): for _ in range(max_new_tokens): outputs = model(input_ids=generated_ids, attention_mask=attention_mask) next_token_id = torch.argmax(outputs.logits[:, -1, :], dim=-1).unsqueeze(-1) generated_ids = torch.cat([generated_ids, next_token_id], dim=-1) attention_mask = torch.cat([attention_mask, torch.ones_like(next_token_id)], dim=-1) new_token = tokenizer.decode(next_token_id.squeeze(), skip_special_tokens=True) print(new_token, end='', flush=True) if next_token_id.item() == tokenizer.eos_token_id: break return tokenizer.decode(generated_ids[0][input_ids.shape[-1]:], skip_special_tokens=True)

def chat(model, tokenizer): history: List[Dict[str, str]] = [] print("Enter 'q' to quit, 'c' to clear chat history.") while True: user_input = input("User: ").strip().lower() if user_input == 'q': print("Exiting chat.") break if user_input == 'c': print("Clearing chat history.") history.clear() continue if not user_input: print("Input cannot be empty.") continue
history.append({"role": "user", "content": user_input}) text = tokenizer.apply_chat_template(history, tokenize=False, add_generation_prompt=True) model_inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=4096).to('cuda:0')
print('Assistant:', end=' ', flush=True) response = generate_response(model, tokenizer, model_inputs.input_ids, model_inputs.attention_mask) print() history.append({"role": "assistant", "content": response})

def main(): path = "AIDC-AI/Marco-o1" tokenizer, model = load_model_and_tokenizer(path) print('Starting chat.') chat(model, tokenizer)

if __name__ == "__main__": main()

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

对话生成 Marco-o1 Hugging Face 语言模型 人机交互
相关文章