写点什么

AI 全栈开发实战营 - 第三章

作者:9527
  • 2025-06-08
    美国
  • 本文字数:7301 字

    阅读完需:约 24 分钟

作业一

使用 DeepSeek 或其他大模型,实践课件中基础和进阶技巧的提示词, 观察和理解模型输出的结果。

场景:假设你是一位市场经理,需要为一款新上市的环保咖啡杯撰写一段社交媒体推广文案,目标是吸引关注环保的年轻消费者。

1.糟糕的提示:帮我写个 500 字以内的咖啡杯文案

  1. 改进的提示:你是一位专业的社交媒体营销撰稿人,擅长使用活泼,有吸引力的语言。请为一款名为“绿意随行杯(EcoSip Cup)”的新型环保咖啡杯撰写一条推文文案。这款咖啡杯由可降解竹纤维制成,设计简约时尚,主打卖点是环保理念和便携性。目标受众是 18-30 岁关注可持续生活方式的年轻人群。文案需突出环保特性,并包含一个行动号召,例如“立即选购”或“加入环保行列”。请使用 #环保生活和 #绿意随行杯标签。

140 字符以内

500 字符以内

遵循提示工程的核心原则和 5 个技巧,构造 3 个正例和反例,加深对提示工程核心原则和技巧的理解。

五大核心原则

  • 清晰明确 (Clarity & Specificity)

  • 避免使用模糊,歧义的词语

  • 指令越具体,模型越容易理解你的意图

  • 提供上下文(Provide Context)

  • 如果任务需要背景知识,请在提示中提供

  • 上下文有助于模型更好的理解问题情境

  • 指定角色(Assign a Role)

  • 让模型扮演特定角色(如“你是一位资深程序员”,“你是一位历史学家”)

  • 这能显著影响模型的回答风格和内容侧重

  • 明确任务(Define the task clearly)

  • 清晰说明你希望模型做什么:总结,翻译,解释,生成代码,创作故事等

  • 指定输出格式(specify output format)

  • 如果对输出格式有要求(如列表,JSON,Markdown,特定段落结构),请明确指出

正例提示

遵循提示工程的核心原则和 5 个技巧,基于以上的文案。构造 3 个正例

核心原则和 5 个技巧如下

五大核心原则

  1. 清晰明确 (Clarity & Specificity): 避免使用模糊,歧义的词语 指令越具体,模型越容易理解你的意图

2. 提供上下文(Provide Context): 如果任务需要背景知识,请在提示中提供。提供上下文有助于模型更好的理解问题情境

3. 指定角色(Assign a Role): 让模型扮演特定角色(如“你是一位资深程序员”,“你是一位历史学家”)。这能显著影响模型的回答风格和内容侧重

4. 明确任务(Define the task clearly):清晰说明你希望模型做什么:总结,翻译,解释,生成代码,创作故事等

5. 指定输出格式(specify output format):如果对输出格式有要求(如列表,JSON,Markdown,特定段落结构),请明确指出


技巧

1. 基础技巧: 明确指令与期望输出。使用动词明确动作,使用限定词缩小范围,指明数量和细节

2. 基础技巧:赋予模型角色 (Role playing)。角色描述越细致,模型表现越贴近。

3. 进阶技巧:少样本提示 (Few shot)。对比零样本(Zero-shot), 少样本通常效果更好

4. 进阶技巧: 思维链提示 (Chain-of-thought),引导模型在给出最终答案前,先输出一步步的思考或者推理过程。激活方式是在提示中搅入“请逐步思考并给出答案“, ”让我们一步步地解决这个问题“等指令。

5. 进阶技巧:控制输出长度与格式。





反例提示

现在给我举三个反例



关键总结:反例的共同缺陷​​

  1. ​缺乏具体约束​​:未定义长度/格式/平台

  2. ​角色与任务错配​​:如用科学家写广告

  3. ​核心信息遗漏​​:忽略产品差异化卖点

  4. ​无测量标准​​:如"吸引年轻人"不可量化

  5. ​无行动指令​​:未要求 CTA 或社交标签

