[项目实践] Python 调用 DeepSeek API 完整指南

785 0
Honkers 2025-3-5 17:38:01 | 显示全部楼层 |阅读模式

简介

本文将详细介绍如何使用 Python 调用 DeepSeek API,实现流式对话并保存对话记录。相比 Go 版本,Python 实现更加简洁优雅,适合快速开发和原型验证。https://cloud.siliconflow.cn/i/vnCCfVaQ

1. 环境准备

1.1 依赖安装

  1. pip install requests
复制代码

1.2 项目结构

  1. deepseek-project/
  2. ├── main.py # 主程序
  3. └── conversation.txt # 对话记录文件
复制代码

2. 完整代码实现

  1. import os
  2. import json
  3. import time
  4. import requests
  5. from datetime import datetime
  6. def save_to_file(file, content, is_question=False):
  7. """保存对话内容到文件"""
  8. timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  9. if is_question:
  10. file.write(f"\n[{timestamp}] Question:\n{content}\n\n[{timestamp}] Answer:\n")
  11. else:
  12. file.write(content)
  13. def main():
  14. # 配置
  15. url = "https://api.siliconflow.cn/v1/chat/completions"
  16. headers = {
  17. "Content-Type": "application/json",
  18. "Authorization": "Bearer YOUR_API_KEY" # 替换为你的 API Key
  19. }
  20. # 打开文件用于保存对话
  21. with open("conversation.txt", "a", encoding="utf-8") as file:
  22. while True:
  23. # 获取用户输入
  24. question = input("\n请输入您的问题 (输入 q 退出): ").strip()
  25. if question.lower() == 'q':
  26. print("程序已退出")
  27. break
  28. # 保存问题
  29. save_to_file(file, question, is_question=True)
  30. # 准备请求数据
  31. data = {
  32. "model": "deepseek-ai/DeepSeek-V3",
  33. "messages": [
  34. {
  35. "role": "user",
  36. "content": question
  37. }
  38. ],
  39. "stream": True,
  40. "max_tokens": 2048,
  41. "temperature": 0.7,
  42. "top_p": 0.7,
  43. "top_k": 50,
  44. "frequency_penalty": 0.5,
  45. "n": 1,
  46. "response_format": {
  47. "type": "text"
  48. }
  49. }
  50. try:
  51. # 发送流式请求
  52. response = requests.post(url, json=data, headers=headers, stream=True)
  53. response.raise_for_status() # 检查响应状态
  54. # 处理流式响应
  55. for line in response.iter_lines():
  56. if line:
  57. line = line.decode('utf-8')
  58. if line.startswith('data: '):
  59. if line == 'data: [DONE]':
  60. continue
  61. try:
  62. content = json.loads(line[6:]) # 去掉 'data: ' 前缀
  63. if content['choices'][0]['delta'].get('content'):
  64. chunk = content['choices'][0]['delta']['content']
  65. print(chunk, end='', flush=True)
  66. file.write(chunk)
  67. file.flush()
  68. except json.JSONDecodeError:
  69. continue
  70. # 添加分隔符
  71. print("\n----------------------------------------")
  72. file.write("\n----------------------------------------\n")
  73. file.flush()
  74. except requests.RequestException as e:
  75. error_msg = f"请求错误: {str(e)}\n"
  76. print(error_msg)
  77. file.write(error_msg)
  78. file.flush()
  79. if __name__ == "__main__":
  80. main()
复制代码

3. 代码详解

3.1 核心功能

文件记录功能

save_to_file 函数负责:

  • 生成时间戳
  • 格式化保存问题和答案
  • 自动刷新文件缓冲区
API 配置
  1. headers = {
  2. "Content-Type": "application/json",
  3. "Authorization": "Bearer YOUR_API_KEY" # 替换为你的 API Key
  4. }
复制代码
流式请求处理

程序使用 requests 库的流式处理功能:

  • 使用 stream=True 启用流式传输
  • 逐行处理响应数据
  • 实时显示和保存内容

3.2 配置参数说明

API 请求参数:

  • model: 使用的模型名称
  • stream: 启用流式输出
  • max_tokens: 最大输出长度 (2048)
  • temperature: 控制随机性 (0.7)
  • top_p, top_k: 采样参数
  • frequency_penalty: 重复惩罚系数

4. 错误处理

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

  • 检查 HTTP 响应状态
  • 捕获网络异常
  • 处理 JSON 解析错误
  • 文件操作错误处理

5. 使用方法

5.1 修改配置

在代码中替换 YOUR_API_KEY 为你的实际 API Key。

5.2 运行程序

  1. python main.py
复制代码

5.3 交互方式

  1. 输入问题进行对话
  2. 输入 ‘q’ 退出程序
  3. 查看 conversation.txt 获取对话记录

6. 性能优化建议

  1. 文件操作

    • 使用适当的缓冲区大小
    • 定期刷新文件缓冲
    • 正确关闭文件句柄
  2. 网络请求

    • 设置适当的超时
    • 使用会话(Session)复用连接
    • 处理网络异常
  3. 内存管理

    • 及时释放资源
    • 避免大量数据积累
    • 使用生成器处理流式数据

总结

Python 版本的 DeepSeek API 调用实现简单直观,适合快速开发和测试。通过流式处理和文件记录,提供了完整的对话体验。

立即体验

现在就来体验 DeepSeek 的强大功能!

快来体验 DeepSeek:https://cloud.siliconflow.cn/i/vnCCfVaQ

快来体验 DeepSeek:https://cloud.siliconflow.cn/i/vnCCfVaQ

快来体验 DeepSeek:https://cloud.siliconflow.cn/i/vnCCfVaQ

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4008
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行