OpenAI SDK — 不再重复造轮子

既然聊到了ai,那么这个头图其实也是 ai 换脸得来的,也用 ai 的图片吧,毕竟自己拍的写真的存货已经不多了没了。而鉴于现在这个温度,的确是不像去拍外景,怕拍完了就冻死在外面了。

与哪吒一样,这个春节热度飙升的在 ai 领域无疑就是 deepseek 了。自己最开始接触 deepseek 也是因为超便宜的价格,所以在很早之前就在用这个东西里,各种聊天记录可以看到很多基础问题,但是给的答案嘛,个人感觉并没有比其他的 ai 高很多,可以使用 duckduckgo 的免费 ai 聚合:https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1

在节前另外一次出圈,应该是雷军挖了 deepseek 的自然语言专家罗福莉。当时还大概看了下这个姐妹的研究内容和方向。

等到了过年的时候deepseek 就成了碾压 chatgpt 之类的存在,到处都是他的新闻和消息。为此也有一群人开始出来蹭热度,四分之一个世界过去了,这个变化并不大,从之前的 bbs 转到了短视频平台。各种所谓的红客、ddos 、华为之类的假新闻和消息开始到处转发,甚至连周鸿祎都要出来蹭一波热度,如果仔细看过年期间 deepseek 的前端人机验证工具其实用的 cf 的。

甚至所谓的这些官方媒体都无脑转发这些乱七八糟的假消息。

至于我为什么要现在提这个东西,是因为放假的时候同事说可以试试 deepseek 的合同解析功能,可以识别里面的各种信息。按照他发的图,看了下,大约的确是可以的,然而,问题的关键在于 deepseek 的 sdk 并没有实现相关文件上传的方法。

说到 sdk,这里不得不说的是,在 ai 领域的 sdk 开发中,终于避免了重复造轮子的问题。多数都是 openai sdk 兼容的,只需要替换服务器地址和密钥即可。

DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。

PARAM VALUE
base_url * https://api.deepseek.com
api_key apply for an API key

* 出于与 OpenAI 兼容考虑,您也可以将 base_url 设置为 https://api.deepseek.com/v1 来使用,但注意,此处 v1 与模型版本无关。

deepseek-chat 模型已全面升级为 DeepSeek-V3,接口不变。 通过指定 model='deepseek-chat' 即可调用 DeepSeek-V3。

deepseek-reasoner 是 DeepSeek 最新推出的推理模型 DeepSeek-R1。通过指定 model='deepseek-reasoner',即可调用 DeepSeek-R1。

以上是 deepseek 文档的内容,基于 openai sdk 的方法实现文件上传:

from openai import OpenAI
client = OpenAI(api_key=ak, base_url="https://api.deepseek.com")
response1 = client.files.create(file=open("../baidu_ocr_tools/test_data/contract.pdf", "rb"), purpose="batch")

执行后会得到下面的错误提示:

openai.NotFoundError: Error code: 404 - {'event_id': '30-inst-179-20250208132511-263a5c3c', 'error_msg': 'Not Found. Please check the configuration.'}y

也就是说 deepseek 没有实现文件上传的后端接口,但是聊天界面却是可以的。

既然 web 页面可以,那么就可以使用另外的方法:通过调用 web端的接口实现文件上传,要找接口也简单:

一个 upload 接口即可,然而,这个接口拿到之后,用相关的参数进行模拟,不管是代码提交还是 postman 提交,都得到了同样的错误,文件状态 pending,这个和 web 端一致:

然而获取文件信息的时候却是 failed,而 web 页面却是正常的:

同样的数据,重复提交也会失败,这就很神奇,当然,可能的问题出在header 中的x-ds-pow-response:

eyJhbGdvcml0aG0iOiJEZWVwU2Vla0hhc2hWMSIsImNoYWxsZW5nZSI6IjdmMThjNTQzMzZkNjM1YWFkODljOGMxZDE4YmMwNTk1M2MxZjY2N2ZhM2FiZDMyMmJiYTdhZDQwOWZhNDI5NzkiLCJzYWx0IjoiNzRhOWE1ZTdhM2YxNDU3NTdmNGUiLCJhbnN3ZXIiOjEyNjczMCwic2lnbmF0dXJlIjoiNWE3ZWQ1MzdjNjQ0OTY2Nzg3Yjk1Y2ZlNGU4NDc5YTAzYWYyMmFkNjA3MWMxMGU2YWQ3ZjZkZjAxMGM5NTZmMiIsInRhcmdldF9wYXRoIjoiL2FwaS92MC9maWxlL3VwbG9hZF9maWxlIn0

 

