基于Spring AI的智能考试系统设计实践:从架构到踩坑全记录
2026/10/20 9:37:13
ChatGPT改写文章指令实战:提升AI辅助开发效率的工程化方案
把 AI 当成“万能打字机”之前,几乎每位开发者都踩过这些坑:
这些问题的根因 90% 不在模型,而在“指令”本身太模糊。没有工程化约束的 prompt,就像把需求写成“做个好东西”,再牛的模型也只能盲猜。
我在同一批 200 篇技术博客上做 A/B,维度:人工校验时间、token 成本、BLEU 分数。
结论:同步场景用“少样本”,离线场景用“CoT”,零样本只配做 Demo。
把变量插进 f-string 就能跑,已上线内部知识库 3 个月,稳定无漂移。
你是一位 {role},熟悉 {domain} 术语。 任务:将下方原文改写成 {target_style},字数浮动 ±{tolerance}%。 输出格式:严格三段式——摘要、主体、结论,每段前用【】标识。 禁忌:1) 禁止引入新例子;2) 禁止出现{forbid_words};3) 禁止删减代码块。 原文:{source_text}符合 PEP8,带类型注解、退避重试、流式解析,可直接放生产环境。
import asyncio import openai from typing import AsyncGenerator import tenacity openai.api_key = "sk-xxx" @tenacity.retry( stop=tenacity.stop_after_attempt(3), wait=tenacity.wait_exponential(multiplier=1, min=4, max=10) ) async def rewrite_stream( prompt: str, model: str = "gpt-3.5-turbo", temperature: float = 0.3, max_tokens: int = 1500 ) -> AsyncGenerator[str, None]: try: resp = await openai.ChatCompletion.acreate( model=model, messages=[{"role": "user", "content": prompt}], temperature=temperature, max_tokens=max_tokens, stream=True, ) async for chunk in resp: delta = chunk["choices"][0]["delta"].get("content", "") yield delta except openai.error.OpenAIError as e: # 记录到日志系统,再抛出让重试框架捕获 raise RuntimeError(f"OpenAI 调用失败: {e}") from e调用端 10 行代码就能落地:
async def main(): out_chunks = [] async for tok in rewrite_stream(prompt): out_chunks.append(tok) print("".join(out_chunks)) if __name__ == "__main__": asyncio.run(main())双层策略:
\b(dead|kill|...)\b200 个敏感词,0 ms 级。asyncio.Semaphore(100)限流,防止把 OpenAI 账号瞬间打满如何评估改写结果的质量指标?BLEU、BERTScore、人工校验时长,还是业务转化?
我在 GitHub Gist 留了空白模板,欢迎提交你的指标脚本和实验数据 → 提交点这里
把上面的模板和脚本串起来,我 2 小时就搭出一套内部“文档翻新机器人”,单篇校验时间从 20 分钟降到 5 分钟。若你也想亲手把 AI 改写做成可维护、可扩展的工程组件,可以从这个从0打造个人豆包实时通话AI动手实验开始——虽然它主打语音对话,但里面关于 prompt 工程、异步调用、token 优化的思路完全通用,我直接搬了实验里的“角色设定+输出格式”模块过来,省了不少试错时间。祝编码顺利,等你分享更好的质量指标玩法!