DeepSeek API 客户端使用文档

news/2025/3/16 0:13:54/

1. 简介

deep.py 是一个用于与 DeepSeek API 交互的 Python 客户端封装。它提供了简单易用的接口,支持对话历史管理、日志记录等功能,使得与 DeepSeek API 的交互更加便捷和可靠。

2. 功能特点

  • 简单的接口设计
  • 自动管理对话历史
  • 完整的日志记录
  • 灵活的配置选项
  • 异常处理机制

3. 安装依赖

pip install openai

4. 配置环境

在项目根目录创建 .env 文件:

# Windows
set DEEPSEEK_API_KEY=your_api_key_here# Linux/Mac
export DEEPSEEK_API_KEY=your_api_key_here

5. 代码结构

5.1 主要组件

class DeepSeekChat:def __init__(self, api_key: str, base_url: str = "https://api.deepseek.com")def send_message(self, message: str, ...) -> strdef clear_history(self)

5.2 日志配置

logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler('deepseek.log'),logging.StreamHandler()]
)

6. 使用示例

6.1 基本使用

from deep import DeepSeekChat# 创建客户端实例
chat = DeepSeekChat(api_key="your_api_key")# 发送消息
response = chat.send_message("Hello")
print("Assistant:", response)

6.2 高级配置

# 自定义系统提示词和其他参数
response = chat.send_message(message="Tell me a joke",system_prompt="You are a funny assistant",temperature=0.8,max_tokens=150,save_history=True
)# 清除对话历史
chat.clear_history()

7. API 参数说明

7.1 DeepSeekChat 类初始化参数

参数类型默认值说明
api_keystr必填DeepSeek API 密钥
base_urlstr“https://api.deepseek.com”API 基础 URL

7.2 send_message 方法参数

参数类型默认值说明
messagestr必填用户消息内容
system_promptstr“You are a helpful assistant”系统提示词
modelstr“deepseek-chat”使用的模型名称
streamboolFalse是否使用流式响应
save_historyboolTrue是否保存对话历史
temperaturefloat可选控制回复的随机性
max_tokensint可选限制回复长度

8. 日志记录

日志文件 deepseek.log 记录以下信息:

  • 请求发送时间和内容
  • 响应接收时间和处理时长
  • 错误信息(如果有)

9. 错误处理

代码包含完整的错误处理机制:

  • API 调用错误捕获
  • 环境变量检查
  • 详细的错误日志记录

10. 最佳实践

  1. 环境变量管理

    • 使用 .env 文件管理 API 密钥
    • 不要在代码中硬编码密钥
  2. 错误处理

    • 始终使用 try-except 块包装 API 调用
    • 检查并记录错误信息
  3. 对话历史

    • 根据需要保存或清除对话历史
    • 长对话时注意 token 限制
  4. 性能优化

    • 适当设置 max_tokens 参数
    • 必要时使用流式响应

11. 注意事项

  1. API 密钥安全

    • 不要将 API 密钥提交到版本控制系统
    • 使用环境变量或配置文件管理密钥
  2. 错误处理

    • 注意处理网络超时等异常
    • 记录详细的错误日志
  3. 资源管理

    • 及时清理不需要的对话历史
    • 注意 API 调用频率限制

12. 完整代码

