发布时间:2026/9/6 12:27:39
三、《从零手撸 Agent》 · system prompt 与核心参数:调好你的旋钮 上一篇讲了 messages 的骨架。这一篇深入两个可调控的东西system prompt 怎么写才有效以及 API 的几个关键参数到底在控制什么。参数部分全部配实验建议边跑边读。一、system prompt写给模型的” 岗位说明书”1.1 一个对比例子不用 system promptmessages [{role: user, content: 帮我看看这段代码有什么问题x 5 / 0}]回答可能很啰嗦先讲什么是除法再讲异常处理体系最后才说 “你除以零了”用 system promptmessages [ {role: system, content: 你是一个代码审查员。只指出问题和修法每条不超过两行不讲背景知识。}, {role: user, content: 帮我看看这段代码有什么问题x 5 / 0}, ]回答除以零错误。改为先判断除数是否为 0或用 try/except 捕获 ZeroDivisionError。同样的问题输出天差地别。system prompt 决定模型” 用什么身份、什么方式” 回答。1.2 一个实用的 system prompt 模板有效的 system prompt 通常包含这四块按需取舍SYSTEM_PROMPT # 角色 你是一个Python代码审查助手。 # 行为规则 1. 只指出问题不重写整个文件 2. 每个问题格式[严重程度] 位置 - 问题 - 建议修法 3. 不确定的地方明确说不确定禁止猜测 # 输出格式 用Markdown列表输出最多5条按严重程度排序。 # 边界 如果代码与Python无关回复仅支持Python代码。 四块分别是角色你是谁→ 规则怎么做→ 格式输出长什么样→ 边界什么时候拒绝。1.3 写 system prompt 的三个新手误区误区一堆形容词。“你是一个非常非常专业的专家”—— 没用。模型不因为夸它而变强。要写可执行的规则不写情绪。误区二规则互相矛盾。“回答要详尽” “不超过 50 字”—— 模型只能随机服从一个。写完通读一遍删掉冲突项。误区三用否定句写期望行为。“不要啰嗦” 不如” 每条不超过两行”。模型对正向指令的服从度更高否定句只在划红线时用“禁止编造 API 名称”。二、参数详解每个都做实验2.1 temperature随机性旋钮原理一句话模型每生成一个 token其实是对所有候选词算出一个概率分布temperature 决定从这个分布里抽样时的” 冒险程度”。0永远选概率最高的词 → 同样输入几乎得到同样输出确定性越高如 1.5低概率词也有机会被选中 → 输出多变、有创意、也更不稳定实验代码同一个刁钻问题不同 temperature 各跑 3 次def ask(temp: float) - str: resp client.chat.completions.create( modeldeepseek-chat, temperaturetemp, messages[{role: user, content: 用一个比喻解释什么是递归一个词的比喻也算}], ) return resp.choices[0].message.content[:30] for t in (0, 0.7, 1.5): print(f--- temperature{t} ---) for _ in range(3): print( , ask(t))你会观察到t0 时三次输出几乎相同t1.5 时三次各不相同而且偶尔出现奇怪的比喻。怎么选场景推荐原因代码生成、数据抽取、分类0 ~ 0.3要稳定可复现日常对话、总结改写0.5 ~ 0.8平衡创意写作、起名字0.9 ~ 1.2要发散本系列属于 Agent 开发几乎全程 0~0.3—— 你要的是一个可靠的执行者不是艺术家。2.2 max_tokens输出长度上限resp client.chat.completions.create( modeldeepseek-chat, messages[...], max_tokens100, # 回答最多100个token超过就硬截断 )两个用途省钱护栏防止模型失控输出长文强制造短回答配合” 用一句话回答” 的提示效果更好注意一个坑如果输出被截断resp.choices [0].finish_reason 会是length而不是stop。调试时发现回答莫名断在半句话先检查这个字段print(resp.choices[0].finish_reason) # stop正常结束 length被截断2.3 model选哪个模型同一家通常有多个模型档位如 deepseek-chat /deepseek-reasoner规律普通对话模型快、便宜适合 Agent 里的常规节点推理模型reasoner 类贵、慢但复杂问题正确率高第 09 篇详解工程经验不要全程用最贵的。路由 / 格式化 / 简单判断用便宜模型关键决策才上推理模型 —— 这是成本工程的基本功。2.4 stream流式开关streamTrue# 逐 token 返回第 04 篇整篇讲它 这里先记住参数名即可。三、把参数和 system prompt 组合成一个可复用的函数从这篇开始我们会反复用到一个封装好的 chat () 函数建议存成 llm[_utils.py](_utils.py)后续文章直接 import# llm_utils.py import os from openai import OpenAI client OpenAI( api_keyos.environ[OPENAI_API_KEY], base_urlhttps://api.deepseek.com, ) def chat( messages: list[dict], model: str deepseek-chat, temperature: float 0.3, max_tokens: int 1024, ) - str: 统一封装的LLM调用。Agent开发默认低temperature。 resp client.chat.completions.create( modelmodel, messagesmessages, temperaturetemperature, max_tokensmax_tokens, ) if resp.choices[0].finish_reason length: print([警告] 输出被max_tokens截断) return resp.choices[0].message.content # 用法示例 if __name__ __main__: print(chat([ {role: system, content: 你是简洁的编程助手。}, {role: user, content: 一句话解释什么是异步编程。}, ]))封装的好处参数默认值统一所有调用都是 0.3截断警告自动打换模型只改一处。四、一个综合实验观察” 规矩” 的服从度测试 system prompt 在长对话中会不会失效system 你回答任何问题都只能用是或否。 history [{role: system, content: system}] for q in [Python是编程语言吗, 天空是蓝的吗, 详细介绍一下Python的历史, 详细讲讲图灵的故事]: history.append({role: user, content: q}) a chat(history, temperature0) history.append({role: assistant, content: a}) print(fQ: {q}\nA: {a[:50]}\n)典型现象前几轮严格答” 是 / 否”到后面开始” 越狱” 变长篇大论。结论system prompt 不是硬约束是软引导上下文越长服从度越低。两个对策重要格式要求在最后一轮 user 消息里再强调一次末尾指令服从度最高输出必须严格结构化时用代码解析 失败重试兜底而不是相信 prompt第 15 篇讲 OutputParser 的动机就在这五、小结system prompt 四块结构角色 → 规则 → 格式 → 边界写正向可执行的规则temperature 0~0.3 用于 Agent实验证明 0 确定性强max_tokens 是护栏检查 finish_reason 判断截断模型分档混用便宜模型干杂活推理模型干难活system prompt 会随对话变长而失效 —— 重要约束要末尾重申 代码兜底六、自测☐ 用四块结构给” 外卖推荐助手” 写一个 system prompt☐ 跑 temperature 实验亲眼看到 0 和 1.5 的差别☐ 把 max_tokens 设成 20 问一个长问题观察 finish_reason下一篇[04 流式输出] —— AI 是一个字一个字想出来的这个特性怎么用代码接住。写在最后写在最后如果想系统、完整地吃透 Harness、Hermes 整套前沿智能体开发体系完成从只会调模型到可控、高质量、可落地的 AI 工程交付进阶可以关注慕课网近期上新的《HarnessHermes 多智能体开发特训营》。 课程直达​https://class.imooc.com/sale/hagent

