<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>大模型 on CoreV.cn</title>
        <link>https://corev.cn/tags/%E5%A4%A7%E6%A8%A1%E5%9E%8B/</link>
        <description>Recent content in 大模型 on CoreV.cn</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <copyright>CoreV.cn</copyright>
        <lastBuildDate>Wed, 26 Aug 2026 17:08:33 +0800</lastBuildDate><atom:link href="https://corev.cn/tags/%E5%A4%A7%E6%A8%A1%E5%9E%8B/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>给小程序装大脑：接上大模型</title>
        <link>https://corev.cn/articles/05-cloud-function-llm/</link>
        <pubDate>Sat, 08 Aug 2026 09:30:00 +0800</pubDate>
        
        <guid>https://corev.cn/articles/05-cloud-function-llm/</guid>
        <description>&lt;p&gt;数据我记了不少，可光看那一串数字，真看不出啥名堂。跑步记了、睡眠记了、花钱也记了，但谁有功夫天天对着表格琢磨？我当初一笔一笔认认真真记，本来就是想弄明白自己这段时间到底怎么样，可光把数存下来，它自己不会开口说话。&lt;/p&gt;
&lt;p&gt;后来我就想，要是这小程序能像老朋友一样，翻完全部记录后跟我说一句：&amp;ldquo;你这周跑步三次都达标了，但睡眠连着三天晚过 11 点，下午犯困八成跟这个有关；再说记账里外卖比上周多花八十，刚好撞上你运动量往下掉——这俩事儿说不定连着。&amp;rdquo; 那才叫真有用。想做到这点，得给程序接个大模型当&amp;quot;大脑&amp;quot;。&lt;/p&gt;
&lt;p&gt;说实话，这块我一开始是真发怵。大模型听着就吓人，什么 API、什么密钥、什么 token。但我最后还是用 WorkBuddy 配上腾讯的混元（hy3）把它跑通了。我得说清楚，我不是程序员，在能源行业干了二十多年，写代码这事儿以前碰都不碰。所以下面写的这些，你照着来也能成。&lt;/p&gt;
&lt;h2 id=&#34;一头一条密钥千万别放进小程序里&#34;&gt;一、头一条：密钥千万别放进小程序里
&lt;/h2&gt;&lt;p&gt;我见过有人把 API Key 直接写进小程序代码。这等于把家门钥匙贴在门上，谁拿到安装包反编译一下，密钥就泄露了。&lt;/p&gt;
&lt;p&gt;我的办法是用微信云开发的云函数 &lt;code&gt;aiAnalyze&lt;/code&gt;，密钥交给云开发环境托管。小程序只管调这个函数，密钥长什么样它根本不知道。前端就这么一行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// utils/aiClient.js —— 小程序这头只管&amp;#34;调函数&amp;#34;，密钥一个字都不出现
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;wx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cloud&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;callFunction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;aiAnalyze&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;聚合后的统计&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rangeLabel&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;我后来想通一件事：前端代码对用户来说是透明的，就像明信片，谁都能看。所以密钥这种东西，只能待在服务器那一头。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;想试的话，直接把这句话丢给 AI：&lt;br&gt;
&amp;ldquo;我要让我的小工具调大模型，但怕密钥泄露。告诉我密钥该放哪、前端怎么调才安全。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;二调用那点事都是踩出来的坑&#34;&gt;二、调用那点事（都是踩出来的坑）
&lt;/h2&gt;&lt;p&gt;环境是 CloudBase 加 @cloudbase/node-sdk 的 &lt;code&gt;app.ai()&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;真实在跑的代码是这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 云函数 aiAnalyze：先把模型对象建好，再调用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ai&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ai&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ai&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cloudbase&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;generateText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hy3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;我在这栽过俩跟头，你别重蹈：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有回写成 &lt;code&gt;app.ai().streamText(...)&lt;/code&gt;，跑不起来。后来才明白，streamText 这些方法是在 &lt;code&gt;model&lt;/code&gt; 上，不在 &lt;code&gt;app.ai()&lt;/code&gt; 上。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cloudbase/node-sdk&lt;/code&gt; 得 &lt;code&gt;&amp;gt;=3.16.0&lt;/code&gt;，版本低了直接报错，我对着屏幕愣了半天。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;模型我用的是腾讯混元 hy3，效果够用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;给 AI 的提示词可以这么写：&lt;br&gt;
&amp;ldquo;我用 CloudBase 的 app.ai() 调大模型，给我一段最小可运行代码，再列三个最容易踩的坑。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;三让-ai-吐结构化数据别吐作文&#34;&gt;三、让 AI 吐&amp;quot;结构化数据&amp;quot;，别吐&amp;quot;作文&amp;quot;
&lt;/h2&gt;&lt;p&gt;这一步是我自己拍板改的，挺关键。原来我用了 towxml 库加一个 decode 页面来渲染 AI 返回的 Markdown，后来一琢磨不对：小程序里塞个解析库，又占地方又容易崩。我干脆把那套删了，让模型只返回固定格式的 JSON，比如 &lt;code&gt;{ title, highlights[], suggestions[] }&lt;/code&gt;，我拿过来直接画卡片。&lt;/p&gt;
&lt;p&gt;云函数里是这么约束它的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 系统提示词里把结构写死，模型只能往里填；再用 extractJson 兜底提取
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;extractJson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;raw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// 前端不用再解析一遍
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// result: { title, highlights:[...], suggestions:[...] }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;为啥非得结构化？因为散文式的回复，你还得再写代码去拆，拆着拆着就容易出错。让它直接给你表格，省一层麻烦。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;提示词参考：&lt;br&gt;
&amp;ldquo;我要让 AI 返回固定格式的数据而不是文章，给我一个用提示词强制输出 JSON 的写法，并说明怎么防止它乱加废话。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;四不写代码也能用让-ai-帮你写周报&#34;&gt;四、不写代码也能用：让 AI 帮你写周报
&lt;/h2&gt;&lt;p&gt;怕你觉得上面这些只对写程序的有用，我找个纯办公、不用写代码的例子收个尾，写周报。&lt;/p&gt;
&lt;p&gt;套路一模一样：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安全：&amp;ldquo;别把公司密钥贴进任何文档，用公司允许的 AI 工具处理。&amp;rdquo;&lt;/li&gt;
&lt;li&gt;调用：&amp;ldquo;把本周干的事丢给 AI，让它总结。&amp;rdquo;&lt;/li&gt;
&lt;li&gt;结构化：&amp;ldquo;按&amp;rsquo;做了啥 / 亮点 / 下周计划&amp;rsquo;三栏返回，别写成长文。&amp;rdquo;&lt;/li&gt;
&lt;li&gt;验收：&amp;ldquo;一条条对，它编的删掉，漏的你自己补上。&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;你看，代码一行都不用会。你只要会&amp;quot;给 AI 派活 + 验收结果&amp;quot;，安全配置、数据分析、结构化处理等技术活AI都能替你完成。&lt;/p&gt;
&lt;h2 id=&#34;五接-ai-之前先过一遍这张清单&#34;&gt;五、接 AI 之前，先过一遍这张清单
&lt;/h2&gt;&lt;p&gt;建议截图存着，以后给任何工具接大模型前扫一眼：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;✅&lt;/th&gt;
          &lt;th&gt;接 AI 前自查&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;密钥在服务器端吗？前端一个字都不出现？&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;调用方式抄对了吗？（方法在哪个对象上、SDK 版本够不够）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3&lt;/td&gt;
          &lt;td&gt;让 AI 返回固定结构了吗？（别要散文）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;4&lt;/td&gt;
          &lt;td&gt;它给的 output，你逐条核对了吗？&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;每次，我都是自己验收的吗？&lt;/strong&gt;（这条最要命）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;收尾&#34;&gt;收尾
&lt;/h2&gt;&lt;p&gt;AI 是把写程序的门槛削低了，可&amp;quot;怎么接才安全、接完怎么拿到能用的东西&amp;quot;，这俩问题还是得你自己拿主意。&lt;/p&gt;
&lt;p&gt;下一篇聊最后一环：功能有了、脑子也有了，怎么让人&amp;quot;天天回来用&amp;quot;。签到、成就、订阅消息，我下回细说。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
