zhengshi_zhang LV
发表于 昨天 19:30
“Llama怎么导出内容”要看你说的“内容”是哪一种。Llama模型本身只负责推理,输出的是token序列或解码后的文本,它不会自动帮你落盘、发邮件或生成下载链接;所谓导出,通常由调用Llama的外层程序完成。常见有三类。
第一类,导出模型生成的回答。本地用Transformers推理时,先构造prompt,再调用model.generate,最后用tokenizer.decode把输出转成字符串,写入txt、json、jsonl或csv。示例:
```python
from transformers import AutoTokenizer, AutoModelForCausalLM
import json, torch
model_id = "metallama/Llama3.18BInstruct"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map="auto")
prompt = "请写一段产品介绍。"
inputs = tok(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_new_tokens=256)
text = tok.decode(outputs[0], skip_special_tokens=True)
with open("llama_output.txt", "w", encoding="utf8") as f:
f.write(text)
with open("llama_output.jsonl", "a", encoding="utf8") as f:
f.write(json.dumps({"prompt": prompt, "output": text}, ensure_ascii=False) + "
")
```
如果多轮对话,把messages按角色保存成JSON数组,每次请求后append一条记录。批量导出时循环prompt列表,逐条写jsonl,便于后续检索和处理。
第二类,通过服务接口导出。Ollama、vLLM或OpenAI兼容接口通常返回JSON,正文一般在response["message"]["content"]或choices[0].message.content里。把该字段取出后保存即可。流式输出要把每个chunk的delta.content拼接,结束后再写文件,否则容易得到半截内容。编码统一用utf8,结构化内容用jsonl更稳。
第三类,导出模型权重或适配器。Hugging Face格式可用model.save_pretrained("./llamaexport")和tokenizer.save_pretrained("./llamaexport");LoRA适配器用peft的save_pretrained;部署到Ollama可用Modelfile配合ollama create导出本地模型;转GGUF可用llama.cpp的convert_hf_to_gguf.py。权重导出体积大,要检查磁盘、权限和许可证。
导出时注意:不要直接把整个response对象当正文;要区分生成文本、日志和元数据;敏感信息要脱敏;长文本分块写;文件名带时间戳避免覆盖。这样Llama生成的内容就能稳定导出到文件、数据库或接口返回中。 |
|