base64 decode后是:

{"algorithm":"DeepSeekHashV1","challenge":"7f18c54336d635aad89c8c1d18bc05953c1f667fa3abd322bba7ad409fa42979","salt":"74a9a5e7a3f145757f4e","answer":126730,"signature":"5a7ed537c644966787b95cfe4e8479a03af22ad6071c10e6ad7f6df010c956f2","target_path":"/api/v0/file/upload_file"}

算法写了DeepSeekHashV1,但是怎么实现的不知道,要去还原这个耗费太多精力,感觉不怎么值。另外 api 还有速率限制,所以可行性也不大高。

github 上有个代码也是基于 web 端的 api,

https://github.com/Cunninger/ocr-based-deepseek/blob/main/src/main/java/cn/yam/ocrbaseddeepseek/controller/OCRController.java

我没尝试,但是根据自己的经验,貌似行不通。

那么初次之外还有别的 ai 吗?

后来发现 kimi 的 api,同样是 opensdk 兼容的,并且实现了文件上传方法:

Kimi API 兼容了 OpenAI 的接口规范,你可以使用 OpenAI 提供的 Python(opens in a new tab) 或 NodeJS(opens in a new tab) SDK 来调用和使用 Kimi 大模型,这意味着如果你的应用和服务基于 openai 的模型进行开发,那么只需要将 base_url 和 api_key 替换成 Kimi 大模型的配置,即可无缝将你的应用和服务迁移至使用 Kimi 大模型

示例代码测试:

from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key = "sk-9naV7ApT*********",
    base_url = "https://api.moonshot.cn/v1",
)

# xlnet.pdf 是一个示例文件, 我们支持 pdf, doc 以及图片等格式, 对于图片和 pdf 文件,提供 ocr 相关能力
file_object = client.files.create(file=Path("../baidu_ocr_tools/test_data/contract.pdf"), purpose="file-extract")

# 获取结果
# file_content = client.files.retrieve_content(file_id=file_object.id)
# 注意,之前 retrieve_content api 在最新版本标记了 warning, 可以用下面这行代替
# 如果是旧版本,可以用 retrieve_content
file_content = client.files.content(file_id=file_object.id).text

# 把它放进请求中
messages = [
    {
        "role": "system",
        "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。",
    },
    {
        "role": "system",
        "content": file_content,
    },
    {"role": "user", "content": "解析contract.pdf文件, 获取签订双方的信息,户号,公司名称等,解析的数据以 json 格式返回。"},
]

# 然后调用 chat-completion, 获取 Kimi 的回答
completion = client.chat.completions.create(
  model="moonshot-v1-32k",
  messages=messages,
  temperature=0.3,
)

print(completion.choices[0].message)

执行结果:

这个结果自然还可以继续优化,或者调整提示词。但是最起码对于 openai sdk 的后端支撑是足够的。

这个世界毕竟是充满了人云亦云缺乏判断力的乌合之众,而稍微有点成绩很可能的结果就是被捧杀。稍微有点成绩就遥遥领先。

说实话,现在我看到遥遥领先这四个字都开始反胃了!

附,清华大学《deepseek 从入门到精通》:

https://scc.ustc.edu.cn/_upload/article/files/bd/11/edc7c00b4726b6f09c82d41cb3d5/7fed3cfc-7ff4-40cd-8762-e5e62913d6b8.pdf

 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://obaby.org.cn/
* 个性:https://oba.by/
* 本文标题: 《OpenAI SDK — 不再重复造轮子》
* 本文链接:https://obaby.org.cn/2025/02/19153
* 短链接:https://oba.by/?p=19153
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