相关新闻

2026/9/6 12:22:39

Java 迭代器接口详解:从 Iterator 到 ListIterator 的完整指南

1. 引言 在 Java 集合框架中,迭代器(Iterator)是遍历集合元素的核心接口。无论是 ArrayList、HashSet 还是 HashMap,都可以通过迭代器统一地访问其中的元素,而不必关心底层数据结构的具体实现。本文将深入讲解 Java 迭…

2026/9/6 12:22:39

计算机网络期末复习:五层模型与TCP/IP核心考点总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 13:22:42

PHP的结构是什么?一文读懂PHP代码框架

什么是PHP结构PHP的结构, 是针对一个PHP程序而言的, 是其基本组成框架。对于才开始接触PHP的人来讲, 知晓PHP的结构, 乃是入门的首个步骤。只有把控住了PHP的结构, 才可编写出遵循规范的代码, 进而提升开发效率。PHP 的结构并非繁杂, 其核心乃是依标签、语句、以及函数、还有类…

2026/9/6 13:22:41

C++命名空间的介绍和使用

命名空间 在C/C中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出…

2026/9/6 13:17:41

大模型微调入门:从概念到实战,5分钟搞懂LoRA和QLoRA

一、为什么需要微调大模型 通用大模型虽然强大,但它是"通才"而不是"专家"。企业私有知识问答、垂直领域对话、特定格式输出这些场景,通用模型往往答不准、格式乱、风格不对。微调就是让模型在特定任务上更专业、更听话。 目前最主流…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…