
C# 與 Windows API 交互的“秘密武器”:結構體和聯合體
在開始開發微信小程序與騰訊云DeepSeek API的對接之前,我們需要做好必要的環境準備工作。本章將指導你完成開發環境的搭建,包括安裝最新版本的微信開發者工具(IDE),配置小程序的基本信息,如果你習慣于wxml語法的開發,本教程中也會有關于
騰訊云AI代碼助手插件
的安裝,需要注意的是本教程對于
騰訊云AI代碼助手插件
僅停留在安裝的這一步驟,因為我還是習慣于uniapp的使用。讓我們按照以下步驟,一步步完成開發環境的準備工作。
?注意:第一次使用微信開發者工具時,第一步并不是下載微信開發者工具哦! 而是前往小程序后臺, 進行注冊并完成小程序開發者認證,這一內容本篇不會詳細講解。關于:微信開發者工具,我們需要點鏈接選擇符合自己電腦版本的ide進行下載。
下載完成之后按照提示進行安裝即可。
當開發工具安裝完成之后,我們首先創建一個空的項目模板如下圖所示。
?騰訊云AI代碼助手現已完全集成到微信開發者工具中,配置過程變得更加簡便。具體步驟如下:
如上圖所示三步幫你安裝騰訊云AI代碼助手點擊圖中所示的
1
(擴展)。在
2
(輸入框)中輸入
騰訊云
即可點擊
3
(安裝),等待安裝完成之后我們就可以體驗啦如下所示,騰訊AI代碼助手目前已整合了
tencent-deepseek R1
模型。開發者可以盡情的體驗
tencent-deepseek R1
模型帶來的便捷開發體驗了嘍~~
?溫馨提示:由于本人習慣于uniapp 項目的開發因此本項目使用的是uniapp來打包運行我們的小程序項目UI界面如下圖所示:
我們的UI界面設計簡潔,主要包含以下四個核心組件:
公眾號
,
小紅書
等類型,來決定文案生成的類型。
運行效果圖如下
下面是騰訊云DeepSeek API最新計費標準,注意自己的token使用哦!
????騰訊云DeepSeek API 最新計費標準???生效時間:2025年2月26日 0時起 DeepSeek 模型價格表[表格]???詳細文檔: 騰訊云DeepSeek API調用指南
關于 DeepSeek API 接口的相關文檔可以點擊鏈接進行查看,接下來我們將逐步實現如何配置騰訊云DeepSeek為我們接下來的開發作準備。
創建API KEY
API 使用前提是需要用于一個API KEY,訪問地址: (https://console.cloud.tencent.com/lkeap/api) 來創建我們的API KEY 如下圖所示,點擊按鈕
創建API KEY
即可,點擊查看時可以看到已經創建的
API KEY
編寫py代碼進行本地請求我這里用的是
Flask
框架,為我們小程序調用DeepSeek API提供接口服務,代碼如下:
import os
import logging
from flask import Flask, request, jsonify
from flask_cors import CORS
from openai import OpenAI
from typing import Dict, Any
# 初始化Flask應用
app = Flask(__name__)
CORS(app) ?# 啟用跨域支持
# 配置日志記錄
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# 環境變量配置
OPENAI_CONFIG = {
? ? "api_key": os.getenv("OPENAI_API_KEY", "sk-pXLyNnk8bdl8zkmFkBIi7KBRiaLTATlmGsr8QfTwek7Zawfk"),
? ? "base_url": os.getenv("OPENAI_BASE_URL", "https://api.lkeap.cloud.tencent.com/v1")
}
# 初始化OpenAI客戶端
client = OpenAI(**OPENAI_CONFIG)
def validate_request(data: Dict[str, Any]) -> tuple:
? ? """請求參數驗證"""
? ? if not data.get('content'):
? ? ? ? logger.warning("Missing content parameter")
? ? ? ? return False, "Content parameter is required"
? ? if len(data['content']) > 1000:
? ? ? ? logger.warning("Content length exceeds limit")
? ? ? ? return False, "Content exceeds maximum length of 1000 characters"
? ? return True, ""
def process_stream_response(stream) -> dict:
? ? """處理流式響應數據"""
? ? result = {"reasoning_content": "", "answer_content": ""}
? ? for chunk in stream:
? ? ? ? if not chunk.choices:
? ? ? ? ? ? continue
? ? ? ? delta = chunk.choices[0].delta
? ? ? ? # 使用getattr安全獲取屬性
? ? ? ? if reasoning := getattr(delta, 'reasoningcontent', None):
? ? ? ? ? ? result["reasoning_content"] += reasoning
? ? ? ? if content := getattr(delta, 'content', None):
? ? ? ? ? ? result["answer_content"] += content
? ? return result
@app.route('/deepseekapi', methods=['POST'])
def generate_content():
? ? """
? ? 處理生成請求
? ? ---
? ? parameters:
? ? ? - name: body
? ? ? ? in: body
? ? ? ? required: true
? ? ? ? schema:
? ? ? ? ? type: object
? ? ? ? ? properties:
? ? ? ? ? ? content:
? ? ? ? ? ? ? type: string
? ? responses:
? ? ? 200:
? ? ? ? description: 生成結果
? ? ? 400:
? ? ? ? description: 無效請求
? ? ? 500:
? ? ? ? description: 服務器錯誤
? ? """
? ? # 請求驗證
? ? data = request.get_json()
? ? print(data)
? ? is_valid, message = validate_request(data)
? ? if not is_valid:
? ? ? ? return jsonify({"error": message}), 400
? ? try:
? ? ? ? # 創建流式請求
? ? ? ? stream = client.chat.completions.create(
? ? ? ? ? ? model="deepseek-r1",
? ? ? ? ? ? messages=[{"role": "user", "content": data['content']}],
? ? ? ? ? ? stream=True,
? ? ? ? ? ? temperature=0.7, ?# 添加生成參數
? ? ? ? ? ? max_tokens=1000
? ? ? ? )
? ? ? ? # 處理流式響應
? ? ? ? processed_data = process_stream_response(stream)
? ? ? ? # 結果后處理
? ? ? ? processed_data["answer_content"] = processed_data["answer_content"].strip()
? ? ? ? return jsonify(processed_data)
? ? except Exception as e:
? ? ? ? logger.error(f"API請求失敗: {str(e)}", exc_info=True)
? ? ? ? return jsonify({"error": "服務暫時不可用,請稍后再試"}), 500
if __name__ == "__main__":
? ? app.run(
? ? ? ? host=os.getenv("FLASK_HOST", "0.0.0.0"),
? ? ? ? port=int(os.getenv("FLASK_PORT", 5001)),
? ? ? ? debug=os.getenv("FLASK_DEBUG", "false").lower() == "true"
? ? )
驗證我們的
Flask
框架暴露出來的請求信息如下:
curl --location --request POST 'http://192.168.31.134:5001/deepseekapi'
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)'
--header 'Content-Type: application/json'
--header 'Accept: */*'
--header 'Host: 192.168.31.134:5001'
--header 'Connection: keep-alive'
--data-raw '{ content: "請根據以下內容生成500字小紅書種草文案:?關鍵詞:三亞,海邊,游泳,拍照?"}'
我們通過postman來測試其連通性,如下圖所示運行服務
postman 數據返回
postman 接口配置示例
我們輸入的
content
內容是:
請根據以下內容生成500字小紅書種草文案:?關鍵詞:三亞,海邊,游泳,拍照?
發送請求查看結果。此時我們的DeepSeek接口的本地調用就已經完成了。整體來說整個過程還是蠻絲滑的,接下來我們分析一下如何實現小程序的對接。
? ?
? ? ? ? <!-- ?
? ? ? ? ? ?
? ? ? ? -->
? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ?
tip:
關于注釋地方會在最下面的附錄項進行講解說明
startGenerate() {
? ? ? ? ? ? // 1. 判斷用戶是否上傳圖片或輸入關鍵詞
? ? ? ? ? ? if (!this.textArea) {
? ? ? ? ? ? ? ? uni.showToast({
? ? ? ? ? ? ? ? ? ? title: "請輸入關鍵詞",
? ? ? ? ? ? ? ? ? ? icon: "none",
? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? // 2. 配置prompt提示詞
? ? ? ? ? ? let prompt = 請根據以下內容生成500字${this.typeText}文案:n
;
? ? ? ? ? ? // 添加關鍵詞內容
? ? ? ? ? ? if (this.textArea) {
? ? ? ? ? ? ? ? prompt += 關鍵詞:${this.textArea}n
;
? ? ? ? ? ? }
? ? ? ? ? ? // 添加圖片信息
? ? ? ? ? ? // if (this.fileList.length > 0) {
? ? ? ? ? ? // ? ? prompt += ${this.fileList[0].url}n
;
? ? ? ? ? ? // }
? ? ? ? ? ? // 3. 設置加載狀態
? ? ? ? ? ? this.loading = true;
? ? ? ? ? ? // 4. 接口調用
? ? ? ? ? ? request({
? ? ? ? ? ? ? ? url: "/deepseekapi",
? ? ? ? ? ? ? ? method: "POST",
? ? ? ? ? ? ? ? data: {
? ? ? ? ? ? ? ? ? ? content: prompt,
? ? ? ? ? ? ? ? },
? ? ? ? ? ? })
? ? ? ? ? ? ? ? .then((res) => {
? ? ? ? ? ? ? ? ? ? console.log("生成成功:", res);
? ? ? ? ? ? ? ? ? ? this.loading = false;
? ? ? ? ? ? ? ? ? ? this.resultText =
? ? ? ? ? ? ? ? ? ? ? ? res.answer_content || "文案生成失敗,請稍后重試...";
? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? .catch((err) => {
? ? ? ? ? ? ? ? ? ? console.error("生成失敗:", err);
? ? ? ? ? ? ? ? ? ? this.loading = false;
? ? ? ? ? ? ? ? });
? ? ? ? },
此處我們主要實現的事對于提示詞的拼接,然后進行接口的調用, 需要注意的是,我進行的提示詞拼接可能并不是最完美的,具體應用到業務層時還需要微調哦!!
效果演示如下圖所示:
該小程序其實最初的設計是有個圖片識別功能,通過識別圖片來生成對應的文案,但是目前如果僅使用
騰訊云DeepSeek API
是無法實現該功能的,需要結合
大模型知識引擎
中的 (https://cloud.tencent.com/document/product/1759/107908) 的接口,通過識別圖片內容之后再次調用
騰訊云DeepSeek API
來獲取對應的文案。
通過本教程,開發者可以快速搭建一個基于騰訊云DeepSeek API的文案生成小程序,為內容創作提供AI助手支持。后續還可以擴展更多功能,如圖片識別等高級特性,進一步提升應用的實用性。
uniapp
源碼訪問地址 : (https://gitcode.com/qq_33681891/txDeepseek)
原文轉載自:https://mp.weixin.qq.com/s/1-qY9DWC4Lw2DpJ_OloHnw