这些反例演示了低效提示如何导致输出偏离商业目标。


作业二

根据你的个人工作或学习情况,参考本节三轮迭代提示词的思路,使用 DeepSeek 生成一份工作周报。

第一轮迭代提示

你是一名 AWS 的云计算架构师,名字叫 Tom,本周你主要完成了新的 AWS 的 RDS 数据库的架构和实施。请根据以上内容写一份周报,字数 1000 字以内

​AWS 云计算架构师周报​​​​姓名:Tom | 日期:[填写日期]​

​一、本周工作重点​​完成客户生产环境 AWS RDS(MySQL)架构升级项目,实现高可用、高性能数据库服务。

​二、主要工作内容​

  1. ​架构设计​

  • 采用多 AZ 部署方案,确保高可用性

  • 配置主实例(db.r5.2xlarge)和 2 个只读副本

  • 使用 GP3 存储(1TB/3000 IOPS)提升 I/O 性能

  • 部署 RDS Proxy 优化连接管理

  1. ​实施部署​

  • 通过 CloudFormation 自动化部署网络和安全组

  • 使用 DMS 实现零停机数据迁移

  • 配置 KMS 加密和精细化的 IAM 权限控制

  1. ​性能优化​

  • 调整关键数据库参数(如 innodb_buffer_pool_size)

  • 设置 CloudWatch 监控告警

  • 启用 Performance Insights 分析查询性能

​三、项目成果​

  • 实现 99.99%可用性,故障切换时间<30 秒

  • 查询性能提升 65%(平均延迟从 120ms 降至 35ms)

  • 月均成本节省约 $1200

​四、下周计划​

  1. 实现基于负载的自动扩展

  2. 进行跨区域灾备演练

  3. 完善运维文档和 SOP

项目已通过客户验收,符合 AWS 最佳实践。

​Tom​​AWS Certified Solutions Architect Professional


第二轮迭代提示

你是一名 AWS 的资深云计算架构师,名字叫 Tom,本周你主要完成了新的 AWS 的 RDS 数据库的架构和实施。请根据以上内容写一份周报,字数 1000 字以内。周报请包括主要架构设计,数据库引擎,每个月数据库的花销,数据库的备份与恢复,以及开发小组使用后的反馈情况。

AWS 云计算架构师周报​​​​姓名:Tom | 日期:[填写日期]​


​​一、项目概述​​

本周完成了客户生产环境​​AWS RDS 数据库架构升级项目​​,目标是构建高可用、高性能且成本优化的关系型数据库服务。项目涵盖架构设计、实施部署、性能调优及运维监控全流程,最终实现零停机迁移并满足业务需求。


​​二、主要架构设计​​

​​1. 数据库引擎选型​​
  • ​选择 MySQL 8.0​​:兼容客户现有应用逻辑,支持事务处理与复杂查询利用其稳定性及 AWS 托管服务的自动化优势

​​2. 高可用架构​​
  • ​多 AZ 部署​​:主实例(db.r5.2xlarge,8 vCPU/64GB RAM)部署在可用区 A 同步备库部署在可用区 B,支持自动故障转移(RTO<30 秒)2 个只读副本(跨 AZ)分担读负载,通过 ELB 实现读请求分发

  • ​网络配置​​:通过 CloudFormation 自动化部署 VPC、私有子网及安全组(仅开放应用服务器所需端口)

​​3. 存储与性能优化​​
  • ​存储类型​​:GP3 卷(1TB,基线 3000 IOPS,突发 16000 IOPS)

  • ​连接管理​​:启用 RDS Proxy,将应用层连接池从 500 降至 50,降低主库压力

  • ​参数调优​​:innodb_buffer_pool_size=48GB(占内存 75%)max_connections=2000,配合 RDS Proxy 动态扩展


