当前位置: 首页 > article >正文

简单的前端原型:个性化广告文案生成

一、技术实现思路

  1. 功能流程

    用户输入年龄/兴趣
    WebSocket 发送请求
    DeepSeek API 处理生成广告文案
    前端显示个性化广告
  2. 关键点

    • 用户画像数据通过 WebSocket 发送到 DeepSeek API
    • 需要构造包含 ageinterests 的请求体
    • 处理 API 返回的 JSON 结构中的 ad_creative 字段

二、完整项目代码

1. 项目结构
src/
├── assets/
├── components/
│   ├── UserProfile.vue  # 用户信息收集组件
│   └── AdCard.vue       # 广告卡片组件
├── services/
│   └── deepseek.js     # DeepSeek API 封装
└── App.vue            # 主应用
2. UserProfile.vue 组件
<template>
  <div class="profile-form">
    <h3>填写您的信息</h3>
    
    <div class="form-group">
      <label for="age">年龄:</label>
      <input type="number" id="age" v-model="user.age" min="18" max="100" required>
    </div>

    <div class="form-group">
      <label for="interests">兴趣:</label>
      <textarea id="interests" v-model="user.interests" rows="3" placeholder="用逗号分隔您的兴趣"></textarea>
    </div>

    <button @click="submitProfile">生成广告</button>
  </div>
</template>

<script>
import { defineComponent, ref } from 'vue';
import { useDeepSeekService } from '@/services/deepseek';

export default defineComponent({
  name: 'UserProfile',
  setup() {
    const user = ref({
      age: '',
      interests: ''
    });
    
    const deepseek = useDeepSeekService();
    
    function submitProfile() {
      if (!user.value.age || !user.value.interests) return;
      
      deepseek.generateAd(user.value).then(ad => {
        console.log('广告生成结果:', ad);
        // 触发全局事件或通过 Vuex 更新状态
        this.$emit('ad-generated', ad);
      });
    }

    return {
      user,
      submitProfile
    };
  }
});
</script>

<style scoped>
.profile-form {
  width: 300px;
  margin: 20px auto;
  padding: 20px;
  border: 1px solid #ddd;
  border-radius: 8px;
}

.form-group {
  margin-bottom: 15px;
  label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
  }
}
</style>
3. AdCard.vue 组件
<template>
  <div class="ad-card" v-if="ad">
    <h4>{{ ad.title }}</h4>
    <p>{{ ad.description }}</p>
    <div class="tags">
      {{ ad.tags.join(', ') }}
    </div>
  </div>
</template>

<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  name: 'AdCard',
  props: {
    ad: Object
  },
  setup() {}
});
</script>

<style scoped>
.ad-card {
  background-color: #fff;
  padding: 15px;
  border-radius: 8px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  margin: 20px 0;
}

h4 {
  color: #2c3e50;
  margin-bottom: 10px;
}

.tags {
  color: #7f8c8d;
  font-size: 0.9em;
}
</style>
4. deepseek.js 服务封装
import { Injectable } from '@vue/runtime-core';
import { w3cwebsocket as WSC } from 'websocket';

@Injectable()
export class DeepSeekService {
  private socket: WSC | null = null;
  private apiUrl = 'wss://api.deepseek.com/v1/chat'; // 实际API地址需替换

  connect() {
    this.socket = new WSC(this.apiUrl, {
      headers: {
        'Authorization': `Bearer ${process.env.VUE_APP_DEEPSEEK_API_KEY}`,
        'Content-Type': 'application/json'
      }
    });

    this.socket.onmessage = (event) => {
      this.handleResponse(JSON.parse(event.data));
    };
  }

  generateAd(userProfile) {
    return new Promise((resolve, reject) => {
      if (!this.socket || this.socket.readyState !== WSC.OPEN) {
        reject(new Error('WebSocket 连接未建立'));
        return;
      }

      const requestBody = {
        type: 'generate_ad',
        parameters: {
          user_profile: userProfile
        }
      };

      this.socket.send(JSON.stringify(requestBody));
    });
  }

  private handleResponse(response) {
    if (response.type === 'ad_generated') {
      console.log('收到广告生成结果:', response.data);
      this.$emit('ad-response', response.data);
    }
  }
}
5. 主应用 App.vue
<template>
  <div id="app">
    <UserProfile @ad-generated="showAd" />
    <AdCard :ad="currentAd" />
  </div>
</template>

<script>
import { defineComponent, ref } from 'vue';
import UserProfile from './components/UserProfile.vue';
import AdCard from './components/AdCard.vue';
import { DeepSeekService } from './services/deepseek';

export default defineComponent({
  name: 'App',
  components: {
    UserProfile,
    AdCard
  },
  setup() {
    const currentAd = ref(null);
    const deepseekService = new DeepSeekService();
    
    deepseekService.connect();
    deepseekService.$on('ad-response', (adData) => {
      currentAd.value = adData;
    });

    return {
      currentAd
    };
  }
});
</script>

三、配置说明

  1. 环境变量

    VUE_APP_DEEPSEEK_API_KEY=your_api_key_here
    
  2. API 请求示例

    {
      "type": "generate_ad",
      "parameters": {
        "user_profile": {
          "age": 28,
          "interests": ["科技", "户外运动"]
        }
      }
    }
    
  3. 响应格式

    {
      "type": "ad_generated",
      "data": {
        "title": "2025 科技新品发布会邀请函",
        "description": "探索下一代智能穿戴设备,限时优惠!",
        "tags": ["科技新品", "智能穿戴", "限时优惠"]
      }
    }
    

四、运行效果

  1. 启动项目:

    npm run serve
    
  2. 访问 http://localhost:8080

    1. 输入年龄和兴趣
    2. 点击「生成广告」
    3. 查看生成的个性化广告

注意事项

  1. 需要先注册 DeepSeek API 并获取有效密钥
  2. 实际部署时需要处理 WebSocket 连接异常
  3. 生产环境中建议使用 HTTPS 协议

http://www.kler.cn/a/570385.html

相关文章:

  • 从零开始构建高效Spring Boot应用:实战案例与最佳实践
  • vue3+ts+uniapp+unibest 微信小程序(第四篇)——小程序分包,解决主包过大无法上传平台问题
  • 深度学习transfomer架构的职业匹配系统
  • iOS开发之最新Demo上传Github步骤(2025.02.28)
  • 虚拟机配置
  • HTTP四次挥手是什么?
  • 编辑器的使用
  • 【Python】使用库
  • 可视化的决策过程:决策树 Decision Tree
  • 【django】模型部署过程
  • linux(rocky)设置更新服务器时间
  • 开源操作系统纷争:CentOS停服后的新战场
  • 【PromptCoder + Cursor】利用AI智能编辑器快速实现设计稿
  • 爬虫结合 t_nlp_word 文本语言词法分析接口:开启数据挖掘与分析的新篇章
  • VTK知识学习(44)- 表面重建
  • miqiu的分布式锁(四):MySQL悲观锁解析
  • Go的基本语法学习与练习
  • leetcode24-----两两交换链表中的节点
  • 如何打造一个安全稳定的海外社媒账号?
  • element UI => element Plus 差异化整理