41 comments

  1. Level 2
    Microsoft Edge 132 Microsoft Edge 132 Windows 11 Windows 11 cn中国–上海–上海–普陀区 电信

    前两天也看到 B 站上有人打假快手上“主持人小*妹”,说这个人的视频就是蹭热度。https://www.bilibili.com/video/BV1t6PXecEcR?t=4.2
    造谣带节奏,此为可耻行为。

    1. 公主 Queen 
      Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      很多所谓的 up 主也缺乏信息安全常识,隔行如隔山。
      看到这些转发,真的是尬死。

  2. Level 4
    Google Chrome 101 Google Chrome 101 Windows 10 Windows 10 cn中国–湖北–武汉 电信

    deepseek这段时间用起来感觉挺好的,不过和openai一起结合着用,效果加倍

    1. 公主 Queen 
      Google Chrome 130 Google Chrome 130 Android 10 Android 10 cn中国–山东–青岛 联通

      还是缺点东西 自己部署的有文件上传接口吗?

      1. Level 6
        Google Chrome 109 Google Chrome 109 Windows 10 Windows 10 cn中国–上海–上海 腾讯云

        我可不管,灵妹妹负责美就对了。

  3. Level 4
    Google Chrome 131 Google Chrome 131 Windows 10 Windows 10 cn中国–香港 Cogent

    最近人工智能ai 软件板块涨的挺多的。
    好多都没关系的都涨了。
    政策的力量。

    1. 公主 Queen 
      Google Chrome 130 Google Chrome 130 Android 10 Android 10 cn中国–山东–青岛 联通

      没买股票 倒是没关注这些
      新一波泡沫而已

  4.  Level 6
    Google Chrome 131 Google Chrome 131 Mac OS X 10.15 Mac OS X 10.15 cn中国–香港 Cloudie_Limited

    为啥不用统一的接口啊,比如 OpenRouter或者SiliconFlow这些。直接一个api,使用所有的网站,克金就行。一个个接口弄,太麻烦了。

    1. 公主 Queen 
      Google Chrome 130 Google Chrome 130 Android 10 Android 10 cn中国–山东–青岛 联通

      基于open ai得sdk已经算是进步了,换下服务器地址密钥就可以兼容不同模型
      不过兼容性有的做的差了点

      1.  Level 6
        Google Chrome 107 Google Chrome 107 Android 15 Android 15 cn中国–北京–北京 移动

        O姐你 下面这句话的长地址溢出屏幕了,移动端自适应被打破了,应该是格式化不充分。github 上有个代码也是基于 web 端的 api

        1. 公主 Queen 
          Google Chrome 130 Google Chrome 130 Android 10 Android 10 cn中国–山东–青岛 联通

          我这里正常啊
          看了个代码 感觉也不靠谱

          1.  Level 6
            Google Chrome 107 Google Chrome 107 Android 15 Android 15 cn中国–北京–北京 移动

            我是手机端谷歌浏览器看的,github后面的地址溢出了。可能是浏览器版本问题。

  5. Level 5
    Google Chrome 132 Google Chrome 132 Windows 11 Windows 11 cn中国–四川–成都 联通

    deepseek或许并没有很神,中国人太喜欢捧杀,稍微有点成就就会高潮!

  6. Level 2
    Google Chrome 118 Google Chrome 118 Android 14 Android 14 cn中国–湖北–武汉 移动

    1. 遥遥领先最开始就是华为的余承东营销的吧!?

    2. 不过这波红客保卫deepseek事件,我是真当真了。实在没想到这么多新闻机构,能在这样的事情上造谣。还真是一群乌合之众!娱乐至死!

    3. 最后期待美丽又硬核的灵妹子出一篇中美对账的真实情况对比。

    1. 公主 Queen 
      Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      1.是的,鸿蒙智行的汽车广告语
      2.都是博眼球的,没有例外
      3.这个有些难度,哈哈哈。因为我也不了解真实情况啊

  7. Level 5
    Google Chrome 133 Google Chrome 133 Windows 10 Windows 10 cn中国–陕西–宝鸡–岐山县 联通

    为啥我用deepseek的图片上传,他好像只有一个最简单的OCR功能,并不能识别其他的东西

  8. Level 4
    Google Chrome 133 Google Chrome 133 Mac OS X 10.15 Mac OS X 10.15 cn中国–湖北–武汉 电信

    Deepseek 不支持视觉识别、没有 Audio 模型、没有 Embedding。Deepseek 会爆火的原因不是因为他多厉害多聪明,而是推翻了「唯算力论」,给了水份巨高的美股市场一个做空的理由。

  9.  Level 6
    IBrowse r IBrowse r Android 12 Android 12 cn中国–河南–漯河 联通

    DS火出圈儿我由衷为它高兴,但是对于普通用户来讲,哪个能连上服务器我用哪个。

    1. 公主 Queen 
      Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      用户的初衷是找个靠谱稳定的服务,而不是为公司站台,这不是用户的责任。好用的可以宣传,但是没必要神话。

  10. Level 3
    Google Chrome 127 Google Chrome 127 GNU/Linux GNU/Linux cn中国–贵州–贵阳 移动

    昨天我看到一个新闻 说是Ai COM已经重定向到deepseek了 不得不说是真的牛啊 但就目前来说还是Chat gpt更好用😎

    1. 公主 Queen 
      Google Chrome 130 Google Chrome 130 Android 10 Android 10 cn中国–山东–青岛 联通

      哈哈哈 不属于电力 我是做软件的 嘻嘻😁

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注