跳到主要内容

课程说明:

  体验课时间有限,若想深度学习大模型技术,欢迎大家报名由我主讲的《2025大模型Agent智能体开发实战》

a4f3bdfb511aab72c83ee7d1fbefeff

《2025大模型Agent智能体开发实战》 为【100+小时】体系大课,总共20大模块精讲精析,零基础直达大模型企业级应用!

简略介绍图

《2025大模型Agent智能体开发实战》2025 年新春班上新&新年双重特惠,立减2000,九天老师直播间专属优惠券1000,仅需2999即可入学,【仅限前10名】详细信息扫码添加助教,回复“大模型”,即可领取课程大纲&查看课程详情👇

c6847a817fd7efd0cddcb1bcac217c3 image-20250107200452887 image-20250107200502389

《2025大模型Agent智能体开发实战》体验课

Ch 1.DeepSeek v3 API接入指南

import os
from IPython.display import display, Code, Markdown
import requests
import json
  • DeepSeek v3账号注册与API获取

DeepSeek官网:https://www.deepseek.com/

image-20250107155848673 image-20250107155925049

新用户注册即赠送10元额度,约500万token额度:

image-20250107160101536

对比GPT4o价格,约降低90%以上:输入价格为GPT4o的6%,输出价格围殴GPT4o的3%

image-20250107160418665

且API调用不限速:

image-20250107160659366

最关键的是,调用风格和OpenAI完全一致:Function calling、提示词缓存、Json Output等功能完全相同:

image-20250107161014344 image-20250107161058708
  • DeepSeek v3调用流程

对比OpenAI GPT4o调用流程:

!pip install openai
import openai
openai.__version__
from openai import OpenAI
api_key = 'YOUR_API_KEY'
# 实例化客户端
client = OpenAI(api_key=api_key,
base_url="https://ai.devtool.tech/proxy/v1")
# 调用 GPT-4o-mini 模型
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "你好,好久不见!"}
]
)

上述代码中 model 参数指定了使用的模型(gpt-4o-mini),messages 列表定义了对话内容,其中 role 为 user 表示用户的输入内容。

# 输出生成的响应内容
print(response.choices[0].message.content)
response

DeepSeekv3调用流程:

首先在官网申请API-KEY:https://platform.deepseek.com/api_keys

image-20250107162553252 image-20250107162642821
ds_api_key = 'YOUR_DS_API_KEY'
# 实例化客户端
client = OpenAI(api_key=ds_api_key,
base_url="https://api.deepseek.com")
# 调用 deepseekv3 模型
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "user", "content": "你好,好久不见!"}
]
)
# 输出生成的响应内容
print(response.choices[0].message.content)
response

一样的SDK,代表DeepSeek模型采用和GPT模型完全的参数体系:

client.chat.completions.create?

DeepSeek目前支持的模型范围:

models_list = client.models.list()
models_list.data

  DeepSeek v3 模型属于聊天补全(chat completion)模型,模型提供了多种参数,帮助开发者定制化模型的生成行为。以下是对主要参数的详细解释,以及如何在 Python 中使用这些参数进行请求。

4.1 messages (必填)

  messages 参数是 DeepSeek v3 模型 API 中必填的参数之一,用于定义聊天上下文,包括用户的输入、系统的指令、助手的回复等。通过 messages 数组,模型可以理解当前对话的背景,从而生成更加连贯的响应。根据不同的使用场景,messages 包含多种类型的消息,例如 system messageuser messageassistant message。下面是对 messages 参数及其各个子类型的详细解释。

4.1.1 System message

  system message 用于设置系统消息,通常由开发者设定,以指导模型如何进行对话。这类消息可以定义规则或约束,并提供有关对话的背景信息。

  • content (必填):系统消息的内容,可以是字符串或数组。如果是数组,可能包含多个类型的内容(如文本、图像)。
  • role (必填):此处角色为 system,表明这是系统发出的消息。
  • name (可选):提供系统消息发送者的名称,尤其适用于区分多个具有相同角色的参与者。

示例: FENCE0

