基于中文金融知识的 LLaMA 系微调模型智能问答系统
本文介绍了一个基于 LLaMA 系基座模型经中文金融知识指令微调的智能问答系统。内容涵盖环境搭建、模型下载、数据集构建(含金融领域数据清洗与增强)、LoRA 微调流程、训练资源需求及效果对比分析。此外,详细说明了提示词模板的使用方法及模型部署优化的最佳实践,包括量化加速、API 服务化及常见问题排查,为金融垂直领域的大模型应用开发提供了完整的技术参考。

本文介绍了一个基于 LLaMA 系基座模型经中文金融知识指令微调的智能问答系统。内容涵盖环境搭建、模型下载、数据集构建(含金融领域数据清洗与增强)、LoRA 微调流程、训练资源需求及效果对比分析。此外,详细说明了提示词模板的使用方法及模型部署优化的最佳实践,包括量化加速、API 服务化及常见问题排查,为金融垂直领域的大模型应用开发提供了完整的技术参考。

本项目基于 LLaMA 系列基座模型,经过中文金融知识指令精调(Instruct-tuning)构建而成。通过整合中文金融公开问答数据与爬取的金融垂直领域数据,构建了高质量的指令数据集,并在此基础上对 LLaMA 系模型进行了指令微调,显著提升了模型在金融领域的问答效果。
首先安装依赖包,建议 Python 环境版本为 3.9 及以上。
pip install -r requirements.txt
其次安装 Git LFS 以便本地下载大模型权重文件。
git lfs install
# 下载 7B 模型到本地
bash ./base_models/load.sh
LoRA 权重可以通过 Huggingface 下载,目录结构如下:
Fin-Alpaca-LoRA-7B-Meta/
- adapter_config.json # LoRA 权重配置文件
- adapter_model.bin # LoRA 权重文件
| LoRA 模型 | 分类 | 重构模型 | 训练数据量 | 训练序列长度 | 版本 |
|---|---|---|---|---|---|
| Fin-Alpaca-LoRA-7B-Meta | 中文金融问答微调模型 | decapoda-research/llama-7b-hf | 12M 指令数据 | 512 | V1.0 |
| Fin-Alpaca-LoRA-7B-Linly | 中文金融问答微调模型 | Linly-AI/Chinese-LLaMA-7B | 14M 指令数据 | 512 | V1.1 |
目前在 ./instruction_data/infer.json 中提供了一些测试用例,也可替换成其它的数据集但注意格式保持一致。
运行 infer 脚本进行单模型推理或多模型对比测试:
# 单模型推理
bash ./scripts/infer.sh
# 多模型对比
bash ./scripts/comparison_test.sh
此前版本采用了公开和爬取的中文金融领域问答数据,涉及保险、理财、股票、基金、贷款、信用卡、社保等细分领域。
{
"instruction": "办理商业汇票应遵守哪些原则和规定?",
"input": "",
"output": "办理商业汇票应遵守下列原则和规定:1.使用商业汇票的单位,必须是在银行开立帐户的法人;2.商业汇票在同城和异地均可使用..."
}
针对此前数据仍存在不准确和类型单一等不完善的地方,目前利用 GPT3.5/4.0 接口进一步优化数据,并扩充中文金融知识库。设置多种 Prompt 形式、multi-task 形式拓展丰富指令数据集,实现金融领域多业务场景覆盖。
若想用自己的数据集微调 LLaMA,请按照 ./instruction_data/fin_data.json 的格式构建自己的数据集。
在微调过程中,关键超参数包括学习率、Batch Size 和 Epochs。推荐使用以下默认配置作为起点:
运行 finetune 脚本:
bash ./scripts/finetune.sh
目前训练设备为一张 A100-SXM-80GB 显卡,训练总轮次 10 轮。
预计 3090/4090 显卡 (24GB 显存) 以上显卡可以较好支持,需根据显存大小调整 batch_size 或开启梯度累积(Gradient Accumulation)。
训练过程中的 Loss 下降曲线及验证集表现是评估模型收敛情况的关键指标。通常观察到 Loss 在前几个 epoch 快速下降,随后趋于平稳。
下表展示了不同模型在特定金融问题上的输出对比:
| 测试输入 | 原始 Llama 输出 | Cornucopia(Fin-Alpaca-LoRA-7B-Meta) 输出 | Cornucopia(Fin-Alpaca-LoRA-7B-Linly) 输出 | 文心一言输出 | 讯飞星火认知输出 |
|---|---|---|---|---|---|
| 老年人理财好还是存定期好? | 老年人的理财办法应该适合于自身情况... | 若投资者风险承受能力比较高,那么可以选择理财产品进行投资... | 对于风险承受能力比较低的老年人来说,选择定期存款比较好... | 老年人存定期比较好。老年人没工作收入... | 作为 AI 语言模型,我没有个人观点和建议... |
| 股票和基金能当天随买随卖吗? | Yes, stocks and funds can be bought... | 不能,股票和基金实行 T+1 交易... | 不能,股票交易时间:周一至周五上午 9:30-11:30... | 不可以,股票基金实行 T+1 交易... | 股票和基金的交易方式因不同的证券市场而异... |
从对比结果可见,经过金融领域微调的模型在专业术语使用和逻辑准确性上优于通用大模型。
此目录包含用于 LoRA 微调 LLaMa 模型的提示的模板样式。
模板是通过一个 JSON 文件描述的,该文件包含以下键:
prompt_input: 当 input 不为 None 时使用的模板。使用 {instruction} 和 {input} 占位符。prompt_no_input: 当 input 为 None 时使用的模板。使用 {instruction} 占位符。description: 模板的简短描述及适用场景。response_split: 用于从模型输出中切割真实响应的分隔符文本。未使用 {response} 占位符,因为响应始终是模板的最后一个元素,只需拼接即可。
默认模板除非另有指定,否则使用 alpaca.json。
{
"description": "Template used by Alpaca-LoRA.",
"prompt_input": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Input:\n{input}\n\n### Response:\n",
"prompt_no_input": "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Response:\n",
"response_split": "### Response:"
}
到目前为止,用于通用 LoRA 微调的默认模板。
原始羊驼使用的旧模板,响应字段后没有换行符。保留以供参考和实验。
一个修剪过的羊驼模板,它似乎也表现得很好,并节省了一些 tokens。使用默认模板创建的模型似乎也可以通过短时间查询。
prompter.pyPrompter class, a template manager.
from utils.prompter import Prompter
为了在实际生产环境中高效使用该模型,建议采用以下步骤进行部署。
对于显存受限的场景,可以使用 GGUF 或 AWQ 量化技术将模型压缩至 4bit 或 8bit,在保持精度损失可控的前提下大幅降低显存占用。
使用 FastAPI 封装推理接口,结合 uvicorn 进行异步处理,以支持高并发请求。
from fastapi import FastAPI
import torch
app = FastAPI()
@app.post("/chat")
def chat(instruction: str):
# 调用模型推理逻辑
response = model.generate(instruction)
return {"answer": response}
在生产环境中,应集成 Prometheus 和 Grafana 监控 GPU 利用率、推理延迟及 QPS,以便及时发现瓶颈并进行扩容。
本系统旨在提供一个可复现、可扩展的金融领域大模型微调方案,帮助开发者快速构建垂直领域的智能问答应用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online