从零到一:用DeepSeek API构建你的专属智能问答系统(附完整代码)

📅 2026/7/9 13:00:21
从零到一:用DeepSeek API构建你的专属智能问答系统(附完整代码)
引言2023年以来大语言模型如同“数字大脑”走进日常开发但在实际落地时很多朋友仍停留在聊天界面浅尝辄止。如何将大模型无缝接入自己的项目打造一个真正可用的智能问答系统依然是不少开发者面临的挑战。今天我们以性价比极为突出的DeepSeek为例从调用API到实现完整的命令行问答机器人一步步写出生产可用的代码。无论你是想给内部知识库配上自然语言接口还是希望在自己的应用中集成智能对话能力这篇文章都能帮你迈出扎实的第一步。一、核心概念用大模型构建问答系统传统的问答系统依赖规则、关键词匹配或人工整理的FAQ维护成本高且理解能力弱。而基于大语言模型的方式只需提供提示词Prompt和对话历史Messages即可获得高质量回答。一个典型的智能问答交互流程可以抽象为接收用户输入构造请求体包含系统指令、历史消息、当前问题调用大模型API解析返回结果并展示将本轮对话追加到历史中以便下一轮继续其中最关键的是如何调用API以及如何管理对话上下文。DeepSeek提供了完全兼容OpenAI接口格式的API这意味着我们可以直接使用官方Python库openai来调用DeepSeek的模型只需修改base_url和api_key即可。二、准备工作在开始编码之前请确保你拥有 DeepSeek 的 API 密钥。你可以登录 DeepSeek 开放平台 注册账号并创建 API Key。新用户一般会获得一定额度的免费调用量足够完成本教程的实验。本教程基于 Python 3.8 开发依赖openai库版本≥1.0.0。执行以下命令安装pip install openai我们将所有代码组织在单个 Python 文件中方便你直接复制运行。三、实战从单轮问答到多轮对话机器人我们将分步骤实现两个版本基础单次问答和具备记忆的多轮对话系统并加入友好的流式输出效果。3.1 基础调用向 DeepSeek 提问先编写一个最简单的函数用来向 DeepSeek 发送一个问题并获取答案。这里我们使用deepseek-chat模型它是性价比极高的对话模型适合大多场景。import os from openai import OpenAI # 配置 API 相关信息 client OpenAI( api_keyyour-deepseek-api-key, # 替换为你的真实 API Key base_urlhttps://api.deepseek.com ) def ask_deepseek(question: str) - str: 发送单轮问题到 DeepSeek返回回答内容 response client.chat.completions.create( modeldeepseek-chat, messages[ {role: user, content: question} ], temperature0.7, # 控制创造性0-2之间越大越随机 max_tokens1024 # 限制回答最长长度 ) # 提取回答内容 answer response.choices[0].message.content return answer if __name__ __main__: # 简单测试 question 请用Python写一个快速排序算法 print(问题, question) print(回答, ask_deepseek(question))运行这段代码你就能在终端看到模型的回答。虽然只有短短几行但它已经是一个最简问答系统。不过这种方式每次都是“一次性的”模型记不住你之前说过什么无法进行连续对话。3.2 多轮对话让系统记住上下文要实现多轮对话我们需要在messages中维护完整的对话历史。每一轮都将用户的提问和模型的回答加入消息列表下一次请求时携带全部历史消息。下面我们构建一个ChatBot类封装多轮对话逻辑并支持流式输出类似 ChatGPT 逐字弹出的效果。import os from openai import OpenAI class DeepSeekChatBot: def __init__(self, api_key: str, system_prompt: str ): 初始化聊天机器人 :param api_key: DeepSeek API 密钥 :param system_prompt: 系统级提示词定义机器人的角色和行为 self.client OpenAI(api_keyapi_key, base_urlhttps://api.deepseek.com) # 对话历史如果提供了系统提示词作为第一条消息 self.messages [] if system_prompt: self.messages.append({role: system, content: system_prompt}) def ask(self, user_input: str, stream: bool True) - str: 发送用户消息并获得回答 :param user_input: 用户输入文本 :param stream: 是否使用流式输出 :return: 模型回答的完整文本 # 将用户消息加入历史 self.messages.append({role: user, content: user_input}) if stream: # 流式请求 response_stream self.client.chat.completions.create( modeldeepseek-chat, messagesself.messages, temperature0.8, max_tokens2048, streamTrue ) print(助手: , end, flushTrue) collected_content for chunk in response_stream: if chunk.choices[0].delta.content: content_piece chunk.choices[0].delta.content print(content_piece, end, flushTrue) collected_content content_piece print() # 换行 # 将完整的助手回答加入历史 self.messages.append({role: assistant, content: collected_content}) return collected_content else: # 非流式请求 response self.client.chat.completions.create( modeldeepseek-chat, messagesself.messages, temperature0.8, max_tokens2048 ) answer response.choices[0].message.content print(f助手: {answer}) self.messages.append({role: assistant, content: answer}) return answer def clear_history(self): 清除对话历史保留系统提示词 self.messages self.messages[:1] if self.messages and self.messages[0][role] system else [] print(对话历史已清空。)这个DeepSeekChatBot类会将每次对话自动记录在self.messages中下次调用时模型就能“记得”之前的内容。此外流式输出代码对于用户体验提升很大尤其在回答较长的生成任务中。3.3 完整的命令行交互程序接下来我们写一个简单的命令行main函数让用户可以在终端中持续与机器人对话。同时加入一些实用指令比如清空历史、退出等。pythonimport osdef main():# 从环境变量读取 API Key更安全api_key os.getenv(DEEPSEEK_API_KEY)if not api_key:api_key input(请输入你的 DeepSeek API Key: ).strip()if not api_key:print(API Key 不能为空程序退出。)return# 定义一个有帮助且友好的系统提示词 system_prompt 你是一个知识渊博、耐心细致的智能助手。请用中文回答用户的问题并提供清晰、有用的信息。 bot DeepSeekChatBot(api_keyapi_key, system_promptsystem_prompt) print(