AI实验设计配置:用Python脚本把实验参数和模型接口串起来
做AI实验设计配置,最直接的做法是用一个Python脚本把实验变量、提示词模板和模型接口串起来:变量决定每次请求的差异,模板保证输入结构一致,接口负责实际调用。
这样不用先搭平台,就能跑通多组对照实验并留下可复查的记录。
先明确要比较什么
AI实验设计配置的第一步不是写代码,而是确定实验的自变量和因变量。
常见做法是固定模型和提示词框架,只改变一个因素,比如温度值、系统提示词或输入样本。
建议先列一张实验表,至少包含以下字段:
- 实验编号:
exp_id,用于区分每组请求 - 自变量:本次要比较的参数,如
temperature、top_p - 输入样本:原始问题或待处理文本
- 期望观察项:输出是否稳定、是否符合格式、是否包含特定信息
如果一次改多个参数,结果就无法归因到具体变量,这是新手最容易踩的坑。
准备运行环境和密钥
在Linux服务器或本地开发机上准备Python环境即可。
建议使用虚拟环境隔离依赖:
python3 -m venv venv
source venv/bin/activate
pip install requests
API密钥不要写死在脚本里,用环境变量传入:
export MODEL_API_KEY="你的密钥"
脚本中通过 os.environ.get("MODEL_API_KEY") 读取。
如果密钥泄露,立即在服务商控制台吊销并重新生成。
用代码组织实验参数和请求
下面是一个可运行的最小结构,把实验变量和请求逻辑分开。
接口地址和模型名请替换为你实际使用的服务商提供的信息,不要直接照抄示例中的占位值。
import os
import json
import time
import requests
API_URL = "https://你的服务商接口地址/v1/chat/completions"
API_KEY = os.environ.get("MODEL_API_KEY")
EXPERIMENTS = [
{"exp_id": "temp-0.2", "temperature": 0.2},
{"exp_id": "temp-0.8", "temperature": 0.8},
]
PROMPT_TEMPLATE = "请用一句话解释以下概念:{question}"
QUESTION = "向量数据库"
results = []
for exp in EXPERIMENTS:
body = {
"model": "你的模型名",
"messages": [
{"role": "user", "content": PROMPT_TEMPLATE.format(question=QUESTION)}
],
"temperature": exp["temperature"],
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
try:
resp = requests.post(API_URL, headers=headers, json=body, timeout=30)
resp.raise_for_status()
data = resp.json()
answer = data["choices"][0]["message"]["content"]
except Exception as e:
answer = f"ERROR: {e}"
results.append({"exp_id": exp["exp_id"], "input": QUESTION, "output": answer})
time.sleep(1)
with open("experiment_results.json", "w", encoding="utf-8") as f:
json.dump(results, f, ensure_ascii=False, indent=2)
运行后会在当前目录生成 experiment_results.json。
先检查文件里每组 output 是否都有内容、是否出现 ERROR,再对比不同温度下的回答差异。
常见报错和避坑点
接口返回 401 或 403:优先检查环境变量是否生效,可在脚本里临时打印密钥长度确认读取成功,不要把完整密钥打印到日志。
请求超时:给 requests.post 设置 timeout,并在循环中加入短暂等待,避免短时间内高频请求触发限流。
结果无法比较:确保除自变量外,提示词、模型名和输入样本完全一致。
每次实验只改一个参数。
密钥进入版本库:把 .env 和结果文件加入 .gitignore,密钥只通过环境变量或密钥管理服务注入。
怎么判断配置是否有效
配置是否跑通,不看脚本有没有报错,而看结果文件是否满足三个条件:每组实验都有独立记录、输出内容可读、自变量和输出能对应上。
如果某组输出为空或明显异常,先回看该组的请求体,确认 temperature 等字段是否按预期传入。
需要长期复用时,可以把实验参数抽到单独的JSON文件,脚本只负责读取和调用,这样调整实验设计不用改代码。
常见疑问
实验参数应该放在代码里还是配置文件里?
短期验证放代码里更快,需要反复调整或多人协作时,建议抽到JSON或YAML配置文件,代码只保留读取和请求逻辑。
调用模型接口必须用Python吗?
不是。curl、Postman或其他语言都能完成同样的请求,Python的优势是方便批量循环和结果落盘。
结果文件应该记录哪些字段?
至少记录实验编号、输入、关键参数和输出,必要时加上时间戳和模型名,方便后续复查时还原当时的条件。