微信小程序从零到一:命理占卜的AI实现

168 阅读8分钟

先上图

微信图片_20251030104844.jpg 微信图片_20251030104834.jpg 微信图片_20251030104816.jpg

二、摸鱼间隙

作为一个信奉代码逻辑的程序员,我做梦也没想到有一天会让AI帮我开发算命网站。

事情是这样的:在某个厕所的隔间,我兴奋的刷着手机,直到看到六爻卜卦小红书的贴子,可能我之前在上面搜过什么命理的知识,可怕的大数据,这勾起了我的好奇心,还挺有意思的,于是想法我的小程序能做什么功能拓展,要不研究一下对应的卜卦流程,用AI结合具体的事件做一个功能实现出现,感觉有点意思,于是开始了我的小小的卜卦实现之旅...

AI能理解2000年前的玄学智慧吗?

于是我开始了这个"用最现代的技术实现最古老的智慧"的实验。

神奇的是,AI对传统文化的理解程度和补充让我这个中国人都自愧不如。

本次AI占卜功能的开发,源于对现有优质案例的借鉴与功能创新,具体需求推导如下:

  1. 运势占卜功能推导:参考开源项目 “一饭封神” 中的 “运势食谱” 功能,结合业务场景需求,规划在小程序中实现类似的运势分析模块,并基于 Trae 的 Builder 设计模式完成功能的快速落地。

  2. 六爻占卜功能推导:通过 GitHub 平台发现开发者基于 ChatGPT-API 与周易六十四卦映射文件开发的网页端六爻占卜工具,具有较高参考价值。后续通过检索算命网六爻占卜的标准流程,结合 DeepSeek-API 实现 “疑问占卜 - 卦象解读” 的完整功能闭环。

三、技术栈选型

为保障功能开发效率与跨端兼容性,本次项目选用以下技术栈组合:

  • 开发框架:uni-app(支持多端适配,降低小程序开发成本)

  • 编程语言:TypeScript(提升代码类型安全性与可维护性)

  • UI 组件库:uView(提供丰富的小程序适配组件,优化界面开发效率)

  • 样式预处理器:Sass(支持样式模块化开发,提升样式代码复用性)

  • 网络请求库:Axios(封装统一请求逻辑,保障接口交互稳定性)

  • DeepSeek API:中文传统文化,还是国产模型理解得更地道。

四、核心功能实现方案

4.1 小程序环境下 Axios 的适配配置

由于 uni-app 原生网络请求 API 与 Axios 存在适配差异,需通过自定义适配器实现 Axios 在小程序环境的兼容,具体代码实现如下:

const instance = axios.create({
  // Web 侧可以通过 vite.config.js 中的 proxy 配置,指定代理
  // 小程序APP里需写完整路径,如 https://service-rbji0bev-1256505457.cd.apigw.tencentcs.com/release
  // 可使用条件编译,详见 https://uniapp.dcloud.io/tutorial/platform.html#preprocessor
  // #ifdef H5
  baseURL: import.meta.env.VITE_APP_AXIOS_BASE_URL,
  // #endif
  // #ifndef H5
  // @ts-ignore
  baseURL: 'https://service-rbji0bev-1256505457.cd.apigw.tencentcs.com/release',
  // #endif
  adapter(config) {
    console.log('request adapter ↓↓')
    console.log(config)
    const { url, method, data, params, headers, baseURL, paramsSerializer } =
      config
    return new Promise((resolve, reject) => {
      uni.request({
        method: method!.toUpperCase() as any,
        url: getFullURL(baseURL || '', url!, params, paramsSerializer),
        header: headers,
        data,
        dataType: 'json',
        responseType: config.responseType,
        success: (res: any) => {
          console.log('request success ↓↓')
          console.log(res)
          resolve(res)
        },
        fail: (err: any) => {
          reject(err)
        }
      })
    })
  }
})

/**
 * 请求拦截
 */
instance.interceptors.request.use((config) => {
  const { method, params } = config
  // 附带鉴权的token
  const headers: any = {
    token: uni.getStorageSync('token')
  }
  // 不缓存get请求
  if (method === 'get') {
    headers['Cache-Control'] = 'no-cache'
  }
  // delete请求参数放入body中
  if (method === 'delete') {
    headers['Content-type'] = 'application/json;'
    Object.assign(config, {
      data: params,
      params: {}
    })
  }

  return {
    ...config,
    headers
  }
})

/**
 * 响应拦截
 */
instance.interceptors.response.use((v) => {
  if (v.data?.code === 401) {
    uni.removeStorageSync('token')
    // alert('即将跳转登录页。。。', '登录过期')
    // setTimeout(redirectHome, 1500)
    return v.data
  }

  // @ts-ignore
  if ((v.status || v.statusCode) === 200) {
    return v.data
  }
  // alert(v.statusText, '网络错误')
  return Promise.reject(v)
})

4.2 AI 接口调用的核心提示词设计

