代码与领域模型微调
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read312 words

代码与领域模型微调

不只是客服——代码生成、医疗、法律、金融,每个领域都有独特的微调策略。

领域微调全景

graph TD BASE[通用基座模型] --> CODE[代码生成微调] BASE --> MEDICAL[医疗领域微调] BASE --> LEGAL[法律领域微调] BASE --> FINANCE[金融领域微调] BASE --> MULTI[多语言微调] CODE --> CODE_APP[代码助手 / Copilot] MEDICAL --> MED_APP[医疗问答 / 辅助诊断] LEGAL --> LEG_APP[合同审查 / 法律咨询] FINANCE --> FIN_APP[研报分析 / 风控] MULTI --> MULTI_APP[多语言客服 / 翻译] style BASE fill:#e3f2fd,stroke:#1565c0,stroke-width:2px style CODE_APP fill:#c8e6c9,stroke:#388e3c,stroke-width:2px style MED_APP fill:#fff3e0,stroke:#f57c00,stroke-width:2px

代码生成模型微调

"""
代码生成模型微调
"""
class CodeFineTuning:
"""代码模型微调"""
BASE_MODELS = {
"CodeLlama-7B": {
"优势": "Meta 出品,代码能力强",
"适用": "Python / JS / Java",
},
"DeepSeek-Coder-V2": {
"优势": "中文代码理解强",
"适用": "全语言,中文注释",
},
"StarCoder2-7B": {
"优势": "开源许可友好",
"适用": "企业内部使用",
},
"Qwen2.5-Coder-7B": {
"优势": "通义千问代码版",
"适用": "中英文代码场景",
},
}
DATA_FORMAT = """
# 代码微调数据格式
## 指令格式(推荐)
{
"instruction": "编写一个 Python 函数,实现二分查找",
"input": "",
"output": "def binary_search(arr, target):\\n    ..."
}
## 补全格式
{
"prefix": "def fibonacci(n):\\n    '''计算第n个斐波那契数'''\\n",
"suffix": "",
"middle": "    if n <= 1:\\n        return n\\n    return fibonacci(n-1) + fibonacci(n-2)"
}
## 对话格式(代码问答)
{
"messages": [
{"role": "system", "content": "你是代码助手,要求代码正确、有注释"},
{"role": "user", "content": "帮我优化这段代码:\\n```python\\nfor i in range(len(arr)):\\n    ...\\n```"},
{"role": "assistant", "content": "优化后:\\n```python\\nfor item in arr:\\n    ...\\n```\\n优化点:..."}
]
}
"""
TRAINING_TIPS = {
"数据质量": [
"只用通过 lint 和测试的代码",
"包含注释和文档字符串",
"覆盖常见设计模式和最佳实践",
"包含错误处理和边界情况",
],
"训练配置": [
"序列长度 2048-4096(代码较长)",
"较低学习率 1e-4(精确任务)",
"FIM (Fill-in-Middle) 格式提升补全能力",
"混入通用数据防止遗忘对话能力",
],
"评估方法": [
"HumanEval / MBPP pass@1",
"内部代码库的单元测试通过率",
"代码风格检查 (pylint/mypy 通过率)",
],
}
code_ft = CodeFineTuning()
print("=== 代码微调推荐基座 ===")
for model, info in code_ft.BASE_MODELS.items():
print(f"  {model}: {info['优势']}")

领域知识微调

