基于MySQL订单表制作模型微调数据集的完整步骤
一、数据库连接与数据提取
- 配置MySQL连接环境
- 使用
SQLAlchemy连接MySQL数据库,配置连接参数(参考搜索结果25):
from sqlalchemy import create_engine
# 数据库配置示例(需替换实际参数)
engine = create_engine('mysql+pymysql://root:password@localhost:3306/order_db?charset=utf8')- 提取订单表数据
- 执行SQL查询获取订单数据,按需筛选字段(如订单ID、用户ID、金额、时间、商品列表等):
import pandas as pd
# 读取订单表数据
query = "SELECT * FROM orders WHERE created_at >= '2024-01-01'"
df = pd.read_sql(query, engine)二、数据预处理与结构化
- 数据清洗
- 处理缺失值、异常值(如负金额、无效时间戳):
df = df.dropna(subset=['order_amount', 'user_id']) # 删除关键字段缺失的行
df = df[df['order_amount'] > 0] # 过滤异常金额- 字段转换与增强
- 将结构化数据转换为自然语言描述,便于生成问答对(参考搜索结果1):
# 示例:生成订单描述文本
df['order_description'] = df.apply(
lambda row: f"用户{row['user_id']}于{row['created_at']}下单,订单金额{row['order_amount']}元,包含商品:{row['product_list']}。",
axis=1
)三、生成问答对数据集
- 设计Prompt模板
- 根据订单描述生成业务导向的问答对(参考搜索结果14):
QA_SYSTEM_PROMPT = """
<Context></Context> 标记中是订单描述文本,请根据内容生成业务分析相关的问答对:
- 问题需涵盖订单金额、用户行为、时间分布、商品关联性等维度。
- 答案需包含具体数值和逻辑推导。
- 输出格式为JSON数组,包含"question"和"answer"字段。
"""- 调用大模型生成问答对
- 使用长上下文模型(如GPT-4或Claude-3)批量处理文本分块:
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import AzureChatOpenAI
# 分块处理长文本(每块最多5条订单描述)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=100)
texts = text_splitter.split_text('\n'.join(df['order_description']))
# 生成问答对
llm = AzureChatOpenAI(api_key="YOUR_KEY", deployment_name="gpt-4")
qa_pairs = []
for text in texts:
response = llm.invoke(f"{QA_SYSTEM_PROMPT}\n<Context>{text}</Context>")
qa_pairs.extend(json.loads(response.content))四、数据集格式与验证
- 标准化输出格式
- 转换为Alpaca格式或指令微调格式(参考搜索结果14):
[
{
"instruction": "分析订单金额分布规律",
"input": "用户12345在2024-05-10下单金额为500元",
"output": "该订单金额为500元,高于平台平均客单价300元,可能属于高价值用户。"
}
]- 数据质量验证
- 覆盖率检查:确保问题覆盖订单金额、时间、用户行为等核心维度。
- 逻辑一致性:人工抽检答案是否与原始数据匹配(如金额数值是否正确)。
- 规模要求:根据搜索结果4,至少生成3万条问答对以保证微调效果。
五、完整代码流程整合
# 1. 数据提取
engine = create_engine('mysql+pymysql://root:password@localhost:3306/order_db')
df = pd.read_sql("SELECT * FROM orders", engine)
# 2. 数据预处理
df = clean_data(df) # 自定义清洗函数
df['description'] = generate_descriptions(df)
# 3. 生成问答对
texts = split_text(df['description'])
qa_data = generate_qa_pairs(texts, llm)
# 4. 保存数据集
with open('order_qa.json', 'w') as f:
json.dump(qa_data, f, ensure_ascii=False, indent=2)六、选型建议与注意事项
- 模型选择
- 优先选择长上下文模型(如GPT-4-128k),以支持多订单关联分析(如用户复购行为)1。
- 性能优化
- 并行化处理:使用异步请求或批量推理API加速生成(如Azure的
batch/chat接口)。 - 缓存机制:对重复订单描述缓存生成结果,减少API调用成本。
- 数据安全
- 脱敏处理:生成问答对时隐藏用户ID、手机号等敏感信息(参考搜索结果4隐私建议)。
总结
通过以上步骤,可将MySQL订单表转换为高质量的问答对数据集,适配大模型微调需求。关键点包括:结构化数据转自然语言、业务导向Prompt设计、规模化生成与严格验证。若需处理复杂逻辑(如跨表关联分析),可结合搜索结果的数据库设计原则扩展表关联字段。

















