分享几个Codex/Claude的调优技巧:从Prompt工程到幻觉规避
·
分享几个Codex/Claude的调优技巧:从Prompt工程到幻觉规避
先说背景
用AI编程工具快半年了,从一开始"随便问随便答"到现在会"调教"AI,踩了不少坑。今天分享几个真正有用的调优技巧。
1. 如何让AI不再"幻觉"(达梦/Oracle特别有效)
问题
AI经常把达梦SQL写成MySQL语法,把Oracle函数当成MySQL函数。
技巧:在System Prompt里加入约束
{
"model": "claude-sonnet",
"system": "你是一个Java后端开发专家,擅长Spring Boot、MyBatis Plus。
【重要】当涉及数据库时:
- 如果用户提到'达梦'或'DM',使用达梦V8语法:OFFSET...ROWS FETCH NEXT...ROWS ONLY
- 如果用户提到'Oracle',使用Oracle 12c+语法
- 不要混用不同数据库的语法
【示例】
达梦分页:SELECT * FROM table OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
Oracle分页:SELECT * FROM table OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY"
}
效果
数据库相关问题的准确率从30%提升到85%以上。
2. Codex接入DeepSeek的方法
为什么接入DeepSeek
DeepSeek便宜(大概是Claude的1/10),适合处理大量简单任务。
方法一:Ollama本地部署
# 1. 安装Ollama
brew install ollama
# 2. 下载DeepSeek模型
ollama pull deepseek-coder:6.7b
# 3. 在Codex里配置
# 在 .codex/config.json 里添加:
{
"models": {
"deepseek": {
"apiBase": "http://localhost:11434/v1",
"apiKey": "ollama",
"model": "deepseek-coder:6.7b"
}
}
}
方法二:通过API接入
# 在 .codex/config.json 里:
{
"models": {
"deepseek": {
"apiBase": "https://api.deepseek.com/v1",
"apiKey": "你的DeepSeek API Key",
"model": "deepseek-coder"
}
}
}
什么时候用DeepSeek,什么时候用Claude
| 场景 | 用DeepSeek | 用Claude |
|---|---|---|
| 看代码、简单解释 | ✅ | |
| 复杂架构设计 | ✅ | |
| SQL调优 | ✅ | ✅ |
| 代码审查 | ✅ | |
| 批量生成简单代码 | ✅ | |
| 长上下文分析 | ✅ |
3. Prompt模板:让AI每次都按你的规范输出
我的Java开发Prompt模板
【任务】
{描述你的任务}
【技术栈】
- 框架:Spring Boot 2.7 + MyBatis Plus
- 数据库:达梦V8 / Oracle 12c
- Java版本:JDK 8
【代码规范】
1. 使用 for 循环,不用 Stream API(项目规范)
2. 使用 @Slf4j 打印日志,不用 System.out
3. 参数必须校验空指针
4. 所有SQL必须使用参数化查询
【输出格式】
1. 先解释思路
2. 再给代码
3. 最后说明需要注意的点
我的SQL审查Prompt模板
【任务】
审查以下SQL的性能和安全性
【数据库类型】
达梦V8
【SQL】
{粘贴SQL}
【请检查】
1. 是否有全表扫描风险
2. 是否需要索引优化
3. 是否有SQL注入风险
4. 分页是否正确
【输出格式】
问题列表 + 优化建议 + 优化后的SQL
4. 针对AI"失忆"问题的技巧
问题
上下文太长时AI会忘记之前说的内容。
技巧:定期"喂"上下文
【当前任务】
优化credit模块的查询性能
【已确认的信息】
1. 数据库是达梦V8
2. credit_record表有1000万数据
3. 已有索引:company_id, create_time
4. 问题:按company_id查询很慢
【新问题】
怎么添加复合索引?
技巧:主动总结
每完成一个子任务,让AI总结:
请总结一下我们刚才讨论的:
1. 主要结论
2. 确定的方案
3. 下一步要做什么
这样继续讨论的时候不会忘记。
5. Codex的隐藏配置:提升输出质量
在 .codex/settings.json 里配置
{
"temperature": 0.3,
"maxTokens": 4096,
"contextWindow": 200000
}
参数解释
| 参数 | 默认值 | 建议值 | 说明 |
|---|---|---|---|
| temperature | 0.7 | 0.3-0.5 | 越低越确定,越高越有创意 |
| maxTokens | 2048 | 4096 | 最大输出长度 |
| contextWindow | 100000 | 看模型 | 上下文窗口大小 |
经验:
- 写代码用 temperature 0.3-0.5(稳定、准确)
- 头脑风暴用 temperature 0.7-0.9(有创意)
6. 如何让AI帮你生成"可测试"的代码
问题
AI生成的代码经常没有单元测试,或者测试写得不对。
技巧:要求AI同时生成测试
【任务】
写一个计算信用评分的方法
【业务规则】
逾期天数>30才扣分,每超过1天扣1分,上限30分
【输出要求】
1. 主方法:calculateScore(Integer overdueDays, BigDecimal loanAmount)
2. 单元测试:使用JUnit 4
3. 测试用例必须覆盖:
- 正常情况(逾期35天,贷款60万)
- 边界情况(逾期30天、逾期31天)
- 异常情况(null参数)
效果
AI生成的测试覆盖率从30%提升到80%以上。
7. 避免AI生成"幻觉代码"的终极技巧
核心原则:让它"说人话"
【要求】
在给出任何代码之前,先回答这个问题:
"这个代码在达梦V8上能直接跑吗?"
如果不能,先告诉我哪里会报错。
另一个技巧:让它自我验证
【任务】
帮我写一个达梦的分页查询
【验证要求】
写完代码后,请自己检查:
1. OFFSET语法是否正确
2. FETCH NEXT语法是否正确
3. 是否有任何MySQL/PG的残留语法
如果发现错误,先修正再输出。
总结:我的调优清单
| 技巧 | 解决的问题 | 效果 |
|---|---|---|
| System Prompt约束 | 幻觉问题 | 准确率+50% |
| Codex接入DeepSeek | 成本问题 | 成本-90% |
| Prompt模板 | 输出不稳定 | 一致性+70% |
| 定期喂上下文 | 失忆问题 | 上下文+80% |
| 参数配置 | 输出质量 | 相关性+60% |
| 要求生成测试 | 测试缺失 | 覆盖率+150% |
| 自我验证 | 幻觉代码 | 错误率-70% |
你有其他调优技巧吗?评论区分享!
更多推荐



所有评论(0)