在開(kāi)始開(kāi)發(fā)微信小程序與騰訊云DeepSeek API的對(duì)接之前,我們需要做好必要的環(huán)境準(zhǔn)備工作。本章將指導(dǎo)你完成開(kāi)發(fā)環(huán)境的搭建,包括安裝最新版本的微信開(kāi)發(fā)者工具(IDE),配置小程序的基本信息,如果你習(xí)慣于wxml語(yǔ)法的開(kāi)發(fā),本教程中也會(huì)有關(guān)于騰訊云AI代碼助手插件
的安裝,需要注意的是本教程對(duì)于騰訊云AI代碼助手插件
僅停留在安裝的的這一步驟,因?yàn)槲疫€是習(xí)慣于uniapp 的使用。 讓我們按照以下步驟,一步步完成開(kāi)發(fā)環(huán)境的準(zhǔn)備工作。
注意:第一次使用微信開(kāi)發(fā)者工具時(shí),第一步并不是下載微信開(kāi)發(fā)者工具哦! 而是前往小程序后臺(tái), 進(jìn)行注冊(cè)并完成小程序開(kāi)發(fā)者認(rèn)證,這一內(nèi)容本篇不會(huì)詳細(xì)講解。
關(guān)于:微信開(kāi)發(fā)者工具, 我們需要點(diǎn)鏈接選擇符合自己電腦版本的ide 進(jìn)行下載
下載完成之后按照提示進(jìn)行安裝即可
當(dāng)開(kāi)發(fā)工具安裝完成之后, 我們首先創(chuàng)建一個(gè)空的項(xiàng)目模板 如下圖所示
騰訊云AI代碼助手現(xiàn)已完全集成到微信開(kāi)發(fā)者工具中,配置過(guò)程變得更加簡(jiǎn)便。具體步驟如下:
如上圖所示三步幫你安裝騰訊云AI 代碼助手
1
(擴(kuò)展)。2
(輸入框)中輸入騰訊云
即可3
(安裝) ,等待安裝完成之后我們就可以體驗(yàn)啦如下所示,騰訊AI代碼助手目前已整合了tencent-deepseek R1
模型。 開(kāi)發(fā)者可以盡情的體驗(yàn)tencent-deepseek R1
模型帶來(lái)的便捷開(kāi)發(fā)體驗(yàn)了嘍~~
溫馨提示:由于本人習(xí)慣于uniapp 項(xiàng)目的開(kāi)發(fā) 因此本項(xiàng)目使用的是uniapp 來(lái)打包運(yùn)行我們的小程序項(xiàng)目
UI界面如下圖所示:
我們的UI界面設(shè)計(jì)簡(jiǎn)潔,主要包含以下四個(gè)核心組件:
公眾號(hào)
,小紅書(shū)
等類(lèi)型,來(lái)覺(jué)得文案生成的類(lèi)型。運(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à)格表 | 模型類(lèi)型 | 輸入價(jià)格 | 輸出價(jià)格 | |:--------:|:--------:|:--------:| | DeepSeek-R1 | 0.004元/千token | 0.016元/千token | | DeepSeek-V3 | 0.002元/千token | 0.008元/千token |?? 詳細(xì)文檔:騰訊云DeepSeek API調(diào)用指南
關(guān)于 DeepSeek API 接口 的相關(guān)文檔可以點(diǎn)擊鏈接進(jìn)行查看, 接下來(lái)我們將逐步實(shí)現(xiàn)如和配置 騰訊云DeepSeek 為我們接下來(lái)的開(kāi)發(fā)作準(zhǔn)備
API 使用前提是需要用于一個(gè)API KEY ,訪問(wèn)地址 來(lái)創(chuàng)建我們的API KEY 如下圖所示, 點(diǎn)擊按鈕 創(chuàng)建API KEY
即可, 點(diǎn)擊查看時(shí)可以看到已經(jīng)創(chuàng)建的 API KEY
我這里用的是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:
"""請(qǐng)求參數(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():
"""
處理生成請(qǐng)求
---
parameters:
- name: body
in: body
required: true
schema:
type: object
properties:
content:
type: string
responses:
200:
description: 生成結(jié)果
400:
description: 無(wú)效請(qǐng)求
500:
description: 服務(wù)器錯(cuò)誤
"""
# 請(qǐng)求驗(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)建流式請(qǐ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請(qǐng)求失敗: {str(e)}", exc_info=True)
return jsonify({"error": "服務(wù)暫時(shí)不可用,請(qǐng)稍后再試"}), 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
框架暴露出來(lái)的請(qǐng)求信息如下:
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: "請(qǐng)根據(jù)以下內(nèi)容生成500字小紅書(shū)種草文案:?關(guān)鍵詞:三亞,海邊,游泳,拍照?"
}'
我么通過(guò)postman 來(lái)測(cè)試其連通性,如下圖所示
運(yùn)行服務(wù)
postman 數(shù)據(jù)返回
postman 接口配置示例
我們輸入的content
內(nèi)容是:請(qǐng)根據(jù)以下內(nèi)容生成500字小紅書(shū)種草文案:?關(guān)鍵詞:三亞,海邊,游泳,拍照?
, 發(fā)送請(qǐng)求查看結(jié)果
此時(shí)我們的DeepSeek接口的本地調(diào)用就已經(jīng)完成了。
整體來(lái)說(shuō)整個(gè)過(guò)程還是蠻絲滑的, 接下來(lái)我們分析一下 如和實(shí)現(xiàn)小程序的對(duì)接。
<template>
<view class="content">
<!-- <view class="upload-section">
<uv-upload
:fileList="fileList"
@afterRead="afterRead"
@delete="deletePic"
:maxCount="1"
name="1"
></uv-upload>
</view> -->
<view class="txtArea">
<uv-textarea
v-model="textArea"
placeholder="請(qǐng)輸入關(guān)鍵詞,以逗號(hào)隔開(kāi)"
:height="150"
:border="'surround'"
:count="true"
:maxlength="500"
></uv-textarea>
</view>
<view class="type-section">
<uv-radio-group
v-model="typeValue"
placement="row"
@change="handleChangeType"
:wrap="false"
>
<uv-radio
v-for="(item, index) in typeOptions"
:key="index"
:name="item.value"
:label="item.text"
></uv-radio>
</uv-radio-group>
</view>
<view class="button-section">
<uv-button
type="primary"
text="開(kāi)始生成"
@click="startGenerate"
></uv-button>
<uv-button type="info" text="重置" @click="resetForm"></uv-button>
</view>
<view class="result-section">
<uv-loading-icon
v-if="loading"
text="文案生成中..."
mode="circle"
size="28"
></uv-loading-icon>
<uv-text v-if="resultText" :text="resultText"></uv-text>
</view>
</view>
</template>
tip:
關(guān)于注釋地方會(huì)在最下面的附錄項(xiàng)進(jìn)行講解說(shuō)明
startGenerate() {
// 1. 判斷用戶是否上傳圖片或輸入關(guān)鍵詞
if (!this.textArea) {
uni.showToast({
title: "請(qǐng)輸入關(guān)鍵詞",
icon: "none",
});
return;
}
// 2. 配置prompt提示詞
let prompt = `請(qǐng)根據(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 || "文案生成失敗,請(qǐng)稍后重試...";
})
.catch((err) => {
console.error("生成失敗:", err);
this.loading = false;
});
},
此處我們主要實(shí)現(xiàn)的事對(duì)于提示詞的拼接,然后進(jìn)行接口的調(diào)用, 需要注意的是 ,我進(jìn)行的提示詞拼接可能并不是最完美的, 具體應(yīng)用到業(yè)務(wù)層時(shí)還需要微調(diào)哦??!
如下圖所示:
該小程序其實(shí)最初的設(shè)計(jì)是有個(gè)圖片識(shí)別功能, 通過(guò)識(shí)別圖片來(lái)生成對(duì)應(yīng)的文案, 但是目前如果僅使用騰訊云DeepSeek API
是無(wú)法實(shí)現(xiàn)該功能的,需要結(jié)合 大模型知識(shí)引擎
中的圖片對(duì)話或文件對(duì)話(實(shí)時(shí)文檔解析+對(duì)話) 的接口,通過(guò)識(shí)別圖片內(nèi)容之后再次調(diào)用騰訊云DeepSeek API
來(lái)獲取對(duì)應(yīng)的文案。
通過(guò)本教程,開(kāi)發(fā)者可以快速搭建一個(gè)基于騰訊云DeepSeek API的文案生成小程序,為內(nèi)容創(chuàng)作提供AI助手支持。后續(xù)還可以擴(kuò)展更多功能,如圖片識(shí)別等高級(jí)特性,進(jìn)一步提升應(yīng)用的實(shí)用性。
[uniapp](https://gitcode.com/qq_33681891/txDeepseek)
源碼訪問(wèn)地址
聯(lián)系客服