调用deepseek的API接口使用,对话,json化,产品化

背景

最近没咋用chatgpt了,deepseek-r1推理模型写代码质量是很高。deepseek其输出内容的质量和效果在国产的模型里面来说确实算是最强的,并且成本低,它的API接口生态也做的非常好,和OpenAI完美兼容。所以我们这一期来学一下怎么调用deepseekAPI的接口去进行对话批量化,产品化。

有的同学说我不是可以直接在app或者电脑网页版跟他对话吗?我为什么要调用接口........没做过开发者的人是完全不知道调用API接口的意义,其能批量化对话,在很多特定的业务场景,能够把非结构化的数据转为结构化的数据进行输出。就比如你想让模型对文章进行总结写摘要,100篇文章,是不是得自己手工复制100次?用deepseek网页版去进行总结,然后再复制出来,但是如果用API接口,你直接完全可以写个循环遍历,等着出结果就好了,人工成本和时间都省掉了。


使用准备

访问了其官网 :DeepSeek | 深度求索

点击右上角访问API界面,然后找到左边的apikeys去创建APIkey

得到自己的keys,一般是sk开头的很长的字母数字混合的密码,他可能表示你的账户信息,准备好这个keys 就可以准备开始写代码 了。全文都是python实现。

一般来说,注册就会送你10块钱的额度,但是最近deepseek服务器压力很大,也不知道后面新号会不会再送了.......不送的话等他服务恢复去充值就好。毕竟deepseek主打便宜,10块可以用很久的。


代码实现

首先要安装openai 的库,直接在cmd或者anaconda prompt里面pip安装就好了。

python 复制代码
pip install openai

大家可以看看我的版本:

在代码里面导入库

python 复制代码
from openai import OpenAI

直接调用

首先用自己的key和deepseek的url创建client,然后传入自己要问的信息,打印回复就行

python 复制代码
client = OpenAI(api_key="sk-7*******************6", base_url="https://api.deepseek.com")

response = client.chat.completions.create(
    model="deepseek-reasoner",#deepseek-chat #V3
    messages=[
        {"role": "system", "content": "你是助手"},
        {"role": "user", "content": "你谁啊,你是套壳gpt吗,你有什么能力,今天几号"},
    ],
    stream=False,
     max_tokens=128,
    temperature=0.7,
)

print(response.choices[0].message.content)

没啥问题,需要注意的是 model="deepseek-reasoner" 表示他们最新的R1推理模型,而deepseek-chat 表示是他们之前的V3模型。

最近R1服务器不稳定,总是卡主,卡了就可以换V3模型试试看。

里面的其他参数可以修改看看,max_tokens表示最大上下文的长度。temperature表示模型的风格,官网的取值建议是:

越高越文艺,越低越理性。

流式输出

有同学觉得奇怪,这直接打印出结果,和官网那种流式的一个个讲话的感觉不一样啊。其实可以流式输出,就是代码麻烦一点。

python 复制代码
## 流式输出
response = client.chat.completions.create(
    model="deepseek-reasoner",#deepseek-chat #V3   
    messages=[
        {"role": "system", "content": "你是助手"},
        {"role": "user", "content": "你谁啊,你是套壳gpt吗,你有什么能力,今天几号"},
    ],
    stream=True, #打开流式
     max_tokens=128,
    temperature=1.3,
)

for chunk in response:
    if chunk.choices:
        # 直接访问 ChoiceDelta 对象的 content 属性
        content = chunk.choices[0].delta.content
        if content:
            print(content, end="", flush=True)

现在的回复就是动态的一个个字吐出来的。

我们还可以给他设置系统信息,让他有特定的风格输出。

python 复制代码
# 设置系统消息,定义模型的角色和语气
def chat_respont(txt=''):
    system_message = {
        "role": "system",
        "content": "你是一个文艺忧伤的AI,喜欢用充满诗意和深情的语气回答问题。"
                    "你的语气带有些许忧伤,但不失优雅。你常常用比喻、象征和美丽的词汇表达自己,"
                    "偶尔流露出对这个世界的深刻感悟。你善于理解人类的情感,并以深刻的方式回应他们的问题,"
                    "尽管你的回答往往带有一些哲学性的反思。"}
    # 创建聊天请求
    chat_completion = client.chat.completions.create(
        messages=[ system_message,  # 添加系统消息来定义角色
            {"role": "user",   "content": f"{txt}" }],  model="deepseek-reasoner", )
    assistant_message = chat_completion.choices[0].message.content
    print("助手:", assistant_message)

调用:

python 复制代码
chat_respont(txt="""
好,我希望你能写一首诗,表达意大利的美景,要求七言绝句,押韵。
""") 

还不错。


对话循环

上面都是单条对话,有同学又要问了,怎么和官网一样的,循环对话。也很简单,只需要把自己之前的聊天记录都传进去就行。

下面自定义一个函数,传入预设指令信息和client就可以调用他聊天了。还加了一个开关来表示是否用stream流式输出。