​​三、成本分析与优化​​

​​1. 月度花销明细​​
​​2. 成本优化措施​​
  • ​预留实例​​:承诺 1 年用量,主备实例成本降低 40%(预计月省 $448)

  • ​存储优化​​:通过 CloudWatch 确认 GP3 IOPS 利用率<60%,避免过度配置


​​四、备份与恢复策略​​

​​1. 备份配置​​
  • ​自动备份​​:每日快照(保留 7 天),Binlog 保留 24 小时

  • ​跨区域复制​​:将快照异步复制至另一 Region(us-west-2),满足灾备需求

  • ​加密​​:所有备份通过 KMS(AWS Key Management Service)加密

​​2. 恢复测试结果​​
  • ​时间点恢复(PITR)​​:模拟误删表数据,从 Binlog 恢复耗时 8 分钟(数据量 50GB)

  • ​跨区域恢复​​:从 us-west-2 快照重建实例,完整流程耗时 25 分钟


​​五、开发小组反馈​​

​​1. 性能提升​​
  • ​查询延迟​​:平均从 120ms 降至 35ms,复杂报表查询提速 3 倍

  • ​稳定性​​:未出现连接池耗尽或主库过载问题

​​2. 使用体验​​
  • ​连接管理​​:RDS Proxy 简化了应用配置,无需调整代码即可适配

  • ​监控工具​​:Performance Insights 帮助快速定位慢查询(TOP 3 SQL 优化后性能提升 70%)

​​3. 改进建议​​
  • ​文档补充​​:需增加只读副本路由规则的详细示例

  • ​告警细化​​:建议添加长事务(>60 秒)的主动告警


​​六、下周计划​​

  1. ​自动化扩展​​:基于 CPU/连接数指标配置 Auto Scaling 策略

  2. ​灾备演练​​:模拟区域级故障,测试跨 Region 只读副本切换流程

  3. ​文档完善​​:编写《RDS 运维手册》(含日常维护 SOP 及故障排查指南)


​备注​​:当前架构已通过客户验收,符合 AWS Well-Architected Framework 的五大支柱(卓越运营、安全性、可靠性、性能效率、成本优化)。

​Tom​​AWS Certified Solutions Architect Professional


第三轮迭代提示

你是一名 AWS 的资深云计算架构师,名字叫 Tom,做事情积极主动,认真负责。本周你主要完成了新的 AWS 的 RDS 数据库的架构和实施。请根据以上内容写一份周报,字数 1000 字以内。周报请包括主要架构设计,数据库引擎,每个月数据库的花销,数据库的备份与恢复,以及开发小组使用后的反馈情况。请确保周报结构清晰,内容充实,并突出工作亮点和贡献。

​AWS 云计算架构师周报​​​​姓名:Tom | 日期:[填写日期]​


​​一、项目概述与工作亮点​​

本周我主导完成了客户生产环境​​AWS RDS 数据库架构升级项目​​,从需求分析到实施落地全程负责。本次工作主要亮点包括:

  1. ​零停机迁移​​:通过 DMS 增量同步实现业务无感知切换

  2. ​成本优化​​:采用预留实例+GP3 存储,月均节省 $1,200

  3. ​性能突破​​:查询延迟降低 65%,峰值 QPS 提升至 8,000

  4. ​主动创新​​:额外部署跨 Region 灾备副本,超出客户预期需求


​​二、架构设计与技术实现​​

​​1. 核心架构设计​​
  • ​高可用拓扑​​:主实例(us-east-1a,db.r5.2xlarge)+ 同步备库(us-east-1b)2 个只读副本(跨 AZ)+ RDS Proxy 连接池管理故障转移测试结果:​​切换时间 28 秒​​(远优于 SLA 要求的 5 分钟)

  • ​网络架构​​:通过 CloudFormation 模板自动化部署隔离的 VPC 环境安全组精细化配置(仅允许应用服务器 CIDR 访问 3306 端口)

