微信公众号AI文章生成和AI免费生成文章限制
- Linkreate AI插件 文章
- 2025-09-01 13:27:45
- 9阅读
设置微信公众号开发者模式
我们首先需要配置微信公众号的开发者模式,以启用API调用功能。登录微信公众号后台,进入“开发” > “基本配置”。在服务器配置中,填写URL(你的服务器地址)和Token(自定义令牌)。Token用于验证请求来源,确保安全。完成后,点击“提交”,微信服务器会发送GET请求到你的URL进行验证。验证代码需返回echostr参数值,示例代码如下:
from flask import Flask, request, make_response
import hashlib
app = Flask(__name__)
@app.route('/wechat', methods=['GET', 'POST'])
def wechat():
if request.method == 'GET':
token = "your_token" 替换为你的Token
signature = request.args.get('signature')
timestamp = request.args.get('timestamp')
nonce = request.args.get('nonce')
echostr = request.args.get('echostr')
验证签名
list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1(''.join(list).encode('utf-8')).hexdigest()
if sha1 == signature:
return make_response(echostr)
else:
return "Invalid request"
else:
处理POST请求(后续步骤)
pass
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
警告:确保服务器公网可访问,并配置HTTPS,否则微信服务器无法连接。验证成功后,开发者模式即启用,公众号消息将通过API转发到你的服务器。
调用AI模型API生成文章
接下来,我们集成AI模型API来生成文章内容。以OpenAI ChatGPT为例,使用其API接口。首先,在OpenAI官网注册并获取API密钥。在代码中,通过HTTP POST请求调用API,发送用户输入(如文章主题)并接收生成的文本。示例代码展示如何调用:
import requests
import json
def generate_article_with_openai(prompt):
api_key = "your_openai_api_key" 替换为你的API密钥
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
data = {
"model": "gpt-3.5-turbo", 使用指定模型
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 1000 控制输出长度
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
result = response.json()
return result['choices'][0]['message']['content']
else:
return f"API调用失败: {response.text}"
示例调用
article_content = generate_article_with_openai("写一篇关于AI技术的文章")
print(article_content)
关键步骤解释:model参数指定AI模型(如gpt-3.5-turbo),messages数组包含用户输入,max_tokens限制输出长度。警告:API密钥需保密,避免泄露;调用频率过高可能导致限流,建议添加错误重试机制。
处理微信公众号消息并返回AI生成内容
在微信公众号开发者模式下,用户发送消息(如文本)会触发POST请求到你的服务器。我们需解析消息,调用AI API生成文章,然后返回响应。示例代码处理文本消息:
from flask import Flask, request, make_response
import xml.etree.ElementTree as ET
app = Flask(__name__)
@app.route('/wechat', methods=['POST'])
def handle_message():
解析XML消息
xml_data = request.data
root = ET.fromstring(xml_data)
msg_type = root.find('MsgType').text
if msg_type == 'text':
user_input = root.find('Content').text
调用AI生成文章
article = generate_article_with_openai(user_input) 使用之前定义的函数
构造XML响应
response_xml = f"""
{int(time.time())}
"""
return make_response(response_xml)
else:
return "Unsupported message type"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
解释:代码解析用户输入,调用generate_article_with_openai生成文章,然后返回XML格式的文本消息。警告:确保XML格式正确,否则微信无法解析;添加日志记录以调试问题。
管理AI免费生成文章限制
使用免费AI模型时,需注意调用限制。例如,OpenAI免费账户有使用限制,包括每分钟请求数和每月总token数。豆包、通义千问等国内模型也有类似约束。我们通过代码监控和优化调用,避免超出限制。示例展示限制检查:
import time
class APIRateLimiter:
def __init__(self, max_requests_per_minute, max_tokens_per_month):
self.max_requests = max_requests_per_minute
self.max_tokens = max_tokens_per_month
self.request_count = 0
self.token_count = 0
self.last_reset_time = time.time()
def can_make_request(self, tokens_needed):
current_time = time.time()
重置每分钟计数
if current_time - self.last_reset_time >= 60:
self.request_count = 0
self.last_reset_time = current_time
检查限制
if self.request_count < self.max_requests and self.token_count + tokens_needed <= self.max_tokens:
return True
return False
def record_request(self, tokens_used):
self.request_count += 1
self.token_count += tokens_used
使用示例
limiter = APIRateLimiter(max_requests_per_minute=3, max_tokens_per_month=100000) 示例值
def safe_generate_article(prompt):
tokens_needed = len(prompt.split()) 2 估算token数
if limiter.can_make_request(tokens_needed):
article = generate_article_with_openai(prompt) 调用API
limiter.record_request(tokens_needed)
return article
else:
return "请求频繁或超限,请稍后再试"
关键点:APIRateLimiter类跟踪请求数和token数,确保不超限。警告:免费模型限制可能变化,定期检查官方文档;优化提示词长度以减少token消耗。
替代方案处理免费限制
当免费AI模型限制触发时,我们切换到备用方案。例如,使用豆包或通义千问的免费API作为备用。示例代码展示多模型集成:
def generate_article_backup(prompt):
尝试豆包API(假设有免费额度)
try:
response = requests.post(
"https://api.doubao.com/v1/generate",
headers={"Authorization": "Bearer your_doubao_key"},
json={"prompt": prompt, "max_tokens": 1000}
)
if response.status_code == 200:
return response.json()['content']
except:
pass
备用通义千问API
try:
response = requests.post(
"https://api.tongyi.com/v1/chat",
headers={"Authorization": "Bearer your_tongyi_key"},
json={"messages": [{"role": "user", "content": prompt}]}
)
if response.status_code == 200:
return response.json()['choices'][0]['message']['content']
except:
return "所有AI服务暂时不可用"
解释:代码依次尝试豆包和通义千问API,避免单点故障。警告:各模型API格式不同,需适配;免费额度耗尽时,提示用户稍后重试。
完整集成工作流设计
我们设计一个完整工作流,从用户输入到文章生成和返回。流程包括:接收消息、验证输入、调用AI、处理限制、返回响应。工作流图如下:
步骤 | 操作 | 关键代码/配置 |
---|---|---|
1. 消息接收 | 微信公众号转发用户文本到服务器 | Flask路由处理POST请求 |
2. 输入验证 | 检查输入长度和内容合法性 | if len(user_input) > 500: return "输入过长" |
3. AI调用 | 使用safe_generate_article生成内容 | 包含限流和备用方案 |
4. 响应返回 | 构造XML消息返回用户 | 微信XML格式响应 |
工作流优化:添加缓存机制存储常用文章,减少API调用;异步处理提升响应速度。警告:测试时使用测试号,避免影响正式公众号;定期更新API密钥以防失效。
兼容性与错误处理
集成时需处理兼容性问题。微信公众号消息格式为XML,AI API为JSON,需转换。错误处理包括网络超时、API限流等。示例代码展示健壮性增强:
import time
from requests.exceptions import RequestException
def robust_generate_article(prompt):
max_retries = 3
for attempt in range(max_retries):
try:
调用主AI模型
article = generate_article_with_openai(prompt)
if "API调用失败" not in article:
return article
失败时尝试备用
article = generate_article_backup(prompt)
if article:
return article
except RequestException as e:
if attempt < max_retries - 1:
time.sleep(2) 延迟重试
continue
return "网络错误,请稍后再试"
return "服务暂时不可用"
解释:代码添加重试机制和异常捕获,确保高可用性。警告:重试次数不宜过多,避免资源浪费;日志记录错误详情用于排查。