
DeepSeek 提供兼容 OpenAI 的 API 接口,因此可直接使用 openai Python 库。首先获取 API Key(从 DeepSeek 平台申请),并设置环境变量。
pip install openai requests langchain chromadb
export DEEPSEEK_API_KEY="sk-xxx"基础调用代码:
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1" # DeepSeek 官方端点
)
response = client.chat.completions.create(
model="deepseek-chat", # 或 deepseek-reasoner(推理模型)
messages=[{"role": "user", "content": "请用 Python 实现快速排序"}],
temperature=0.3,
max_tokens=2048
)
print(response.choices[0].message.content)DeepSeek 的 deepseek-chat 模型已具备强大的指令遵循能力,且支持 JSON 模式(通过 response_format 参数)和 流式输出,为生产级应用打下基础。
在 Web 或移动端应用中,流式输出能显著提升用户体验。我们封装一个支持多轮对话的会话类,并实现流式生成。
class DeepSeekSession:
def __init__(self, system_prompt=None):
self.messages = []
if system_prompt:
self.messages.append({"role": "system", "content": system_prompt})
def add_user(self, content):
self.messages.append({"role": "user", "content": content})
def add_assistant(self, content):
self.messages.append({"role": "assistant", "content": content})
def stream_chat(self, **kwargs):
"""流式生成,返回生成器"""
stream = client.chat.completions.create(
model="deepseek-chat",
messages=self.messages,
stream=True,
**kwargs
)
for chunk in stream:
if chunk.choices[0].delta.content:
yield chunk.choices[0].delta.content
# 使用示例
session = DeepSeekSession("你是一名 Python 助手,回答需附带代码示例。")
session.add_user("如何读取 CSV 文件并统计缺失值?")
for token in session.stream_chat():
print(token, end="", flush=True)该会话类自动维护历史消息,支持流式逐字输出,适合集成到 FastAPI 的 SSE(Server-Sent Events)接口中。
DeepSeek 支持 OpenAI 兼容的函数调用,可使模型主动触发外部 API。我们实现一个“实时天气查询”工具,模型根据用户问题决定是否调用。
首先定义工具 Schema:
tools = [{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如 Beijing"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}
}
}]
def get_current_weather(city, unit="celsius"):
# 模拟真实 API 调用,实际可接入和风天气等
return f"{city} 当前气温 22°C,晴间多云"发起带工具调用的请求:
def chat_with_tools(user_query):
messages = [{"role": "user", "content": user_query}]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools,
tool_choice="auto" # 让模型自主决定
)
msg = response.choices[0].message
if msg.tool_calls:
# 执行工具调用
for tc in msg.tool_calls:
if tc.function.name == "get_current_weather":
args = json.loads(tc.function.arguments)
result = get_current_weather(args["city"], args.get("unit", "celsius"))
# 将工具结果返回给模型
messages.append(msg) # 助手消息(含工具调用)
messages.append({
"role": "tool",
"tool_call_id": tc.id,
"content": result
})
# 获取最终回答
final = client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
return final.choices[0].message.content
else:
return msg.content
print(chat_with_tools("北京今天天气怎么样?"))
# 输出:北京当前气温 22°C,晴间多云该模式可扩展至数据库查询、邮件发送等任意业务 API,实现 Agent 雏形。
DeepSeek 超长上下文虽能容纳全书,但结合向量检索可精准定位相关信息,降低成本。我们使用 LangChain + Chroma 构建简易 RAG。
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
# 1. 加载并切分文档
loader = TextLoader("product_manual.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 2. 生成向量库(使用开源嵌入模型)
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh")
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")
# 3. 检索 + 生成
def rag_query(query):
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
docs = retriever.invoke(query)
context = "\n\n".join([doc.page_content for doc in docs])
prompt = f"""基于以下资料回答用户问题,若无法从资料中找到答案则说明。
资料:{context}
问题:{query}
回答:"""
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
temperature=0.1
)
return response.choices[0].message.content
print(rag_query("产品的保修政策是什么?"))此方案完全本地化嵌入,不依赖第三方 API,且 DeepSeek 的 1M 上下文可进一步将检索结果直接拼接,无需复杂压缩。
httpx.AsyncClient 配合 asyncio 实现高并发请求,避免阻塞。tiktoken 预估请求量,合理设置 max_tokens 防止浪费。本文从零开始,逐步展示了 DeepSeek 应用开发的核心环节:基础调用、流式会话、函数调用和 RAG 系统构建。DeepSeek 的高性能与开放接口使得开发者能以极低成本构建生产级 AI 应用。未来,结合 DeepSeek 的推理模型(deepseek-reasoner)还可实现复杂逻辑的逐步求解,进一步拓展应用边界。所有代码均经过本地测试,可直接裁剪复用。期待你在此基础上创造出更具价值的智能应用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。