暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DeepSeek Step by Step(2)——构建本地交互应用

追梦IT人 2025-02-12
95

DeepSeek的迅速蹿红,也导致了目前收费的提升和服务质量的下降,同时随着DeepSeek的爆火和出圈、以及社区的完善和上手门槛的降低,大模型与普通人的距离也越来越近,对于IT人士而言可以不用钻研太多,但必须主动会用。

对我们而言,构建本地交互应用无非两种形式,工具或代码,主流的工具如Open WebUI和Chatbox AI;代码则包括以下几种方式(来自于deepseek的回答):方式 1,使用 Hugging Face Transformers 加载本地模型;方式 2,通过自定义 API 调用;方式 3,直接加载本地模型文件;方式 4,使用 ONNX 或 TensorRT 加速。关于自定义API调用又分为很多种方式,有基于flaskapi的,有基于flask、streamlit、gradio等。当然我们不可能每种都尝试,笔者也在慢慢摸索过程中,今天先简单介绍其中两种方式,api调用的只能等到下次了。

关于Chatbox AI
Chatbox AI 是一款 AI 客户端应用和智能助手,支持众多先进的 AI 模型和 API,可在 Windows、MacOS、Android、iOS、Linux 和网页版上使用。
https://chatboxai.app/zh
1、免费下载(for windows)
2、安装不必细说,直接跳到打开即可
3、点击设置
4、选择使用自己的API Key或本地模型
5、选择AI模型提供方,此处选择Ollama API
6、在API域名里输入之前在ollama设置的IP端口,此处为http://127.0.0.1:12345,并选择模型
7、尝试提问,和其他大模型一样,一旦涉及大百科之类的时候会一本正经的胡说八道
8、尝试提供,写代码
Chatbox AI的配置非常简单,基本几个步骤就完了,没什么可说的了。
关于代码,其实也比较简单,标准的ollama提供的API,基于主流的POST+json格式,属于二次封装接口,但不知道ollama的稳定性如何,如果稳定性不行只能考虑使用 Hugging Face Transformers 加载本地模型,再写接口或者直接对接模型。姑且认为ollama提供的API够健壮吧。

此处的代码是基础代码,后续无论是通过flask还是streamlit还是gradio,无非是前端呈现问题,对接口的调用、输入、输出是大同小异的。

  1. import requests
  2. import json

  3. # Ollama API 的地址
  4. url = "http://localhost:12345/api/generate"

  5. # 定义请求的数据
  6. #   model:指定要使用的模型名称,这里是 deepseek-r1:14b
  7. #   prompt:输入给模型的提示信息,即你想要询问的问题。
  8. #   stream:设置是否使用流式响应。
  9. #       如果设置为 True,模型会逐步返回结果;
  10. #       如果设置为 False,则会等待模型生成完整的结果后一次性返回。
  11. # 请求头:设置 Content-Type  application/json,表示请求数据是 JSON 格式。
  12. # 发送请求:使用 requests.post 方法发送 POST 请求,并将响应结果解析为 JSON 格式。
  13. # 处理响应:打印模型的回复,如果请求或解析过程中出现错误,会捕获相应的异常并输出错误信息。

  14. # 定义请求的数据
  15. content = {
  16.     "model": "deepseek-r1:14b",  # 模型名称
  17.     "prompt": "您好,写一篇3000字的射雕英雄后传小说",  # 输入的提示信息
  18.     "stream": True  # 是否使用流式响应
  19. }

  20. # 将数据转换为 JSON 格式
  21. contentjson = json.dumps(content)

  22. # 设置请求头
  23. headers = {"Content-Type": "application/json"}

  24. # 非流式输出
  25. if content["stream"] == False:
  26.     # 发送 POST 请求
  27.     try:
  28.         response = requests.post(url, headers=headers, data=contentjson)
  29.         # 检查响应状态码
  30.         response.raise_for_status()
  31.         result = response.json()
  32.         print(result["response"])  # 打印模型的回复
  33.     except requests.exceptions.RequestException as e:
  34.         print(f"请求出错: {e}")
  35.     except (KeyError, json.JSONDecodeError):
  36.         print("解析响应数据出错")
  37. # 流式输出
  38. else:
  39.     try:
  40.         response = requests.post(url, headers=headers, data=contentjson, stream=True)
  41.         response.raise_for_status()
  42.         for line in response.iter_lines():
  43.             if line:
  44.                 result = json.loads(line)
  45.                 if 'response' in result:
  46.                     print(result["response"], end='', flush=True)
  47.     except requests.exceptions.RequestException as e:
  48.         print(f"请求出错: {e}")
  49.     except (KeyError, json.JSONDecodeError):
  50.         print("解析响应数据出错")

最后输出如下,只要不涉及严谨的知识领域,看起来回答都还是不错的


最后欢迎关注公众号:python与大数据分析


文章转载自追梦IT人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论