01
如何获取 DeepSeek API 密钥?
1. 访问 DeepSeek 官方网站
-
打开DeepSeek 的官方网:https://www.deepseek.com。
-
查找与 API 相关的页面或开发者文档。
2. 注册或登录账户
- 如果你还没有 DeepSeek 账户,需要先注册一个新账户。
- 如果已经有账户,直接登录。
3. 进入开发者或 API 管理页面
-
登录后,进入开发者中心或 API 管理页面。
-
通常可以在用户面板或设置中找到相关选项。
-
新注册用户赠送10元免费额度。
4. 创建 API 密钥
- 在 API 管理页面中,找到“创建 API 密钥”或“生成密钥”的选项。
- 按照提示生成一个新的 API 密钥。
- 生成的密钥通常是一串长字符(例如:sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)。
5. 保存 API 密钥
- 生成密钥后,务必将其保存到安全的地方,因为密钥只会显示一次。
- 如果丢失,可能需要重新生成。
6. 使用 API 密钥
- 将生成的 API 密钥替换到代码中的 api_key=“” 部分。
- 测试密钥是否有效,下面是一个简单示例。
02
如何使用LangChain框架调用DeepSeek的API?
LangChain是一个强大的框架,用于构建基于语言模型的应用程序,尤其适用于处理自然语言推理任务。它能够通过模型推理来生成内容或执行任务,而不是仅依赖于预定义的规则或固定内容。
安装库
pip install langchain langchain_openai openai
官方示例
这段代码的功能是测试langchain库与 DeepSeek 模型的交互。
扩展案例
这段代码的作用是使用 Python 语言通过langchain库与 DeepSeek API 进行交互,实现一个基于用户信息提供个性化推荐的功能。
from langchain_openai.chat_models.base import BaseChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
# 从环境变量中获取 API 密钥
api_key = '<your api key>'
# 配置 DeepSeek API
base_url = "https://api.deepseek.com"
# 初始化 ChatOpenAI 客户端
chat_model = BaseChatOpenAI(
model="deepseek-chat", # 指定模型
openai_api_key=api_key,
openai_api_base=base_url,
temperature=0.7, # 控制生成文本的随机性
max_tokens=150, # 限制生成的最大 token 数
)
# 定义用户信息和系统提示
user_info = {
"name": "Alice",
"age": 30,
"interests": ["reading", "traveling", "technology"],
}
system_prompt = (
"You are a helpful assistant. "
"You will receive user information and provide personalized recommendations."
)
# 构建消息
messages = [
SystemMessage(content=system_prompt),
HumanMessage(content=f"User information: {user_info}. Can you recommend something based on my interests?"),
]
# 调用 DeepSeek API 进行推理
response = chat_model.invoke(messages) # 使用 .invoke() 方法调用模型
# 输出结果
print(response.content)
03
如何通过LangChain+deepseek动态生成关卡?
创建AIGC_level.py文件,配置推理模型
首先调用BaseChatOpenAI()方法生成推理模型,传入的参数中要替换为自己的DeepSeek API密钥。然后设置系统提示词,即按何种规则生成关卡数据。接着构建用户输入,将玩家的移动步数作为参数保存。最后构建系统消息,为进一步调用模型做好准备,此后只需将系统消息传入模型的invoke()方法便能触发DeepSeek API 的推理过程,并获取模型的响应结果。
你是一个推箱子游戏关卡设计师。
根据玩家在当前关卡的表现(步数),生成一个新的推箱子游戏关卡。
关卡数据应以二维列表表示,列表中的元素及含义如下:
请根据以下规则,以10步为单位精细调整关卡难度:
\1. 步数少于10步:
- 增加箱子数量至5 - 6个。
- 设计复杂的墙壁布局,增加玩家移动的阻碍和路线的多样性,例如设置多个狭窄通道、环形结构或死胡同。
- 目标点分散在关卡各处,且部分目标点需经过复杂的操作才能到达。
\2. 步数在10 - 19步之间:
- 箱子数量设置为4 - 5个。
- 墙壁布局有一定复杂度,存在一些分支路径,但整体路线不会过于复杂。
- 目标点分布有一定分散性,但仍可通过相对直接的操作到达部分目标点。
\3. 步数在20 - 29步之间:
- 箱子数量为3 - 4个。
- 墙壁布局相对简单,减少不必要的阻碍,玩家可活动空间较大。
- 目标点分布较为集中,便于玩家规划路线。
\4. 步数在30 - 39步之间:
- 箱子数量为2 - 3个。
- 墙壁布局简单,以直线或简单折线为主,基本不设置复杂的通道。
- 目标点集中在关卡的某一区域,降低玩家的操作难度。
\5. 步数多于40步:
- 箱子数量为1 - 2个。
- 尽量减少墙壁数量,仅设置必要的边界,使玩家可自由移动。
- 目标点明显且易于到达,玩家无需复杂操作即可完成关卡。
### 要求:
- 合理使用墙壁、箱子和目标点,使得关卡可以被解开。
- 箱子的数量应和目标点的数量相等。
- 每次生成的关卡必须具有明显的差异,不能与之前生成的关卡重复。
- 关卡尺寸为9行11列,玩家可活动区域尽量集中在关卡中部。
### 示例输出:
### 注意事项:仅输出二维列表,确保关卡可解并具挑战性。
“”"
# 运行推理模型,参数为玩家当前关卡的步数
def run_model(player_steps):
# 构建用户输入
user_input = f"玩家本关卡的步数:{player_steps}"
# 构建消息
messages = [
SystemMessage(content=system_prompt),
HumanMessage(content=user_input),
]
# 调用 LangChain 生成关卡数据
try:
response = chat_model.invoke(messages)
if not response.content:
print("模型返回为空,检查提示词和请求设置。")
else:
# 处理响应,过滤掉空行
non_empty_lines = [line for line in response.content.splitlines() if line.strip()]
mapdata = eval('\n'.join(non_empty_lines))
print("生成的关卡数据:")
print(mapdata)
return mapdata
except Exception as e:
print("请求失败:", e)
在游戏代码调用推理模型
使用pgzero库开发了一个推箱子游戏,将当前关卡中移动步数记录在变量steps中,过关时会调用loadmap()方法,该方法中将steps作为输入参数传给模型,模型会根据系统提示词生成关卡数据作为输出,游戏程序则根据模型生成的关卡数据加载关卡图像。
import pgzrun
import AIGC_levelTILESIZE = 48 # 箱子尺寸WIDTH = TILESIZE * 11 # 屏幕宽度HEIGHT = TILESIZE * 9 # 屏幕高度# 方向字典,存储各方向对应的坐标偏移值dirs = {"east":(1, 0), "west":(-1, 0), "north":(0, -1), "south":(0, 1), "none":(0, 0)}level = 1 # 游戏关卡值finished = False # 游戏过关标记gameover = Falsesteps = 0map =[ ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1'], ['-1', '-1', '1', '1', '1', '1', '1', '1', '1', '-1', '-1'], ['-1', '-1', '1', '0', '0', '4', '0', '0', '1', '-1', '-1'], ['-1', '-1', '1', '0', '0', '2', '2', '0', '1', '-1', '-1'], ['-1', '-1', '1', '4', '0', '3', '0', '4', '1', '-1', '-1'], ['-1', '-1', '1', '0', '2', '0', '2', '0', '1', '-1', '-1'], ['-1', '-1', '1', '0', '0', '4', '0', '0', '1', '-1', '-1'], ['-1', '-1', '1', '1', '1', '1', '1', '1', '1', '-1', '-1'], ['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1']]# 初始化地图,生成游戏角色def initlevel(mapdata): global walls, floors, boxes, targets, player walls = [] # 墙壁列表 floors= [] # 地板列表 boxes = [] # 箱子列表 targets = [] # 目标点列表 for row in range(len(mapdata)): for col in range(len(mapdata[row])): x = col * TILESIZE y = row * TILESIZE if mapdata[row][col] >= "0"and mapdata[row][col] != "1": floors.append(Actor("pushbox_floor", topleft=(x, y))) if mapdata[row][col] == "1": walls.append(Actor("pushbox_wall", topleft=(x, y))) elif mapdata[row][col] == "2": box = Actor("pushbox_box", topleft=(x, y)) box.placed = False boxes.append(box) elif mapdata[row][col] == "4": targets.append(Actor("pushbox_target", topleft=(x, y))) elif mapdata[row][col] == "6": targets.append(Actor("pushbox_target", topleft=(x, y))) box = Actor("pushbox_box_hit", topleft=(x, y)) box.placed = True boxes.append(box) elif mapdata[row][col] == "3": player = Actor("pushbox_right", topleft=(x, y))initlevel(map)# 载入关卡地图def loadmap(): global steps,gameover mapdata = AIGC_level.run_model(steps) ifnot mapdata: gameover = True else: steps = 0 initlevel(mapdata)# 处理键盘按下事件def on_key_down(key): if finished or gameover: return if key == keys.RIGHT: player.direction = "east" player.image = "pushbox_right" elif key == keys.LEFT: player.direction = "west" player.image = "pushbox_left" elif key == keys.DOWN: player.direction = "south" player.image = "pushbox_down" elif key == keys.UP: player.direction = "north" player.image = "pushbox_up" else: player.direction = "none" player_move() player_collision()# 移动玩家角色def player_move(): player.oldx = player.x player.oldy = player.y dx, dy = dirs[player.direction] player.x += dx * TILESIZE player.y += dy * TILESIZE# 玩家角色的碰撞检测与处理def player_collision(): # 玩家与墙壁的碰撞 if player.collidelist(walls) != -1: player.x = player.oldx player.y = player.oldy return # 玩家与箱子的碰撞 index = player.collidelist(boxes) if index == -1: return box = boxes[index] if box_collision(box) == True: box.x = box.oldx box.y = box.oldy player.x = player.oldx player.y = player.oldy return sounds.fall.play()# 箱子角色的碰撞检测与处理def box_collision(box):global steps box.oldx = box.x box.oldy = box.y dx, dy = dirs[player.direction] box.x += dx * TILESIZE box.y += dy * TILESIZE # 箱子与墙壁的碰撞 if box.collidelist(walls) != -1: returnTrue # 箱子与其他箱子的碰撞 for bx in boxes: if box == bx: continue if box.colliderect(bx): returnTruecheck_target(box)steps += 1 returnFalse# 检测箱子是否放置在目标点上def check_target(box): if box.collidelist(targets) != -1: box.image = "pushbox_box_hit" box.placed = True else: box.image = "pushbox_box" box.placed = False# 判断是否过关def levelup(): for box in boxes: ifnot box.placed: returnFalse returnTrue# 设置新的关卡def setlevel(): global finished, level finished = False level += 1 loadmap()# 更新游戏逻辑def update(): global finished if finished or gameover: return if levelup(): finished = True sounds.win.play() clock.schedule(setlevel, 5)# 绘制游戏图像def draw(): screen.fill((200, 255, 255)) for floor in floors: floor.draw() for wall in walls: wall.draw() for target in targets: target.draw() for box in boxes: box.draw() player.draw() screen.draw.text("Level " + str(level), topleft=(20, 20), fontsize=30, color="black") screen.draw.text("Steps " + str(steps), topleft=(WIDTH-100, 20), fontsize=30, color="black") if gameover: screen.draw.text("Game Over", center=(WIDTH // 2, HEIGHT // 2), fontsize=80, color="red") if finished: screen.draw.text("Level Up", center=(WIDTH // 2, HEIGHT // 2), fontsize=80, color="blue") screen.draw.text("Genrating……", center=(WIDTH // 2, HEIGHT // 2+50), fontsize=80, color="blue")
pgzrun.go()
说明 /
- 初始关卡是指定的,后续的关卡会根据当前关卡的表现(移动步数)动态生成。
- 当前DeepSeek网络不太稳定,有时不会成功,可以多试几次或隔一段时间再试。
- 生成的关卡有时不合理,系统提示词还有进一步优化空间。
本文中的推箱子游戏的具体开发步骤在《趣学Python游戏编程》图书中有详细介绍,
本案例源代码下载链接:https://pan.baidu.com/s/13FxoxR-tD3p6GHw0VnnBhQ?pwd=24rq
如何零基础入门 / 学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?
”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人」
,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
全套AGI大模型学习大纲+路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。