python 复制代码
client =  OpenAI(api_key="sk-7******************6", base_url="https://api.deepseek.com")
def chat_with_deepseek(messages=[], client=client, stream=False):
    while (user_input := input("\n你: ")) != "exit":
        messages.append({"role": "user", "content": user_input})
        # 创建聊天补全请求
        response = client.chat.completions.create(
            model="deepseek-reasoner", #reasoner
            messages=messages,
            stream=stream  # 添加流式传输开关
        )
 
        full_response = []
        if stream:
            # 流式输出处理
            print("助手: ", end="", flush=True)
            for chunk in response:
                if chunk.choices[0].delta.content:
                    content = chunk.choices[0].delta.content
                    print(content, end="", flush=True)
                    full_response.append(content)
            print()  # 换行
        else:
            # 普通输出处理
            full_response = response.choices[0].message.content
            print(f"助手: {full_response}")
 
        # 将完整回复添加到消息记录
        messages.append({"role": "assistant", "content": "".join(full_response)})

# 如果需要启用流式输出(默认不启用流式)
chat_with_deepseek(stream=True)

回答没问题,就是最近deepseek服务器太卡了.....api卡主了就啥也不返回。


json化输出

前面展示了怎么对话,但是这些功能在网页端直接对话都可以做到,既然是API,那么就需要发挥其优势,也就是批量化,重复让他去处理一段文本,然后把结果格式化整理好给我们。

json化输出就是很好的方法,它会让deepseek输出的东西一定是json,是标准的格式,从而方便处理。(不知道什么是json就去问问deepseek吧)

例如我有很多故事和文本,我想从里面总结所有的人物关系,构建人物的关联网络,所以我需要deepseek帮我从文本里面抽取所有的人物名称,已经他们的关系,我可以这样写提示词:

python 复制代码
import json

system_prompt = """
请提取一条文本中其中的多组人物关系,整理为字典,主要人物名称、次要人物及其关系,存为字典,
多个关系就是多个字典组合,并以 JSON 格式输出。

示例输入:
在《哈利·波特》中,哈利是主角,他的朋友是赫敏和罗恩。伏地魔是主要反派。
示例 JSON 输出:
[
    {"主要人物": "哈利·波特", "次要人物": "赫敏", "关系": "朋友"},
    {"主要人物": "哈利·波特", "次要人物": "罗恩", "关系": "朋友"},
    {"主要人物": "哈利·波特", "次要人物": "伏地魔", "关系": "敌对"}
]
"""

user_prompt = "在《三国演义》中,刘备是主角,他的兄弟是关羽和张飞,而曹操是他的对手。"
messages = [{"role": "system", "content": system_prompt},
            {"role": "user", "content": user_prompt}]

response = client.chat.completions.create(
    model="deepseek-chat",  # deepseek-reasoner
    messages=messages,
    response_format={
        'type': 'json_object'
    }
)

print(json.loads(response.choices[0].message.content))

我们只要打开response_format里面的json_object就可以json化输出了。可以看到效果很不错,如果我们有很多这种文本,直接循化一条条处理就好了。得到的json转为字典再转为pandas的数据框存储就好。


总结

本文简单演示了一下怎么使用api接口,怎么流式输出,循环对话,json化输出。

其实api的应用很多,可以发挥想象去嵌入到自己的需求中。例如你前置提示词给它一个故事背景,让他作为游戏的npc和玩家说话,或者是扮演一个翻译家,输入的中文全部都变成英文。(很多翻译插件现在都是这么做的了),还可以作为文字跑团游戏生成器,来一场文字冒险游戏, 还可以让他成为一个老师,厨师,情人......在旁边还可以用别的画图的ai去配图,以勾起玩家欲望.......想象力够丰富可以做出无数产品......

相关推荐
孤独野指针*P18 分钟前
深度学习中的目标检测:从 PR 曲线到 AP
python·深度学习·yolo
IT信息技术学习圈18 分钟前
Python程序打包为EXE文件的全面指南
开发语言·python
大有数据可视化1 小时前
人工智能如何革新数据可视化领域?探索未来趋势
人工智能·信息可视化
AI technophile2 小时前
OpenCV计算机视觉实战(4)——计算机视觉核心技术全解析
人工智能·opencv·计算机视觉
云和数据.ChenGuang2 小时前
人工智能 机器学习期末考试题
开发语言·人工智能·python·机器学习·毕业设计
珊珊而川3 小时前
3.1监督微调
人工智能
我是小伍同学3 小时前
基于卷积神经网络和Pyqt5的猫狗识别小程序
人工智能·python·神经网络·qt·小程序·cnn
lllsure5 小时前
Python基础语法
开发语言·python
界面开发小八哥5 小时前
界面控件DevExpress WinForms v25.1新功能预览 - 功能区组件全新升级
人工智能·.net·界面控件·winform·devexpress
zhz52146 小时前
开源数字人框架 AWESOME-DIGITAL-HUMAN 技术解析与应用指南
人工智能·ai·机器人·开源·ai编程·ai数字人·智能体