# 以下代码的注释由MateGen生成:
# 定义一个字典,键为'system_message',用于存储系统消息
system_message = {
# 'role'键对应的值是一个字符串"system",表示消息的发送者是系统
"role": "system",
# 'content'键对应的值是一个字符串,表示系统消息的内容
"content": "你是一位大学教授。"
}
4.1.2 User message

user message 表示用户发给模型的消息,是对话的核心部分之一。它定义了用户的输入内容,模型根据这些内容生成响应。

  • content (必填):用户消息的内容,通常为文本或图像链接的数组。对于支持图像输入的模型,如 DeepSeek v2.5 ,还可以传递图像。
    • 文本内容:单纯的字符串形式,用户输入的文本。
    • 数组形式的内容:由文本或图像链接组成的数组,可以同时传递多张图像或多段文本内容。
  • role (必填):角色为 user,表示该消息来自用户。
  • name (可选):可以为用户指定一个名称,用于区分多个具有相同角色的用户。

示例: FENCE0

如果传递多个内容(如图像和文本): FENCE1

# 创建用户消息
user_message = {
"role": "user",
"content": "你好,请介绍下你自己。"
}
# 调用 GPT-4o-mini 模型
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
system_message,
user_message
]
)
# 输出生成的响应内容
print(response.choices[0].message.content)
  • 构建多轮对话机器人
import re
from IPython.display import display, Code, Markdown
def extract_url_and_text(input_text):
"""
提取用户输入中的 URL 和描述文本。

参数:
input_text (str): 用户的输入文本,可能包含 URL 和描述性文本。

返回:
tuple: 包含描述性文本和提取到的 URL,如果没有 URL,则返回 (input_text, None)。
"""
# 使用正则表达式检测 URL
url_pattern = re.compile(r'(https?://[^\s]+)')
url_match = url_pattern.search(input_text)

if url_match:
# 提取 URL 并将其从原文本中移除
url = url_match.group(0)
description = input_text.replace(url, '').strip() # 去掉 URL 后剩下的文本
return description, url
else:
return input_text, None
def create_message(role, content):
"""
创建标准的消息格式,包括用户、助手或系统消息。

参数:
role (str): 消息的角色,值为 "user"、"assistant" 或 "system"。
content (str or list): 消息的内容,可以是字符串(文本)或包含文本和图像的数组。

返回:
dict: 符合 GPT-4o API 要求的消息格式。
"""
return {
"role": role,
"content": content
}
def process_user_input(input_text):
"""
根据用户输入的内容,灵活判断是否包含 URL,并生成对应的消息格式。

参数:
input_text (str): 用户的输入文本。

返回:
dict: 生成的用户消息,包含文本或图片 URL。
"""
description, url = extract_url_and_text(input_text)

if url:
# 如果检测到 URL,生成带图像链接的消息
if not description:
description = "请帮我分析这张图片的内容。" # 如果没有描述,提供默认描述
return create_user_message_with_image(description, url)
else:
# 否则生成普通的文本消息
return create_message("user", description)
def create_user_message_with_image(text, image_url):
"""
创建包含文本和图像链接的用户消息。

参数:
text (str): 用户输入的文本内容。
image_url (str): 图像的 URL 地址。

返回:
dict: 包含文本和图像的用户消息。
"""
return {
"role": "user",
"content": [
{"type": "text", "text": text},
{"type": "image_url", "image_url": {"url": image_url}}
]
}
def chat_with_DeepSeek(client, messages):
"""
使用 DeepSeek 模型进行多轮对话的核心函数。

参数:
client (OpenAI): 实例化的 OpenAI 客户端。
messages (list): 包含对话上下文的消息列表,包括用户、助手和系统消息。

返回:
str: GPT-4o 模型生成的回复内容。
"""
response = client.chat.completions.create(
model="deepseek-chat", # 使用 deepseek-chat 模型
messages=messages
)

# 提取并返回助手生成的回复内容
return response.choices[0].message.content
def multi_round_chat():
"""
多轮对话机器人示例函数,演示如何通过捕获用户输入,并根据是否包含 URL 做出响应。

"""
# 初始化消息列表,包含系统消息
messages = []

