
C# 與 Windows API 交互的“秘密武器”:結(jié)構(gòu)體和聯(lián)合體
在開始開發(fā)微信小程序與騰訊云DeepSeek API的對接之前,我們需要做好必要的環(huán)境準(zhǔn)備工作。本章將指導(dǎo)你完成開發(fā)環(huán)境的搭建,包括安裝最新版本的微信開發(fā)者工具(IDE),配置小程序的基本信息,如果你習(xí)慣于wxml語法的開發(fā),本教程中也會有關(guān)于
騰訊云AI代碼助手插件
的安裝,需要注意的是本教程對于
騰訊云AI代碼助手插件
僅停留在安裝的這一步驟,因?yàn)槲疫€是習(xí)慣于uniapp的使用。讓我們按照以下步驟,一步步完成開發(fā)環(huán)境的準(zhǔn)備工作。
?注意:第一次使用微信開發(fā)者工具時(shí),第一步并不是下載微信開發(fā)者工具哦! 而是前往小程序后臺, 進(jìn)行注冊并完成小程序開發(fā)者認(rèn)證,這一內(nèi)容本篇不會詳細(xì)講解。關(guān)于:微信開發(fā)者工具,我們需要點(diǎn)鏈接選擇符合自己電腦版本的ide進(jìn)行下載。
下載完成之后按照提示進(jìn)行安裝即可。
當(dāng)開發(fā)工具安裝完成之后,我們首先創(chuàng)建一個(gè)空的項(xiàng)目模板如下圖所示。
?騰訊云AI代碼助手現(xiàn)已完全集成到微信開發(fā)者工具中,配置過程變得更加簡便。具體步驟如下:
如上圖所示三步幫你安裝騰訊云AI代碼助手點(diǎn)擊圖中所示的
1
(擴(kuò)展)。在
2
(輸入框)中輸入
騰訊云
即可點(diǎn)擊
3
(安裝),等待安裝完成之后我們就可以體驗(yàn)啦如下所示,騰訊AI代碼助手目前已整合了
tencent-deepseek R1
模型。開發(fā)者可以盡情的體驗(yàn)
tencent-deepseek R1
模型帶來的便捷開發(fā)體驗(yàn)了嘍~~
?溫馨提示:由于本人習(xí)慣于uniapp 項(xiàng)目的開發(fā)因此本項(xiàng)目使用的是uniapp來打包運(yùn)行我們的小程序項(xiàng)目UI界面如下圖所示:
我們的UI界面設(shè)計(jì)簡潔,主要包含以下四個(gè)核心組件:
公眾號
,
小紅書
等類型,來決定文案生成的類型。
運(yùn)行效果圖如下
下面是騰訊云DeepSeek API最新計(jì)費(fèi)標(biāo)準(zhǔn),注意自己的token使用哦!
????騰訊云DeepSeek API 最新計(jì)費(fèi)標(biāo)準(zhǔn)???生效時(shí)間:2025年2月26日 0時(shí)起 DeepSeek 模型價(jià)格表[表格]???詳細(xì)文檔: 騰訊云DeepSeek API調(diào)用指南
關(guān)于 DeepSeek API 接口的相關(guān)文檔可以點(diǎn)擊鏈接進(jìn)行查看,接下來我們將逐步實(shí)現(xiàn)如何配置騰訊云DeepSeek為我們接下來的開發(fā)作準(zhǔn)備。
創(chuàng)建API KEY
API 使用前提是需要用于一個(gè)API KEY,訪問地址: (https://console.cloud.tencent.com/lkeap/api) 來創(chuàng)建我們的API KEY 如下圖所示,點(diǎn)擊按鈕
創(chuàng)建API KEY
即可,點(diǎn)擊查看時(shí)可以看到已經(jīng)創(chuàng)建的
API KEY
編寫py代碼進(jìn)行本地請求我這里用的是
Flask
框架,為我們小程序調(diào)用DeepSeek API提供接口服務(wù),代碼如下:
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應(yīng)用
app = Flask(__name__)
CORS(app) ?# 啟用跨域支持
# 配置日志記錄
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# 環(huán)境變量配置
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:
? ? """請求參數(shù)驗(yàn)證"""
? ? 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:
? ? """處理流式響應(yīng)數(shù)據(jù)"""
? ? 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: 生成結(jié)果
? ? ? 400:
? ? ? ? description: 無效請求
? ? ? 500:
? ? ? ? description: 服務(wù)器錯(cuò)誤
? ? """
? ? # 請求驗(yàn)證
? ? data = request.get_json()
? ? print(data)
? ? is_valid, message = validate_request(data)
? ? if not is_valid:
? ? ? ? return jsonify({"error": message}), 400
? ? try:
? ? ? ? # 創(chuàng)建流式請求
? ? ? ? stream = client.chat.completions.create(
? ? ? ? ? ? model="deepseek-r1",
? ? ? ? ? ? messages=[{"role": "user", "content": data['content']}],
? ? ? ? ? ? stream=True,
? ? ? ? ? ? temperature=0.7, ?# 添加生成參數(shù)
? ? ? ? ? ? max_tokens=1000
? ? ? ? )
? ? ? ? # 處理流式響應(yīng)
? ? ? ? processed_data = process_stream_response(stream)
? ? ? ? # 結(jié)果后處理
? ? ? ? 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": "服務(wù)暫時(shí)不可用,請稍后再試"}), 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"
? ? )
驗(yàn)證我們的
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: "請根據(jù)以下內(nèi)容生成500字小紅書種草文案:?關(guān)鍵詞:三亞,海邊,游泳,拍照?"}'
我們通過postman來測試其連通性,如下圖所示運(yùn)行服務(wù)
postman 數(shù)據(jù)返回
postman 接口配置示例
我們輸入的
content
內(nèi)容是:
請根據(jù)以下內(nèi)容生成500字小紅書種草文案:?關(guān)鍵詞:三亞,海邊,游泳,拍照?
發(fā)送請求查看結(jié)果。此時(shí)我們的DeepSeek接口的本地調(diào)用就已經(jīng)完成了。整體來說整個(gè)過程還是蠻絲滑的,接下來我們分析一下如何實(shí)現(xiàn)小程序的對接。
? ?
? ? ? ? <!-- ?
? ? ? ? ? ?
? ? ? ? -->
? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ?
? ?
tip:
關(guān)于注釋地方會在最下面的附錄項(xiàng)進(jìn)行講解說明
startGenerate() {
? ? ? ? ? ? // 1. 判斷用戶是否上傳圖片或輸入關(guān)鍵詞
? ? ? ? ? ? if (!this.textArea) {
? ? ? ? ? ? ? ? uni.showToast({
? ? ? ? ? ? ? ? ? ? title: "請輸入關(guān)鍵詞",
? ? ? ? ? ? ? ? ? ? icon: "none",
? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? // 2. 配置prompt提示詞
? ? ? ? ? ? let prompt = 請根據(jù)以下內(nèi)容生成500字${this.typeText}文案:n
;
? ? ? ? ? ? // 添加關(guān)鍵詞內(nèi)容
? ? ? ? ? ? if (this.textArea) {
? ? ? ? ? ? ? ? prompt += 關(guān)鍵詞:${this.textArea}n
;
? ? ? ? ? ? }
? ? ? ? ? ? // 添加圖片信息
? ? ? ? ? ? // if (this.fileList.length > 0) {
? ? ? ? ? ? // ? ? prompt += ${this.fileList[0].url}n
;
? ? ? ? ? ? // }
? ? ? ? ? ? // 3. 設(shè)置加載狀態(tài)
? ? ? ? ? ? this.loading = true;
? ? ? ? ? ? // 4. 接口調(diào)用
? ? ? ? ? ? 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;
? ? ? ? ? ? ? ? });
? ? ? ? },
此處我們主要實(shí)現(xiàn)的事對于提示詞的拼接,然后進(jìn)行接口的調(diào)用, 需要注意的是,我進(jìn)行的提示詞拼接可能并不是最完美的,具體應(yīng)用到業(yè)務(wù)層時(shí)還需要微調(diào)哦??!
效果演示如下圖所示:
該小程序其實(shí)最初的設(shè)計(jì)是有個(gè)圖片識別功能,通過識別圖片來生成對應(yīng)的文案,但是目前如果僅使用
騰訊云DeepSeek API
是無法實(shí)現(xiàn)該功能的,需要結(jié)合
大模型知識引擎
中的 (https://cloud.tencent.com/document/product/1759/107908) 的接口,通過識別圖片內(nèi)容之后再次調(diào)用
騰訊云DeepSeek API
來獲取對應(yīng)的文案。
通過本教程,開發(fā)者可以快速搭建一個(gè)基于騰訊云DeepSeek API的文案生成小程序,為內(nèi)容創(chuàng)作提供AI助手支持。后續(xù)還可以擴(kuò)展更多功能,如圖片識別等高級特性,進(jìn)一步提升應(yīng)用的實(shí)用性。
uniapp
源碼訪問地址 : (https://gitcode.com/qq_33681891/txDeepseek)
原文轉(zhuǎn)載自:https://mp.weixin.qq.com/s/1-qY9DWC4Lw2DpJ_OloHnw
C# 與 Windows API 交互的“秘密武器”:結(jié)構(gòu)體和聯(lián)合體
免費(fèi)強(qiáng)大的API開發(fā)和調(diào)試工具——Reqable
SpringBoot中6種API版本控制策略
更智能的Kubernetes AI推理路由:Gateway API推理擴(kuò)展
超越 API:MCP 如何成為 AI 時(shí)代的“萬能適配器”?
從零開始的機(jī)器學(xué)習(xí)實(shí)踐指南
2025年最佳語音轉(zhuǎn)文字API比較:一個(gè)報(bào)表31項(xiàng)指標(biāo)近200條數(shù)據(jù)
使用DeepSeek和Claude繪制出高質(zhì)量的SVG 圖片
18種最佳 RAG 技術(shù)