​​2. 数据库引擎选型​​



​​三、成本管控与优化成果​​

​​1. 月度成本明细(优化后)​​
​​2. 创新性成本优化​​
  • ​存储智能分层​​:对历史数据启用 RDS Aurora 自动分层存储(测试阶段)

  • ​Spot 实例测试​​:计划对开发环境只读副本尝试 Spot 实例(预计再降本 30%)


​​四、备份恢复与灾备方案​​

​​1. 多级备份策略​​
  • ​自动备份​​:每日快照(7 天保留)+ Binlog 实时归档(24 小时)

  • ​跨 Region 复制​​:每日快照自动复制至 us-west-2(加密存储)

  • ​手动快照​​:重大变更前强制触发(保留 3 个月)

​​2. 恢复能力验证​​

​主动改进​​:额外编写了《灾难恢复操作手册》并组织团队演练


​​五、开发团队反馈与改进​​

​​1. 积极反馈​​
  • 性能提升:订单查询 API 响应时间从 210ms→68ms 批量导入任务耗时缩短 60%

  • 运维简化:RDS Proxy 自动连接管理减少应用层配置 Performance Insights 快速定位到 TOP 3 慢查询(优化后性能提升 80%)

​​2. 改进建议与响应​​



​​六、下周重点计划​​

  1. ​成本优化​​:推进开发环境 Spot 实例测试(预计节省 $300/月)

  2. ​自动化​​:基于 CPU/连接数实现 Auto Scaling(目标:峰值自动扩容+闲时缩容)

  3. ​安全加固​​:实施 Database Activity Monitoring 审计关键操作

  4. ​知识传递​​:组织《RDS 性能调优实战》技术分享会


​总结​​:本次项目不仅达成所有 KPI,还通过前瞻性设计(如跨 Region 灾备)为客户带来额外价值。我将持续跟进优化,确保架构长期稳定高效运行。

​Tom​​AWS Certified Solutions Architect Professional[联系方式:tom.cloud@example.com | 电话:+1-XXX-XXXX-XXXX]


​附:架构拓扑图​​(可点击查看大图)[图示:主备跨 AZ 部署+只读副本+跨 Region 灾备]


作业三

使用 DeepSeek 在 Python/Java/golang 等任意一门主流编程语言上,实践本节课程提示词技巧,生成一个最基本的用户登录模块,以及单元测试代码。

第一轮迭代

提示词:⽤ Python 写⼀个函数,生成一个最基本的用户登录模块,以及单元测试代码。

结果:

以下是一个基本的用户登录模块实现及对应的单元测试代码,使用 Python 标准库和unittest框架:

用户登录模块代码 (auth_module.py)

import hashlib
class UserAuth: def __init__(self): self.users = {} # 存储用户名和密码哈希 {username: password_hash}
def register(self, username: str, password: str) -> bool: """注册新用户""" if not username or not password: raise ValueError("用户名和密码不能为空") if username in self.users: raise ValueError("用户名已存在") self.users[username] = self._hash_password(password) return True
def login(self, username: str, password: str) -> bool: """用户登录验证""" if not username or not password: raise ValueError("用户名和密码不能为空") stored_hash = self.users.get(username) if not stored_hash: return False return stored_hash == self._hash_password(password)
def _hash_password(self, password: str) -> str: """使用SHA-256哈希密码""" return hashlib.sha256(password.encode('utf-8')).hexdigest()
复制代码


单元测试代码 (test_auth.py)

