分享几个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%

你有其他调优技巧吗?评论区分享!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