"""
领域知识微调策略
"""
class DomainFineTuning:
"""领域微调"""
DOMAINS = {
"医疗": {
"数据来源": [
"医学教材和文献",
"脱敏病历数据",
"医学考试题库(执医考试)",
"医学指南和共识",
],
"特殊要求": [
"⚠️ 必须有免责声明",
"不得替代专业医疗建议",
"敏感信息脱敏",
"需要医学专家审查",
],
"评估重点": "准确性 > 安全性 > 详尽性",
"推荐基座": "Qwen2.5-7B 或 Yi-34B",
},
"法律": {
"数据来源": [
"法律法规全文",
"司法判例数据",
"律师咨询 Q&A",
"法律考试题库(法考)",
],
"特殊要求": [
"明确标注法律法规来源和时效",
"区分法律建议和法律意见",
"覆盖最新法规更新",
],
"评估重点": "准确性 > 引用正确 > 实用性",
"推荐基座": "Qwen2.5-72B 或 GLM-4",
},
"金融": {
"数据来源": [
"研究报告",
"财务报表分析",
"金融新闻摘要",
"CFA/FRM 考试题",
],
"特殊要求": [
"投资建议免责声明",
"数据时效性标注",
"合规审查",
],
"评估重点": "准确性 > 数据敏感性 > 时效性",
"推荐基座": "Qwen2.5-72B",
},
}
domain_ft = DomainFineTuning()
print("=== 领域微调 ===")
for domain, info in domain_ft.DOMAINS.items():
print(f"\n🏥 {domain}:")
print(f"  推荐基座: {info['推荐基座']}")
print(f"  评估重点: {info['评估重点']}")
print("  数据来源:")
for src in info["数据来源"]:
print(f"    - {src}")

多语言微调

"""
多语言微调策略
"""
class MultilingualFineTuning:
"""多语言微调"""
STRATEGIES = {
"数据配比": {
"主语言 (中文)": "50%",
"英语": "30%",
"其他语言": "10%",
"跨语言对(翻译对)": "10%",
},
"方法选择": {
"翻译增强": {
"方法": "用翻译 API 扩充小语种数据",
"效果": "简单有效",
"限制": "翻译质量影响模型质量",
},
"跨语言对齐": {
"方法": "同一内容的中英对照训练",
"效果": "多语言理解一致性好",
"限制": "需要高质量平行语料",
},
"语言标签": {
"方法": "System prompt 指定回复语言",
"效果": "灵活控制输出语言",
"限制": "需要各语言都有训练数据",
},
},
}
DATA_EXAMPLE = """
# 多语言训练数据示例
## 中文
{"messages": [
{"role": "system", "content": "请用中文回答"},
{"role": "user", "content": "什么是微调?"},
{"role": "assistant", "content": "微调是在预训练模型基础上..."}
]}
## 英文
{"messages": [
{"role": "system", "content": "Please respond in English"},
{"role": "user", "content": "What is fine-tuning?"},
{"role": "assistant", "content": "Fine-tuning is the process of..."}
]}
## 跨语言(中文问题 + 英文回答)
{"messages": [
{"role": "system", "content": "Reply in the same language as the user"},
{"role": "user", "content": "Explain LoRA in simple terms"},
{"role": "assistant", "content": "LoRA stands for Low-Rank Adaptation..."}
]}
"""
multi_ft = MultilingualFineTuning()
print("=== 多语言数据配比 ===")
for lang, pct in multi_ft.STRATEGIES["数据配比"].items():
print(f"  {lang}: {pct}")

微调全流程总结

graph TD DECIDE[决策:是否需要微调] --> DATA[数据准备] DATA --> METHOD[选择微调方法] METHOD --> TRAIN[训练] TRAIN --> EVAL[评估] EVAL -->|不达标| DATA EVAL -->|达标| OPTIMIZE[量化优化] OPTIMIZE --> DEPLOY[部署] DEPLOY --> MONITOR[监控迭代] MONITOR -->|质量下降| DATA style DECIDE fill:#e3f2fd,stroke:#1565c0,stroke-width:2px style DEPLOY fill:#c8e6c9,stroke:#388e3c,stroke-width:2px

各章速查表

章节 核心内容 关键决策
01-为什么微调 Prompt vs RAG vs 微调决策框架 是否需要微调
02-微调方法 LoRA / QLoRA / Full FT 对比 选哪种方法
03-数据准备 收集、清洗、格式化、增强 数据质量把关
04-训练实战 环境搭建、超参数、分布式训练 训练配置选择
05-高级技术 SFT / RLHF / DPO / 蒸馏 对齐策略选择
06-评估测试 自动指标 + LLM Judge + 人工评估 评估方案设计
07-部署优化 量化 / vLLM / 版本管理 / 监控 部署方案选择
08-实战案例 客服 / 代码 / 领域 / 多语言 场景化落地

恭喜完成 LLM 微调实战指南! 从决策到部署,你已经掌握了微调的完整知识体系。