<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AI 探索 on Saiga</title>
    <link>http://localhost:1313/categories/ai-%E6%8E%A2%E7%B4%A2/</link>
    <description>Recent content in AI 探索 on Saiga</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <managingEditor>wuwenzen@outlook.com (wuwj)</managingEditor>
    <webMaster>wuwenzen@outlook.com (wuwj)</webMaster>
    <lastBuildDate>Sun, 18 Dec 2022 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://localhost:1313/categories/ai-%E6%8E%A2%E7%B4%A2/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>第一次用 AI 写前端代码：哪些好用，哪些坑</title>
      <link>http://localhost:1313/posts/2022-12-18-ai-code-helper-experiment/</link>
      <pubDate>Sun, 18 Dec 2022 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2022-12-18-ai-code-helper-experiment/</guid>
      <description>&lt;p&gt;2022 年我开始把 AI 编码助手真正用在日常开发里，体验可以用一句话概括：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;它不是银弹，但如果用得好，很像一个永远不喊累的实习生。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章主要记录几个方面：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;它在哪些场景明显好用；&lt;/li&gt;&#xA;&lt;li&gt;哪些地方容易翻车；&lt;/li&gt;&#xA;&lt;li&gt;我最后形成的一些使用习惯。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-几个惊艳到的使用场景&#34;&gt;1. 几个「惊艳到」的使用场景&lt;/h2&gt;&#xA;&lt;h3 id=&#34;11-写样板代码boilerplate&#34;&gt;1.1 写样板代码（boilerplate）&lt;/h3&gt;&#xA;&lt;p&gt;比如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;新建一个 Vue 3 组合式组件；&lt;/li&gt;&#xA;&lt;li&gt;写一个标准的 Axios 封装；&lt;/li&gt;&#xA;&lt;li&gt;初始化一个简单的 React 页面结构。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;以前要么复制项目里旧代码改，要么从 CLI 模板改；&lt;br&gt;&#xA;现在直接丢一句：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;「写一个 Vue3 + TypeScript 的表格组件，支持分页、排序，props 包含 xxx。」&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;然后拿到一个 70% 可用的版本，再按自己习惯调整。&lt;/p&gt;&#xA;&lt;h3 id=&#34;12-写简单的工具函数&#34;&gt;1.2 写简单的工具函数&lt;/h3&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;将后端分页结果转换为前端表格数据；&lt;/li&gt;&#xA;&lt;li&gt;格式化日期/金额；&lt;/li&gt;&#xA;&lt;li&gt;从树结构中找到某个节点路径。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;用自然语言描述需求 + 给一两个例子，AI 通常能给出还不错的实现。&lt;br&gt;&#xA;有时候还能顺带推荐几种写法，帮你对比。&lt;/p&gt;&#xA;&lt;h3 id=&#34;13-帮忙翻译老代码&#34;&gt;1.3 帮忙「翻译」老代码&lt;/h3&gt;&#xA;&lt;p&gt;面对一些古早 jQuery/复杂 if-else 的老代码，直接让 AI：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;「帮我解释这段代码在干嘛，并用更现代的写法重构。」&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;得到的是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;一段自然语言解释（方便确认理解）；&lt;/li&gt;&#xA;&lt;li&gt;一版初步的重构实现（不一定完美，但至少是个起点）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-重构和单测ai-很适合当助手&#34;&gt;2. 重构和单测：AI 很适合当助手&lt;/h2&gt;&#xA;&lt;h3 id=&#34;21-帮忙拆函数--命名&#34;&gt;2.1 帮忙拆函数 / 命名&lt;/h3&gt;&#xA;&lt;p&gt;长函数重构时，让 AI：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;「这段函数太长了，帮我按逻辑拆成几个小函数，顺带起一些更好的函数名。」&lt;/p&gt;</description>
    </item>
    <item>
      <title>用大模型做一个简单「文档问答助手」</title>
      <link>http://localhost:1313/posts/2022-10-30-ai-doc-assistant-v1/</link>
      <pubDate>Sun, 30 Oct 2022 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2022-10-30-ai-doc-assistant-v1/</guid>
      <description>&lt;p&gt;2022 年开始，大模型 API 越来越好用，大家最直觉的一个想法就是：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;能不能把项目文档「喂给」模型，然后直接用自然语言问问题？&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章记录的是一个从 0 到 1 的小 Demo：&lt;strong&gt;用大模型 API + 向量检索，实现一个能回答「我们自己文档」问题的小助手。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-目标和约束&#34;&gt;1. 目标和约束&lt;/h2&gt;&#xA;&lt;p&gt;目标很简单：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;把部分项目文档（接口说明、架构设计、规范）导入系统；&lt;/li&gt;&#xA;&lt;li&gt;在一个聊天界面里，可以问：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;「用户登录接口的必填参数有哪些？」&lt;/li&gt;&#xA;&lt;li&gt;「私募投资人小程序的技术栈是什么？」&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;助手能基于文档给出相对准确的回答。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;约束：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;不追求「完美答案」；&lt;/li&gt;&#xA;&lt;li&gt;优先做到：&lt;strong&gt;能指向正确文档，并给出简洁总结&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-总体架构&#34;&gt;2. 总体架构&lt;/h2&gt;&#xA;&lt;p&gt;整体流程可以概括成：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;文档导入 &amp;amp; 切分；&lt;/li&gt;&#xA;&lt;li&gt;向量化（Embedding）并存入向量库；&lt;/li&gt;&#xA;&lt;li&gt;用户提问 → 向量检索相关片段；&lt;/li&gt;&#xA;&lt;li&gt;把相关片段 + 问题一起发给大模型 → 生成回答；&lt;/li&gt;&#xA;&lt;li&gt;前端展示答案 + 引用片段。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;用一张简图就是所谓的：&lt;strong&gt;RAG（检索增强生成）&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-文档预处理从-markdown-到小段文本&#34;&gt;3. 文档预处理：从 Markdown 到「小段文本」&lt;/h2&gt;&#xA;&lt;p&gt;我们选用的文档源主要是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Git 仓库里的 Markdown（README、设计文档）；&lt;/li&gt;&#xA;&lt;li&gt;部分导出的接口文档（JSON/YAML 转文本）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;预处理步骤：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;把 Markdown 转成纯文本（保留标题层级）；&lt;/li&gt;&#xA;&lt;li&gt;按一定策略切分成「小段文本」，比如每段 300–500 字；&lt;/li&gt;&#xA;&lt;li&gt;每段附带元信息：文档名、段落标题、在文档中的位置。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;简单示例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;docId&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fund-investor-miniapp&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;技术栈与整体架构&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;前端采用 Vue3 + uni-app...&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;section&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2.1 技术栈&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;index&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;切分策略的小经验：&lt;/p&gt;</description>
    </item>
    <item>
      <title>用云端 NLP API 做一个简单的文本分析工具</title>
      <link>http://localhost:1313/posts/2021-12-05-first-ai-touch/</link>
      <pubDate>Sun, 05 Dec 2021 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2021-12-05-first-ai-touch/</guid>
      <description>&lt;p&gt;很早之前就对「AI 能不能帮忙看评论、看工单」这件事好奇过，但自己训模型门槛挺高，于是先选了条&lt;strong&gt;最省事的路&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;找一个云厂商提供的 NLP API，用 HTTP 请求的方式做一层简单封装，做一个「文本分析小工具」。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章记录的是那次尝试的过程。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;注：下面不强调具体厂商名字，主线思路在于「怎么用」，而不是「用谁」。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-想做一个什么样的小工具&#34;&gt;1. 想做一个什么样的小工具？&lt;/h2&gt;&#xA;&lt;p&gt;需求非常朴素：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;输入一段文本（比如用户评论、客服工单）；&lt;/li&gt;&#xA;&lt;li&gt;自动判断它是「正向 / 负向 / 中性」；&lt;/li&gt;&#xA;&lt;li&gt;选做：给出一个大致类别，比如「产品问题 / 物流问题 / 售后问题」。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;最终希望变成一个简单的 Web 页面：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;左边输入框；&lt;/li&gt;&#xA;&lt;li&gt;右边展示：情感结果、类别标签、关键句/关键词。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-挑选一个云-nlp-服务&#34;&gt;2. 挑选一个云 NLP 服务&lt;/h2&gt;&#xA;&lt;p&gt;大部分云厂商都会提供类似能力：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;情感分析（Sentiment Analysis）；&lt;/li&gt;&#xA;&lt;li&gt;文本分类（Text Classification）；&lt;/li&gt;&#xA;&lt;li&gt;关键词提取、实体识别等。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;通常接入步骤类似：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;注册账号；&lt;/li&gt;&#xA;&lt;li&gt;在控制台创建一个 NLP 应用 / 项目；&lt;/li&gt;&#xA;&lt;li&gt;拿到 API Key / Secret / Endpoint；&lt;/li&gt;&#xA;&lt;li&gt;看一眼文档里示例请求。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;示例请求（伪代码）：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-http&#34; data-lang=&#34;http&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;POST /nlp/sentiment&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Authorization: Bearer &amp;lt;API_KEY&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Content-Type: application/json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;  &amp;#34;text&amp;#34;: &amp;#34;这次发货太慢了，等了一个星期才收到。&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;响应大概会是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;sentiment&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;negative&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;confidence&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.94&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者更细一些：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
