<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI on 乍意清秋</title><link>https://ruanchenbin3.github.io/blog/tags/ai/</link><description>Recent content in AI on 乍意清秋</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 12 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ruanchenbin3.github.io/blog/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenFlow：一个舆情分析工具的诞生</title><link>https://ruanchenbin3.github.io/blog/posts/openflow/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://ruanchenbin3.github.io/blog/posts/openflow/</guid><description>&lt;h2 id="项目缘起"&gt;项目缘起&lt;/h2&gt;
&lt;p&gt;最近一直在思考一个问题：网上吵翻天的时候，大家观点五花八门，但很多人只看到了&amp;quot;说什么&amp;quot;，没想清楚&amp;quot;为什么这么说&amp;quot;。&lt;/p&gt;
&lt;p&gt;同样一件事，知乎、微博、贴吧、小红书的用户看法可能完全不同。为什么？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;立场不同&lt;/strong&gt; - 涉及的利益不一样&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;信息茧房&lt;/strong&gt; - 看到的片面信息不同&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;情绪放大&lt;/strong&gt; - 愤怒的声音更容易传播&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;于是我想做一个工具，帮助穿透表象，从纷繁复杂的观点背后，洞察各方真实的利益诉求。&lt;/p&gt;
&lt;p&gt;这就是 &lt;strong&gt;OpenFlow&lt;/strong&gt; 的由来。&lt;/p&gt;
&lt;h2 id="核心思路"&gt;核心思路&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;看热闹，更要看门道&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OpenFlow 做两件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;收集主流观点&lt;/strong&gt; - 从多个平台把热门看法抓过来，按支持度排序&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;看透利益格局&lt;/strong&gt; - 分析这些观点背后，各方到底在争什么、怕什么、想要什么&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="技术架构"&gt;技术架构&lt;/h2&gt;
&lt;h3 id="数据采集层"&gt;数据采集层&lt;/h3&gt;
&lt;p&gt;最大的挑战是各平台的反爬机制。直接 HTTP 请求基本都会被封。&lt;/p&gt;
&lt;p&gt;解决方案：&lt;strong&gt;Playwright 浏览器模拟&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 启动真实浏览器，模拟用户行为&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;browser &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; playwright&lt;span style="color:#f92672"&gt;.&lt;/span&gt;chromium&lt;span style="color:#f92672"&gt;.&lt;/span&gt;launch(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; headless&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; args&lt;span style="color:#f92672"&gt;=&lt;/span&gt;[&lt;span style="color:#e6db74"&gt;&amp;#39;--disable-blink-features=AutomationControlled&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 注入脚本隐藏自动化特征&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; page&lt;span style="color:#f92672"&gt;.&lt;/span&gt;add_init_script(&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; Object.defineProperty(navigator, &amp;#39;webdriver&amp;#39;, {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; get: () =&amp;gt; undefined
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; });
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;目前支持：知乎、微博、贴吧、小红书、百度搜索&lt;/p&gt;
&lt;h3 id="观点分析层"&gt;观点分析层&lt;/h3&gt;
&lt;p&gt;不是简单按时间排序，而是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;向量化&lt;/strong&gt; - 用 sentence-transformers 将文本转为向量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;聚类&lt;/strong&gt; - 用 DBSCAN 将相似观点聚类&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;总结&lt;/strong&gt; - 每类观点提取关键词生成概括&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;排序&lt;/strong&gt; - 按互动量（点赞+评论×2+转发×3）计算支持度&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 观点聚类&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;embeddings &lt;span style="color:#f92672"&gt;=&lt;/span&gt; model&lt;span style="color:#f92672"&gt;.&lt;/span&gt;encode(texts)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clustering &lt;span style="color:#f92672"&gt;=&lt;/span&gt; DBSCAN(eps&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0.4&lt;/span&gt;, min_samples&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, metric&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;cosine&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;labels &lt;span style="color:#f92672"&gt;=&lt;/span&gt; clustering&lt;span style="color:#f92672"&gt;.&lt;/span&gt;fit_predict(embeddings)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 生成总结&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;summary &lt;span style="color:#f92672"&gt;=&lt;/span&gt; generate_summary(cluster_texts)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;support_rate &lt;span style="color:#f92672"&gt;=&lt;/span&gt; calculate_support_rate(cluster_contents)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="深度分析层"&gt;深度分析层&lt;/h3&gt;
&lt;p&gt;用 AI 进行深度分析，但关键是&lt;strong&gt;提示词设计&lt;/strong&gt;。&lt;/p&gt;</description></item></channel></rss>