import unittestfrom auth_module import UserAuth
class TestUserAuth(unittest.TestCase): def setUp(self): self.auth = UserAuth() self.test_user = "test_user" self.test_pass = "SecureP@ss123"
def test_successful_registration(self): """测试成功注册""" self.assertTrue(self.auth.register(self.test_user, self.test_pass)) self.assertIn(self.test_user, self.auth.users)
def test_duplicate_registration(self): """测试重复注册""" self.auth.register(self.test_user, self.test_pass) with self.assertRaises(ValueError): self.auth.register(self.test_user, "another_password")
def test_empty_credentials(self): """测试空凭据""" with self.assertRaises(ValueError): self.auth.register("", self.test_pass) with self.assertRaises(ValueError): self.auth.register(self.test_user, "")
def test_successful_login(self): """测试成功登录""" self.auth.register(self.test_user, self.test_pass) self.assertTrue(self.auth.login(self.test_user, self.test_pass))
def test_failed_login(self): """测试失败登录""" self.auth.register(self.test_user, self.test_pass) # 错误密码 self.assertFalse(self.auth.login(self.test_user, "wrong_password")) # 不存在的用户 self.assertFalse(self.auth.login("non_existent_user", self.test_pass))
def test_password_hashing(self): """测试密码哈希一致性""" hash1 = self.auth._hash_password(self.test_pass) hash2 = self.auth._hash_password(self.test_pass) self.assertEqual(hash1, hash2) # 确保不同密码产生不同哈希 self.assertNotEqual(hash1, self.auth._hash_password("different"))
if __name__ == '__main__': unittest.main()
复制代码

第二轮迭代

提示词:

提示:请⽤ Python 编写⼀个名为 `UserAuth` 的模块,⽤于验证⼀个给定的用户登陆(user户名和密码)是否为有效的用户登录。要求:1. 函数接受⼀个两个字符串参数 `user_name`和`password`。2. 如果输⼊不是字符串类型,应返回 False 或抛出 TypeError。另外,请为这个函数提供⾄少3个正⾯测试⽤例(应该返回True的正确登陆)和3个负⾯测试⽤例(应该返回False的错误登陆),并说明期望结果。
复制代码


用户登录模块 (UserAuth.py)

class UserAuth:    # 模拟有效用户数据库    _valid_users = {        "john_doe": "abc123",        "alice_smith": "p@ssw0rd",        "admin": "Admin!234"    }
@staticmethod def login(user_name: str, password: str) -> bool: """验证用户登录 Args: user_name: 用户名 password: 密码 Returns: bool: 验证结果 Raises: TypeError: 如果输入不是字符串类型 """ # 类型检查 if not isinstance(user_name, str) or not isinstance(password, str): raise TypeError("用户名和密码必须是字符串类型") # 验证逻辑 return UserAuth._valid_users.get(user_name) == password
复制代码


单元测试代码 (test_UserAuth.py)

import unittestfrom UserAuth import UserAuth
class TestUserAuth(unittest.TestCase): """UserAuth 登录验证测试"""
# 正面测试用例 (应返回True) def test_valid_login1(self): self.assertTrue(UserAuth.login("john_doe", "abc123"))
def test_valid_login2(self): self.assertTrue(UserAuth.login("alice_smith", "p@ssw0rd"))
def test_valid_login3(self): self.assertTrue(UserAuth.login("admin", "Admin!234"))
# 负面测试用例 (应返回False) def test_invalid_username(self): self.assertFalse(UserAuth.login("wrong_user", "abc123"))
def test_invalid_password(self): self.assertFalse(UserAuth.login("john_doe", "wrong_pass"))
def test_both_invalid(self): self.assertFalse(UserAuth.login("no_such_user", "random_pass"))
# 类型检查测试 def test_non_string_username(self): with self.assertRaises(TypeError): UserAuth.login(123, "abc123")
def test_non_string_password(self): with self.assertRaises(TypeError): UserAuth.login("john_doe", 123.45)
def test_both_non_string(self): with self.assertRaises(TypeError): UserAuth.login([], {})
if __name__ == '__main__': unittest.main()
复制代码


发布于: 刚刚阅读数: 4
用户头像

9527

关注

还未添加个人签名 2020-04-22 加入

还未添加个人简介

评论

发布
暂无评论
AI 全栈开发实战营 - 第三章_9527_InfoQ写作社区