本次功能通过 AI 接口实现占卜逻辑与结果生成,需针对 “星座占卜” 与 “六爻占卜” 两种场景设计专业化提示词,确保 AI 返回结果的准确性与场景适配性,具体实现如下:

4.2.1 星座占卜功能提示词
// 星座占卜功能:构建东西方命理融合的提示词
const prompt = `你是一位深耕东西方命理交汇领域的资深占卜师,兼具东方生肖命理的深邃积淀与西方星座占星的精准洞察,更通晓五行生克、天干地支与黄道十二宫的呼应关系。请根据以下信息为用户推算运势:
  
  星座:${params.zodiac}
  生肖:${params.animal}
  日期:${params.date}
  
  请基于用户提供的星座、生肖及当前日期,构建多维度运势分析框架,实现东西方命理逻辑的自然融合。解读需紧扣 “星座 + 生肖 + 当前日期” 的核心要素,避免生硬拼接,确保解读逻辑自洽。
  
  请按照以下JSON格式返回占卜结果:
  {
    "luckyNumber": "根据推算得到的幸运数",
    "luckyColor": "根据推算得到的幸运颜色",
    "conclusion":"根据推算得到简短的运势小结",
    "should":"根据用户的幸运指数,推荐今天适宜做的事情",
    "shouldNot":"根据用户的幸运指数,推荐今天不适宜做的事情",
    "careerScore":"根据用户的幸运指数,1-5之间推荐一个用户可能的事业运势分数",
    "loveScore":"根据用户的幸运指数,1-5之间推荐一个用户可能的爱情运势分数",
    "healthScore":"根据用户的幸运指数,1-5之间推荐一个用户可能的健康运势分数",
    "wealthScore":"根据用户的幸运指数,1-5之间推荐一个用户可能的财富运势分数",
    "score":"根据用户的综合幸运指数,1-5之间推荐一个用户可能的综合运势分数",
    "description":"根据推算得到的综合运势分析",
    "careerDescription": "根据推算得到的事业运势分析",
    "loveDescription": "根据推算得到的爱情运势分析",
    "healthDescription": "根据推算得到的健康运势分析",
    "wealthDescription": "根据推算得到的财富运势分析",
    "loveLocation": "根据用户的幸运指数,推荐一个用户可能的爱情方向",
    "healthLocation": "根据用户的幸运指数,推荐一个用户可能的健康方向",
    "wealthLocation": "根据用户的幸运指数,推荐一个用户可能的财富方向"
  }`;
4.2.2 六爻占卜功能提示词
// 六爻占卜功能:调用AI接口实现卦象解读

const response = await aiClient.post("/chat/completions", {
      model: apiConfig.model,
      messages: [
        {
          role: "system",
          content:
            "你是一位传承中华六爻术数世家的资深卜卦专家,深耕卦理数十年,精通《周易》象、数、理,擅长结合现实场景解析卦象玄机。你的核心任务的是:根据卜卦者明确提出的具体问题(如事业抉择、人际调和、学业规划等),以及其提供的完整卦象(含本卦、变卦、动爻信息),提供兼具卦理依据与实践价值的指导建议。",
        },
        {
          role: "user",
          content: prompt,
        },
      ],
      temperature: 0.8,
      stream: false,
    });

五、关于AI和玄学的一点感悟

  1. AI不是工具,而是合作伙伴。它有自己的"想法",会给你意想不到的建议,会从你没想到的角度解决问题。与其说是我在使用AI,不如说是我们在一起探索未知。

  2. 用户需求比技术实现更重要。算命网站的核心不是算法有多精确,而是能不能给用户带来心理上的满足。技术是手段,解决人的问题才是目的。

  3. 传统文化需要新的表达方式。不是要用技术颠覆传统,而是要用技术让传统在新时代重新焕发生机。

  4. 不要把AI当成万能的代码生成器,要把它当成一个有智慧的合作伙伴。它能给你灵感,能帮你思考,但最终的判断和决策还是要靠你自己。

  5. 现代人总把占卜当 “百度问答”,遇事就问 “何时发财”“能否成功”,却忘了占卜的前提是 敬慎:所求之事需正当,发问之心需纯粹。那些为损人利己而卜、为投机取巧而占的行为,看似求卦,实则是对规律的轻慢,卦象自然失真。占卜是自我认知的镜子,而非宿命论的拐杖

  6. 占卜的意义从不是预知未来,而是觉醒当下。当你能做到审时度势、修德改过、活在当下,便无需铜钱卦象的指引 —— 你的内心早已与天地同频,每一步选择都契合天道,这便是 不占而占 的终极奥义。正如倪海厦先生所言:“《易经》不是用来算命的,是用来觉醒的” ,占卜的玄学,终究是人生的哲学

    一物其来有一身,一身还有一乾坤。天人焉有两般义,道不虚行只在人

zhanbu_code.png

小程序的下一个功能,还不知道做啥,有想法的朋友可以在评论区说一声,多谢~