【plant simulation自学】三、发生器和吸收器统计
2026/6/24 12:48:58
| 模式 | 平均响应长度 | 业务相关度 | 首轮可用率 | 备注 |
|---|---|---|---|---|
| 零样本 | 312 tokens | 42 % | 28 % | 无示例,自由发挥 |
| 单样本 | 285 tokens | 67 % | 55 % | 给 1 例,模仿格式 |
| 结构化模板 | 198 tokens | 91 % | 84 % | 角色+任务+格式+边界 |
结构化模板在首轮即可把输出压缩到预期格式,显著减少后处理代码。
零样本与单样本在多轮场景下易出现“幻觉”累积,而结构化模板通过持续注入 system prompt 可将幻觉率压到 5 % 以下。
以下示例均基于 OpenAI Python SDK ≥ 1.0,默认模型 gpt-3.5-turbo;如用 gpt-4 只需替换 model 参数。
import openai, textwrap openai.api_key = "sk-xxx" def generate_docstring(code: str) -> str: prompt = f""" Role: 你是一名资深 Python 代码审查员。 Task: 为下方代码生成 Google Style 的 docstring,要求包含 Args、Returns、Raises。 Constraints: - 仅返回 docstring,不要附带任何解释。 - 保持缩进 4 空格。 Code: {textwrap.indent(code, ' ')} """ resp = openai.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.2, max_tokens=400 ) return resp.choices[0].message.content.strip()def nl_to_sql(schema: str, question: str) -> str: prompt = f""" 数据库 schema: {schema} 用户问题: {question} 要求: 1. 仅输出可执行 SQL,以分号结尾。 2. 使用标准 SQL,不支持窗口函数时可退而求其次。 3. 禁止 SELECT *。 """ resp = openai.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0 ) return resp.choices[0].message.content.strip()def generate_commit(diff: str) -> str: prompt = f""" 根据下方 git diff 生成符合 Conventional Commits 规范的提交说明。 格式: <type>(<scope>): <subject> Diff: {diff} """ resp = openai.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.1, max_tokens=60 ) return resp.choices[0].message.content.strip()def gen_unittest(source: str, test_framework: str = "pytest") -> str: prompt = f""" 为以下 Python 函数编写 {test_framework} 单元测试。 要求: - 覆盖正常、异常、边界三种场景。 - 使用 arrange-act-assert 注释。 - 仅输出代码,不解释。 Source: {source} """ resp = openai.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.3, max_tokens=800 ) return resp.choices[0].message.content.strip()def localize_error(error_en: str, locale: str = "zh-CN") -> str: prompt = f""" 将下方英文错误消息翻译为 {locale},保持技术术语准确,语气友好。 仅返回译文。 Error: {error_en} """ resp = openai.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0 ) return resp.choices[0].message.content.strip()| 指标 | 优化前(零样本) | 优化后(结构化模板) | 提升 |
|---|---|---|---|
| 首轮格式合规率 | 34 % | 89 % | +162 % |
| 平均重试次数 | 2.7 | 0.4 | −85 % |
| Token 消耗/次 | 412 | 268 | −35 % |
| 端到端延迟 | 1.8 s | 1.2 s | −33 % |
测试环境:gpt-3.5-turbo-0125,温度 0.2,最大输出 512 tokens,局域网调用。
当业务场景从“代码生成”切换到“在线客服”或“医疗问诊”时,模板应如何动态调整角色、知识边界与安全护栏?欢迎读者在评论区贴出自己设计的 Prompt 并给出 A/B 测试数据,一起探讨多角色、多轮、多语言场景下的最优结构。
—— 如果你觉得动手搭一套“能听会说”的 AI 更有挑战,不妨体验从0打造个人豆包实时通话AI实验,把刚学会的 Prompt 工程直接塞进语音闭环,亲测一小时即可跑通 ASR+LLM+TTS 全链路。