import os
from typing import List, Dict, Optional
from openai import OpenAI
import logging
from datetime import datetime# 配置日志记录
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler('deepseek.log'),logging.StreamHandler()]
)
logger = logging.getLogger(__name__)class DeepSeekChat:"""DeepSeek API 聊天客户端"""def __init__(self, api_key: str, base_url: str = "https://api.deepseek.com"):"""初始化 DeepSeek 聊天客户端Args:api_key: DeepSeek API密钥base_url: DeepSeek API基础URL"""self.client = OpenAI(api_key=api_key, base_url=base_url)self.conversation_history: List[Dict[str, str]] = []def send_message(self, message: str,system_prompt: str = "You are a helpful assistant",model: str = "deepseek-chat",stream: bool = False,save_history: bool = True,**kwargs) -> str:"""发送消息并获取回复Args:message: 用户消息内容system_prompt: 系统提示词model: 使用的模型名称stream: 是否使用流式响应save_history: 是否保存对话历史**kwargs: 其他API参数Returns:str: 助手的回复内容Raises:Exception: API调用失败时抛出异常"""try:# 构建消息列表messages = [{"role": "system", "content": system_prompt}]if save_history:messages.extend(self.conversation_history)messages.append({"role": "user", "content": message})# 记录请求logger.info(f"Sending message: {message[:100]}...")# 发送请求start_time = datetime.now()response = self.client.chat.completions.create(model=model,messages=messages,stream=stream,**kwargs)# 获取响应内容assistant_message = response.choices[0].message.content# 计算响应时间response_time = (datetime.now() - start_time).total_seconds()logger.info(f"Got response in {response_time:.2f} seconds")# 保存对话历史if save_history:self.conversation_history.append({"role": "user", "content": message})self.conversation_history.append({"role": "assistant", "content": assistant_message})return assistant_messageexcept Exception as e:logger.error(f"Error in send_message: {str(e)}")raisedef clear_history(self):"""清除对话历史"""self.conversation_history.clear()logger.info("Conversation history cleared")def main():"""示例用法"""try:# 从环境变量获取API密钥api_key = os.getenv("DEEPSEEK_API_KEY")if not api_key:raise ValueError("Please set DEEPSEEK_API_KEY environment variable")# 创建聊天客户端chat = DeepSeekChat(api_key=api_key)# 发送消息并获取回复response = chat.send_message(message="Hello",temperature=0.7,  # 可选:控制回复的随机性max_tokens=100    # 可选:限制回复长度)print("Assistant:", response)except Exception as e:logger.error(f"Error in main: {str(e)}")raiseif __name__ == "__main__":main()

.env

# Windows
set DEEPSEEK_API_KEY=your_api_key_here# Linux/Mac
export DEEPSEEK_API_KEY=your_api_key_here

http://www.ppmy.cn/news/1579433.html

相关文章

《C#上位机开发从门外到门内》3-1:串口调试助手

文章目录 **1. 项目概述****2. 功能需求****2.1 核心功能****2.2 扩展功能** **3. 技术选型****3.1 开发语言****3.2 GUI 框架****3.3 串口通信库****3.4 数据解析****3.5 日志记录** **4. 系统设计****4.1 模块划分****4.2 数据流设计** **5. 详细设计****5.1 串口通信模块***…

深入理解Linux网络随笔(七):容器网络虚拟化--Veth设备对

深入理解Linux网络随笔(七):容器网络虚拟化 微服务架构中服务被拆分成多个独立的容器,docker网络虚拟化的核心技术为:Veth设备对、Network Namespace、Bridg。 Veth设备对 veth设备是一种 成对 出现的虚拟网络接口&…

探索 Rust 高效 Web 开发:Hyperlane 框架深度解析

探索 Rust 高效 Web 开发:Hyperlane 框架深度解析 在当今的 Web 开发领域,追求高性能、轻量级的框架一直是开发者们的不懈追求。对于 Rust 语言开发者而言,Hyperlane 框架正以其独特的魅力崭露头角,为构建现代 Web 服务提供了一种…

clickhouse网络安全日志 网络安全日志保存时间

系统账号管理不规范 由于root权限为系统最高权限,可以对系统进行所有管理配置操作,一旦被攻击者获取利用,将严重威胁网站的安全性。建议禁用roo直接登录,开放普通用户登录,通过普通用户登录再su进行系统管理 adduser …

蓝桥杯第二天:2023省赛C 1题 分糖果

public static void main(String[] args) {Scanner scan new Scanner(System.in);int n,x;n scan.nextInt();x scan.nextInt();String res1;res1 scan.next();char res[] res1.toCharArray();Arrays.sort(res);//第一种情况:糖果是aaaaaa...这种类型的&#xf…

宇树ROS1开源模型在ROS2中Gazebo中仿真

以GO1为例 1. CMakelists.txt更新语法 cmake_minimum_required(VERSION 3.8) project(go1_description) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find…

C语言零基础入门:嵌入式系统开发之旅

C语言零基础入门:嵌入式系统开发之旅 一、引言 嵌入式系统开发是当今科技领域中一个极具魅力和挑战性的方向。从智能家居设备到汽车电子系统,从智能穿戴设备到工业自动化控制,嵌入式系统无处不在。而C语言,作为嵌入式开发中最常…

用CSS画一条0.5px的线

上次面试前端被问到了这个问题,感觉有点懵懵的,我就回答了一个scaleY(0.5),这个是真的没想到,希望有需要的朋友可以去看看。随便记住一种就行。 1.第一种方式:通过缩放1px的线条实现视觉上的0.5px效果,兼容性较好。 …