code/02-prompting/prompt_structure.py
66 行 · 2.2 KBコードと実行結果は実際に動かしたときのまま載せているため、コメントと出力は中国語です。
"""同一个任务,随手写的提示词和结构清楚的提示词,结果差多少。"""
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["LLM_API_KEY"],
base_url=os.environ.get("LLM_BASE_URL", "https://api.deepseek.com"),
)
MODEL = os.environ.get("LLM_MODEL", "deepseek-flash")
REPORT = """用httpx下载大文件老是断 我用的stream 下到一半就报错了 ReadTimeout
代码大概是 with httpx.stream("GET", url) as r: for chunk in r.iter_bytes(): f.write(chunk)
文件2个G左右,网不太好,公司内网。之前用requests好像没这问题??
版本是0.27 python3.11 mac
急!!!明天要交"""
def ask(messages):
response = client.chat.completions.create(
model=MODEL,
messages=messages,
extra_body={"thinking": {"type": "disabled"}},
)
return response.choices[0].message.content
# 第一版:随手一写
v1 = [{"role": "user", "content": "帮我整理一下这个问题:\n" + REPORT}]
# 第二版:说清楚身份、任务、背景、要求和输出格式,用标签把原文和指令分开
v2 = [
{
"role": "system",
"content": """你是 httpx 开源项目的维护者,负责把用户在群里的求助整理成 GitHub issue。
任务:把 <report> 标签里的用户原话整理成一个 issue,给其他维护者看。
要求:
- 只使用原话里有的信息,不要猜测或补充原话里没有的细节。
- 原话里没提到、但排查需要的信息,列在"待确认"里。
- 不要给解决方案,这一步只整理问题。
输出格式(Markdown,只输出 issue 本身):
## 标题
一句话,说清现象和场景
## 环境
## 复现代码
## 现象
## 待确认""",
},
{"role": "user", "content": f"<report>\n{REPORT}\n</report>"},
]
print("=" * 20, "第一版", "=" * 20)
print(ask(v1))
print()
print("=" * 20, "第二版", "=" * 20)
print(ask(v2))
print()
# 0 模块第 3 课里模型"多说话"的例子
print("=" * 20, "五个字", "=" * 20)
print("原提示词:", ask([{"role": "user", "content": "用五个字形容秋天"}]))
print("改进后: ", ask([{"role": "user", "content": "用五个字形容秋天。只输出这五个字,不要标点,不要解释,不要给其他选项。"}]))