# 创建系统消息,设置对话的上下文
system_message = create_message("system", "You are a helpful assistant.")
messages.append(system_message)

while True:
# 捕获用户输入
user_input = input("User: ")

# 处理用户输入并生成相应的消息
user_message = process_user_input(user_input)
messages.append(user_message)

# 调用 GPT-4o 模型进行回复
assistant_reply = chat_with_DeepSeek(client, messages)
display(Markdown(f"Assistant: {assistant_reply}"))

# 将助手回复添加到消息列表
messages.append(create_message("assistant", assistant_reply))

# 提供退出机制,用户可以输入 'exit' 退出对话
if user_input.lower() == 'exit':
print("对话结束。")
break
# 调用多轮对话机器人函数
multi_round_chat()

DeepSeek-v3模型 参数汇总表

参数名类型必填/可选默认值说明
modelstring必填指定要使用的模型 ID,例如 gpt-4ogpt-4o-mini
storeboolean or null可选false是否存储本次对话的输出,供模型精炼或评估产品使用。
metadataobject or null可选null开发者自定义的标签和值,用于过滤仪表盘中的补全结果。
frequency_penaltynumber or null可选0数值在 -2.02.0 之间,正值减少重复生成内容的可能性。
logit_biasmap可选null调整某些特定 tokens 出现的可能性,值在 -100100 之间。
logprobsboolean or null可选false是否返回生成的每个 token 的对数概率。
top_logprobsinteger or null可选null指定返回最有可能出现的前几个 tokens 及其概率,需开启 logprobs
max_completion_tokensinteger or null可选null指定模型生成的最大 token 数,包括可见文本和推理 tokens。
ninteger or null可选1每个输入生成的对话补全选项数量,值越大,生成的回复越多。
presence_penaltynumber or null可选0数值在 -2.02.0 之间,正值鼓励生成新的主题和内容。
response_formatobject可选null指定生成结果的格式,可以设置为 json_schema 以确保结构化输出,或 json_object 用于 JSON 格式。
seedinteger or null可选null保持生成的一致性,重复相同请求将尽量生成相同的结果。
service_tierstring or null可选auto指定服务延迟等级,适用于付费订阅用户,默认为 auto
stopstring / array / null可选null最多指定 4 个序列,API 遇到这些序列时会停止生成进一步的 tokens。
streamboolean or null可选false是否启用流式响应,若启用,生成的 tokens 将逐步返回。
stream_optionsobject or null可选null流式响应的选项,仅当 streamtrue 时设置。
temperaturenumber or null可选1控制生成输出的随机性,值越高生成的文本越随机。建议调整此值或 top_p,而不是同时调整。
top_pnumber or null可选1使用核采样方法,选择最有可能的 tokens,总概率达到 top_p 百分比。建议与 temperature 二选一。
toolsarray可选null模型可以调用的工具列表,目前仅支持函数调用。
userstring可选null表示最终用户的唯一标识符,用于监控和检测滥用行为。

参数解释:

  1. 模型和输出相关参数

    • model 是必填参数,决定使用哪个模型(如 deepseek-chat deepseek-code)。
    • store 控制是否存储生成的对话结果,便于后续模型训练或评估。
    • metadata 用于添加开发者自定义的标签,便于在仪表盘中过滤补全结果。
    • max_completion_tokensn 控制生成内容的数量和长度,帮助管理生成成本。
  2. 生成行为控制

    • frequency_penaltypresence_penalty 都用于影响生成结果的内容重复度和新颖性。
    • logit_bias 是用于调整特定 token 出现概率的高级控制工具。
    • temperaturetop_p 通过不同的方式控制生成结果的随机性,建议选其一进行调整。
  3. 高级功能

    • logprobstop_logprobs 用于返回每个 token 的概率信息,适合对模型输出进行更细粒度分析。
    • stream 启用后会实时返回生成的结果,适用于需要逐步展示内容的场景。
    • tools 允许模型调用外部工具(如函数),适用于扩展模型的功能。
  4. 服务和用户相关参数

    • service_tier 控制服务的延迟和稳定性,适合高性能要求的付费用户。
    • user 用于标识最终用户,有助于监控使用行为,防止滥用。