微信公众号AI文章生成和AI免费生成文章限制

设置微信公众号开发者模式

我们首先需要配置微信公众号的开发者模式,以启用API调用功能。登录微信公众号后台,进入“开发” > “基本配置”。在服务器配置中,填写URL(你的服务器地址)和Token(自定义令牌)。Token用于验证请求来源,确保安全。完成后,点击“提交”,微信服务器会发送GET请求到你的URL进行验证。验证代码需返回echostr参数值,示例代码如下:

微信公众号AI文章生成和AI免费生成文章限制

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 "服务暂时不可用"

解释:代码添加重试机制和异常捕获,确保高可用性。警告:重试次数不宜过多,避免资源浪费;日志记录错误详情用于排查。