在华为云上玩转大模型:基于 DeepSeek V3.2 与 Prompt 工程构建文本创作聊天机器人
一、实验概览
1.1 我们到底要做什么
这不是一个只读不练的演示。整个实验的目标非常明确:
- 在 ModelArts → 开发空间 → Notebook 中调用 DeepSeek V3.2 模型 API;
- 熟悉并动手调试两个最关键的解码采样参数——温度
temperature与 累积概率top_p,理解它们如何控制模型输出的随机性与多样性; - 使用 Prompt 工程调优技巧约束模型输出,最终构建一个能按你要求创作的文本聊天机器人。
一句话总结:本实验基于 Notebook 环境部署客户端,调用 DeepSeek V3 模型 API,并使用 Prompt 工程调优技巧控制模型输出。
1.2 实验场景(五步走)
- 在 MaaS(模型即服务) 平台开通 DeepSeek V3.2 模型;
- 登录 ModelArts → 开发空间,启动一个 Notebook;
- 在 Notebook 中运行 DeepSeek V3.2 的 API 调用程序;
- 调试
temperature与top_p采样参数,观察不同取值下的效果差异; - 调用模型进行 Prompt 工程实践,让模型更"听话"。
1.3 用到的云服务和费用
| 云服务 | 区域 | 计费方式 | 预计费用 |
|---|---|---|---|
| ModelArts(Notebook) | 华北-北京四 | 按运行时间计费 | 约 1 元 |
| MaaS(DeepSeek-V3.2 预置服务) | 西南-贵阳一 | 按 token 计费 | 约 0.1 元 |
| 合计 | — | — | 约 1.1 元 |
⚠️ 重要提醒:若调整了资源规格、使用时长,或执行了本方案以外的操作,费用会发生变化,请以控制台实际价格和最终账单为准。
1.4 开始前必须满足的条件
本实验不提供实验账号,需使用你自己的华为云账号操作,请务必先确认:
- ✅ 华为云账号已通过实名认证,且账户余额充足;
- ✅ 清楚云资源费用由你自己承担,KooLabs 平台不会额外征收费用;
- ✅ 所有实验操作都会保留在你的账号下,请谨慎操作;
- ✅ 实操结束后,可自行选择继续付费保留资源,或手动释放资源。
二、第一步:准备资源与开发环境
本实验以 DeepSeek V3.2 为例(实验者也可自行选择其他合适的 V3.x 版本)。
请记住两个区域的分工:MaaS 切到「西南-贵阳一」,ModelArts 切到「华北-北京四」。
2.1 在 MaaS 开通 DeepSeek V3.2
- 打开 Chrome 浏览器,登录并进入 MaaS 模型即服务控制台首页;
- 点击左侧 「在线推理」,选择 DeepSeek-V3.2(若无推荐模型,也可选用其他文本生成模型),点击 「开通服务」;
- 开通完成后,点击 「调用说明」,记下三样东西——API 地址、model 参数、Python 调用示例代码,后续步骤都要用到。
2.2 创建 API Key
- 返回 MaaS 控制台首页,点击左侧 「API Key 管理」;
- 点击 「创建 API Key」,标签与描述自定义,点击 「确定」;
- 复制并妥善保存 API Key——它就像你调用模型的"钥匙",下面的代码全要靠它。
2.3 启动 ModelArts Notebook
- 区域切到 华北-北京四(方便选择 X86 对应的
py_3.10镜像); - 登录 ModelArts,点击左侧 「Notebook」 → 「创建」;
- 参数配置如下:
| 配置项 | 取值 |
|---|---|
| 名称 | 自定义 |
| 自动停止 | 1 小时 |
| 资源池类型 | 公共资源池 |
| 实例规格 | CPU: 2vCPUs |
| 镜像 | 预置镜像 > pytorch > 2.1.0-cuda12.1-py3.10.6-ubuntu22.04-x86_64 |
- 其他参数保持默认,点击 「立即创建」,等待创建完成;
- 点击 「接入环境 → JupyterLab 接入 → python-3.10.6」 进入编码环境。
三、第二步:模型调用与参数调优
3.1 声明调用参数
在 Notebook 的新执行框中输入,把第一步拿到的地址和密钥填上:
api_url = "" # 步骤 2.1 获取的 API 地址
api_key = "" # 步骤 2.2 获取的 API Key
3.2 第一次成功调用 API
新建执行框运行以下代码(也可直接使用 MaaS 提供的 Python 示例改写):
import requests
import json
url = "https://api.modelarts-maas.com/v2/chat/completions"
api_key = "替换为你的API Key"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
data = {
"model": "deepseek-v3.2",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好"}
],
"thinking": {"type": "enabled"} # 是否开启深度思考模式,默认关闭
}
response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
print(response.status_code)
print(response.text)
如果 response 返回了大语言模型的自我介绍,恭喜——推理服务 API 调用成功。
3.3 调试温度参数 temperature:AI 的"创意开关"
temperature 控制采样的随机性,就像给 AI 装了个"创意开关":
- 数值越小(接近 0):回答越保守、准确、稳定;
- 数值越大:回答越天马行空;
- 默认 0.6 是平衡点,既合理又有创意。
数值参考:
| 区间 | 表现 | 典型场景 |
|---|---|---|
| 低 0–0.3 | 稳定但保守 | 客服问答、数学题 |
| 中 0.4–0.7 | 平衡合理与创意(默认 0.6) | 日常聊天 |
| 高 0.8–1+ | 随机发散 | 写诗、头脑风暴 |
我们先用一段客户端代码统一封装调用,再分别把 temperature 设为 0、1、0.1 回答"介绍下大语言模型",观察差异:
import requests
import json
class TextGenerationClient:
def __init__(self, api_url, api_key):
self.api_url = api_url
self.api_key = api_key
def generate_text(self, payload):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {self.api_key}"
}
response = requests.post(self.api_url, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
return response.json()['choices'][0]['message']['content']
else:
raise Exception(f"Error: {response.status_code} - {response.text}")
client = TextGenerationClient(api_url, api_key)
# temperature = 0:每次都选最稳妥答案,多次运行结果几乎一致
payload = {
"model": "deepseek-v3.2",
"messages": [{"role": "user", "content": "介绍下大语言模型"}],
"max_tokens": 150, "top_k": -1, "top_p": 1,
"temperature": 0, "ignore_eos": False, "stream": False
}
print(client.generate_text(payload))
# temperature = 1:两次运行结果随机发散,差异很大
payload["temperature"] = 1
payload["max_tokens"] = 30
print(client.generate_text(payload))
# temperature = 0.1:两次运行结果基本一致,差异很小
payload["temperature"] = 0.1
print(client.generate_text(payload))
实测规律: temperature 越小,推理结果越稳定;越大,越随机。
💡 实用参照:需要精准答案 → 调低(0–0.3);需要自然交流 → 0.4–0.7;需要创意输出 → 0.8–1.2+(超过 1.5 可能产生混乱内容,慎用)。
3.4 调试 top_p 累积概率采样:AI 的"候选方向盘"
top_p(累积概率采样)按概率对候选词排序,从最高概率开始累加,直到超过设定的阈值就停,只保留这部分词作为随机选择范围。
举个例子:候选词概率为 苹果 65%、香蕉 20%、葡萄 10%、榴莲 5%……设定 top_p=0.8 时,AI 从最可能的词开始累加,苹果(65%) + 香蕉(20%) = 85% > 80% 即停,于是只在「苹果、香蕉」这个缩小的候选池里随机选,既保证质量又保留随机性。
| 取值 | 表现 | 典型场景 |
|---|---|---|
| 低(如 0.3) | 候选词少,输出保守精准 | 天气播报 |
| 高(如 0.8) | 候选词多,输出灵活创意 | 写诗歌 |
| 1 | 关闭筛选,全候选词(可能胡言乱语) | — |
| 0 | 极端模式,只选最高概率词(易死板) | — |
同样用「介绍下大语言模型」测试,top_p=1 两次输出差异较大,top_p=0.1 两次输出完全相同——top_p 越小,生成文本越准确、多样性越低;越大,脑洞越开。
3.5 参数搭配小结
temperature 与 top_p 就像调节 AI 写作的「油门」和「方向盘」:温度管脑洞大小,top_p 管候选范围,二者配合能更精准地控制输出。
| 组合 | 效果 | 建议 |
|---|---|---|
temperature 0–0.3 + top_p 0.1 |
极稳但机械,易重复 | 慎用 |
temperature 0.4–0.7 + top_p 0.8 |
平衡自然 | 日常推荐 |
temperature > 1.5 + top_p = 1 |
可能输出乱码 | 严禁 |
至此,DeepSeek 模型 API 调用与参数调试结束,你可以根据业务场景去设定合适的参数值。
四、第三步:Prompt 工程实战
4.1 构建目标文章
先让模型生成一篇 500 字以内的短篇小说(3 个人物、2 个情节),作为后续调优的"目标文本":
payload = {
"model": "deepseek-v3.2",
"messages": [
{"role": "system", "content": "你是一个短片小说创作者,写一篇短篇小说,500字以内"},
{"role": "user", "content": "3个人物,2个情节"}
],
"max_tokens": 800, "top_p": 1, "temperature": 1
}
generated_text = client.generate_text(payload)
content = generated_text # 保存文章,供后续问答使用
4.2 基础问答 Prompt 与"陷阱测试"
把文章塞进 system 提示,让模型当"文本阅读器"回答问题:
payload = {
"model": "deepseek-v3.2",
"messages": [
{"role": "system", "content": f"你是一个文本阅读器,读取文章的内容并按照用户的要求输出对于文章的回答,以下是文章{content}"},
{"role": "user", "content": "根据文章回答段誉干了什么"}
],
"max_tokens": 200, "top_p": 1, "temperature": 0.3
}
接着故意设置一个陷阱:文章明明只有 3 个人物,却提问"文中的四个主角是什么关系"。结果模型没有指出问题中的错误,而是在错误前提上作答。
这恰恰暴露了真实业务(如客服问答)中的痛点:模型需要被"规范",而不是被"信任"。 这就引出了下面的三种 Prompt 工程技术。
4.3 三种提示技术控制模型输出
① 样本提示(Example Prompting)——“照猫画虎”
通过提供少量「输入→输出」示例,引导模型模仿示例的格式或逻辑。模型从示例中学习任务规则(翻译格式、分类标准、文本风格),适合格式固定、需要快速对齐输出风格的场景。
# 先给样本:文章 a,b,c,d,e 是五个人物,他们是亲属关系;
# 提问"文章的6个人物,他们是什么关系" → 回答"文章中只有五个人物,他们是亲属关系"
# 再提问"文中的4个人物是什么关系"时,模型会沿用"纠正数量"的范式作答
② 思维链提示(Chain of Thought, CoT)——“展示思考过程”
引导模型像人一样分步推理:把复杂问题拆成多个逻辑步骤,输出中间过程。只需加一句"请逐步思考 / 让我们一步步分析",就能显著提升模型在数学、逻辑和复杂文本任务上的可靠性。
payload = {
"model": "deepseek-v3.2",
"messages": [
{"role": "system", "content": f"指令:你是一个文本阅读器...你需要逐步思考用户提出问题并逐一回答 以下是文章{content}"},
{"role": "user", "content": "根据文章回答:文中的四个主角是什么关系"}
],
"max_tokens": 200, "top_p": 1, "temperature": 1
}
实测:模型在人物关系推理时"想得更多了",但仍没识破"四个主角"的陷阱——还需要进一步引导。
③ 链式提示(Chain Prompting)——“分阶段解决问题”
链式提示的本质是任务分解。针对"先核对事实、再作答"的目标,可拆成 4 个子任务:
- 子任务 1|提取信息:让模型从文章中提取人物与关系;
- 子任务 2|匹配纠错:把提取的信息与用户提问比对,找出提问中的错误("四个主角"与"实际三人"矛盾);
- 子任务 3|初步回答:就用户提问正常作答;
- 子任务 4|整合修正:依据错误信息修改错误回答,按固定格式输出。
把四步串成完整流程:
Q = "根据文章回答:文中的四个主角是什么关系"
# 子任务1:提取信息
payload = {"model":"deepseek-v3.2","messages":[
{"role":"system","content":f"你是一个文本阅读器...以下是文章{content}"},
{"role":"user","content":"根据文章回答:文中有几个人物,他们是什么关系"}],
"max_tokens":200,"top_p":1,"temperature":1}
info = client.generate_text(payload)
# 子任务2:找出提问错误
payload = {"model":"deepseek-v3.2","messages":[
{"role":"system","content":f"根据提问对比已知的信息,找出提问的错误,并输出错误的点 以下是已知的信息{info}"},
{"role":"user","content":f"提问的问题是:\"{Q}\""}],
"max_tokens":200,"top_p":1,"temperature":0.3}
error = client.generate_text(payload)
# 子任务3:初步回答
payload = {"model":"deepseek-v3.2","messages":[
{"role":"system","content":f"你是一个文本阅读器...以下是文章{content}"},
{"role":"user","content":f"{Q}"}],
"max_tokens":200,"top_p":1,"temperature":1}
answer = client.generate_text(payload)
# 子任务4:整合修正并格式化输出
payload = {"model":"deepseek-v3.2","messages":[
{"role":"system","content":f"根据错误信息,并修改错误的回答,并按照输出格式化输出正确的回复 \
上下文:以下是错误信息{error},以下是需要修改的错误的回答{answer} \
输出格式化:问题: 正确的答案应该是:"},
{"role":"user","content":""}],
"max_tokens":200,"top_p":1,"temperature":1}
print(client.generate_text(payload))
串起来后,模型终于能先指出"文中只有三人而非四个主角",再给出正确关系——这正是我们想要的"可控文本创作机器人"。
五、第四步:资源清理(别让钱包替你买单)
实验结束,务必清理资源,否则会持续计费:
- 删除 Notebook:进入「北京四-ModelArts」→ 左侧「Notebook」→ 删除实例;
- 清理 API Key:切换到「贵阳一-MaaS」→ 删除对应的 API Key。
本手册最后更新于 2026 年 8 月 16 日,最后测试于 2026 年 6 月 16 日。
六、实验总结:三种提示技术怎么配合
样本提示、思维链提示、链式提示是三种不同的提示技术,在自然语言处理任务中各有侧重:样本提示是"照猫画虎",思维链是"展示思考过程",链式提示是"分阶段解决问题"。
| 技术 | 核心机制 | 擅长场景 | 比喻 |
|---|---|---|---|
| 样本提示 Example Prompting | 提供输入-输出示例,模型模仿格式/逻辑 | 格式固定、需对齐风格 | 血液:提供规范与风格 |
| 思维链 CoT | 分步推理,展示中间思考过程 | 数学、逻辑、复杂文本 | 肌肉:保证推理严密 |
| 链式提示 Chain Prompting | 任务分解为多子步骤依次执行 | 复杂多步任务 | 骨架:整体框架 |
三者结合,效果最佳:以链式提示为骨架把任务拆开,在每个子步骤中用样本提示规范输出格式(血液),用思维链要求模型展示推理(肌肉)。模型由此像一支"专家团队"协作——分阶段推进、透明化推理、标准化输出。
至此,使用 DeepSeek 模型基于 Prompt 工程构建文本创作聊天机器人的实验圆满结束。从一次最简单的 API 调用,到读懂 temperature/top_p 这两个"油门与方向盘",再到用样本、思维链、链式三种提示技术驯服模型——你已经握住了大模型应用开发最基础也最关键的几把钥匙。
- 点赞
- 收藏
- 关注作者
评论(0)