L

Lenix Blog

记录-交流-Web开发知识分享

在ubuntu上使用claude code操作浏览器

<p>在ubuntu上使用claude code操作浏览器:</p> <p>0.安装claude code:</p> <p>curl -fsSL https://claude.ai/install.sh &#124; bash</p> <p>echo 'export PATH="$HOME/.local/bin:$PATH"' &#62;&#62; ~/.zshrc &#38;&#38; source ~/.zshrc</p> <p>&#160;</p> <p><strong>1.安装CC Switch,配置供应商。</strong></p> <p><strong>2.安装Playwright MCP:</strong></p> <p>claude mcp add playwright -- npx @playwright/mcp@latest<br /> <strong>3.启动:claude</strong><br /> 命令行输入:claude</p> <p><strong>4.输入:打开微博</strong><br /> 浏览器会打开微博,登录帐号<br /> <strong>5.输入:发一条微博,内容是“这是一条来自claude code发的微博 ​​​”</strong><br /> Claude 会自动完成。</p> <p>期间,各步操作会让你确认,你回车即可。</p> <p>&#160;&#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11849">在ubuntu上使用claude code操作浏览器</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2026/7/10
阅读更多

sqlite详细介绍

<p data-start="0" data-end="84"><a class="wpal-linked-keyword" href="https://sqlite.p2hp.com/" target="_blank">SQLite</a> 是一个 <strong data-start="11" data-end="33">轻量级、零配置、嵌入式的关系型数据库</strong>。它非常小巧但功能完整,被广泛用于移动端、桌面应用、嵌入式设备、浏览器、IoT、服务器软件等各种场景。</p> <p data-start="86" data-end="106">下面用简单清晰的方式介绍 SQLite。<span id="more-11841"></span></p> <hr data-start="108" data-end="111" /> <h1 data-start="113" data-end="132">&#x2705; <strong data-start="117" data-end="132">SQLite 是什么?</strong></h1> <p data-start="133" data-end="163">SQLite 是一个 <strong data-start="144" data-end="152">基于文件</strong> 的关系型数据库系统:</p> <ul data-start="165" data-end="277"> <li data-start="165" data-end="179"> <p data-start="167" data-end="179"><strong data-start="167" data-end="179">不需要安装服务器</strong></p> </li> <li data-start="180" data-end="216"> <p data-start="182" data-end="216"><strong data-start="182" data-end="216">所有数据都保存在一个普通文件中(.db / .sqlite)</strong></p> </li> <li data-start="217" data-end="234"> <p data-start="219" data-end="234"><strong data-start="219" data-end="234">支持标准 SQL 语法</strong></p> </li> <li data-start="235" data-end="249"> <p data-start="237" data-end="249">线程安全、高性能、跨平台</p> </li> <li data-start="250" data-end="277"> <p data-start="252" data-end="277">程序可以直接嵌入 SQLite 引擎,无需网络通信</p> </li> </ul> <p data-start="279" data-end="338">它不像 <a class="wpal-linked-keyword" href="https://mysql.p2hp.com/" target="_blank">MySQL</a>、<a class="wpal-linked-keyword" href="https://postgresql.p2hp.com/" target="_blank">PostgreSQL</a> 那样是“守护进程型数据库”,而更像一个“数据库文件 + 操作库”,非常轻量。</p> <hr data-start="340" data-end="343" /> <h1 data-start="345" data-end="372">&#x2705; <strong data-start="349" data-end="372">SQLite 的特点(为什么这么流行)</strong></h1> <h3 data-start="374" data-end="393"><strong data-start="378" data-end="393">1. 零配置,开箱即用</strong></h3> <p data-start="394" data-end="425">无需安装、无需启动服务、无需管理权限,复制数据库文件即可使用。</p> <h3 data-start="427" data-end="448"><strong data-start="431" data-end="448">2. 单个文件保存所有数据</strong></h3> <p data-start="449" data-end="462">你可以简单地把数据库文件:&#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11841">sqlite详细介绍</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2025/12/7
阅读更多

大语言模型中,role为user、assistant、system有什么区别

<p>大语言模型中,role为user、assistant、system有什么区别</p> <p>聊天模型中不同角色(role)的主要区别:</p> <p>1. System role (系统角色)<br /> - 用于设定AI助手的基础行为准则、个性特征和能力范围<br /> - 类似于给AI助手的"说明书"或"操作手册"<br /> - 通常在对话开始前设置,对整个对话过程都有效<br /> - 系统角色的内容通常不会直接与用户互动,但会对对话的走向产生间接影响,比如指定助理的语气、知识范围、以及对用户的帮助方式<br /> - 用户一般看不到system prompt的内容<br /> - 例如:"你是一个专业的Python编程助手,需要用通俗易懂的方式回答问题"<span id="more-11831"></span></p> <p>2. User role (用户角色)<br /> - 代表与AI对话的人类用户,通常是向模型提问、提出需求或请求信息的用户。<br /> - 负责提出问题、要求或任务<br /> - 引导对话的方向<br /> - 用户的发言构成了模型接收到的输入,模型根据用户的发言生成相应的回复<br /> - 例如:"请解释一下Python中的装饰器是什么?"</p> <p>3. Assistant role (助手角色)<br /> - AI助手的回应角色,这个角色代表模型本身,即用于为用户提供信息、回答问题或完成用户请求的助手。<br /> - &#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11831">大语言模型中,role为user、assistant、system有什么区别</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/10/28
阅读更多

大模型的 temperature设为多少比较好

<p>大模型的 temperature设为多少比较好</p> <p>设置temperature(温度)参数需要根据具体使用场景来权衡:</p> <p>对于需要稳定、可靠输出的场景(如客服、代码生成等),建议使用较低的temperature值(0.0-0.3):<br /> - 输出更加确定和一致<br /> - 减少随机性和创造性<br /> - 适合需要准确答案的任务</p> <p>对于需要创造性和多样性的场景(如创意写作、头脑风暴等),可以使用较高的temperature值(0.7-1.0):<br /> - 产生更多样化和独特的输出<br /> - 增加随机性和探索性<br /> - 适合需要新颖想法的任务</p> <p>一些常见的建议设置:<br /> - 代码生成: 0.0-0.2<br /> - 问答/知识提取: 0.1-0.3<br /> - 对话/聊天: 0.5-0.7<br /> - 创意写作: 0.7-0.9</p> <p>不过这只是一般性建议,你可以根据实际需求进行调整和实验,找到最适合的设置。通常建议从0.7开始尝试,然后根据输出效果逐步调整。</p> <p>&#160;</p> <p><audio style="display: none;" controls="controls"></audio>&#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11828">大模型的 temperature设为多少比较好</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/10/28
阅读更多

ai大模型对话的历史数量多少最合适

<p>ai大模型对话的历史数量多少最合适</p> <p>让我从实践角度来分析对话历史长度的合适选择:</p> <p>简短回答:通常建议保持3-5轮对话历史最为合适,这能在上下文理解和系统资源消耗之间取得较好平衡。</p> <p>具体分析:</p> <p>1. 优点方面:<br /> - 保持较短对话历史(3-5轮)能确保模型响应速度快<br /> - 减少token消耗,降低使用成本<br /> - 避免历史信息干扰当前对话重点</p> <p>2. 缺点方面:<br /> - 太短的历史可能导致上下文理解不足<br /> - 太长的历史会增加响应延迟<br /> - 过多历史会占用更多计算资源</p> <p>3. 具体建议:<br /> - 日常闲聊:2-3轮历史足够<br /> - 专业讨论:可以保持4-5轮<br /> - 复杂任务:根据需要可以适当增加到6-8轮<br /> - 超过10轮建议开启新对话</p> <p>&#160;</p> <p><audio style="display: none;" controls="controls"></audio></p> <p><audio style="display: none;" controls="controls"></audio>&#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11826">ai大模型对话的历史数量多少最合适</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/10/28
阅读更多

Alibaba Cloud Linux 3 yum 安装 PHP8.1

<h3>一、安装源</h3> <pre class="EnlighterJSRAW" data-enlighter-language="shell">rpm -ivh --nodeps https://rpms.remirepo.net/enterprise/remi-release-8.rpm sed -i 's/PLATFORM_ID="platform:al8"/PLATFORM_ID="platform:el8"/g' /etc/os-release ## 安装 PHP8.1 sed -i 's/PLATFORM_ID="platform:el8"/PLATFORM_ID="platform:al8"/g' /etc/os-release </pre> <h3>二、安装 PHP8.1</h3> <pre class="EnlighterJSRAW" data-enlighter-language="bash">yum install -y php81-php-fpm php81-php-cli php81-php-bcmath php81-php-gd php81-php-json php81-php-mbstring php81-php-mcrypt php81-php-mysqlnd php81-php-opcache php81-php-pdo php81-php-pecl-crypto php81-php-pecl-mcrypt php81-php-pecl-geoip php81-php-recode php81-php-snmp php81-php-soap php81-php-xml php81-php-pecl-redis php81-php-pecl-apcu </pre> <p>&#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11808">Alibaba Cloud Linux 3 yum 安装 PHP8.1</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/10/17
阅读更多

nginx 用try_files 时,gzip_static不起作用,如何解决

<p><a class="wpal-linked-keyword" href="https://nginx.p2hp.com/" target="_blank">nginx</a> 用try_files 时,gzip_static不起作用,如何解决</p> <p>当使用try_files指令时,gzip_static指令可能不会起作用的原因是,try_files指令会绕过gzip_static的处理。为了解决这个问题,您可以尝试以下两种方法:</p> <p>使用if指令:<span id="more-11794"></span><br /> 在try_files指令之前添加一个if指令,用于检查请求的文件是否存在。如果存在,可以手动添加.gz扩展名,并使用gzip_static指令来处理:</p> <p>location / {<br /> if (-f $request_filename.gz) {<br /> add_header Content-Encoding gzip;<br /> rewrite ^(.*)$ $1.gz break;<br /> }<br /> try_files $uri $uri/ =404;<br /> }<br /> 这样,当请求的文件存在并且有对应的.gz压缩文件时,gzip_static指令将会生效。</p> <p>使用map指令:<br /> 可以使用map指令来创建一个映射,将请求的文件名与对应的.gz文件名关联起来,并在try_files指令中使用该映射进行处理:</p> <p>map $uri $gzip_file {<br /> default "";<br /> ~^(?&#60;path&#62;.+)\.(?&#60;ext&#62;[^.]+)$ $path.$ext.gz;<br /> }</p> <p>server {&#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11794">nginx 用try_files 时,gzip_static不起作用,如何解决</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/3/3
阅读更多

使用静态 gzip 后,Nginx 速度更快!设置方法和压缩方法说明

<p><strong>用gzip静态加速!</strong></p> <p>这绝对是你应该做的事情。<br /> 并不是特别麻烦,而且效果也很突出。</p> <p>这解释了 <a class="wpal-linked-keyword" href="https://nginx.p2hp.com/" target="_blank">Nginx</a> 中的 gzip_static。<span id="more-11783"></span></p> <div id="toc"> <div class="mokuji">目录</div> <div id="mokuji-list"> <ol> <li><a class="mokuji-a" href="https://doudonn.com/saba/2331/#heading1" target="_blank" rel="nofollow noopener">1.不使用gzip static时的gzip处理</a></li> <li><a class="mokuji-a" href="https://doudonn.com/saba/2331/#heading2" target="_blank" rel="nofollow noopener">2.使用gzip static时的gzip处理</a></li> <li><a class="mokuji-a" href="https://doudonn.com/saba/2331/#heading3" target="_blank" rel="nofollow noopener">3.使用gzip static的优点</a></li> <li><a class="mokuji-a" href="https://doudonn.com/saba/2331/#heading4" target="_blank" rel="nofollow noopener">4. 需要一个模块才能在 Nginx 中使用 gzip static</a></li> <li><a class="mokuji-a" href="https://doudonn.com/saba/2331/#heading5" target="_blank" rel="nofollow noopener">5.如何在Nginx上配置gzip静态</a></li> <li><a class="mokuji-a" href="https://doudonn.com/saba/2331/#heading6" target="_blank" rel="nofollow noopener">6. 如何使用gzip压缩</a></li> <li><a class="mokuji-a" href="https://doudonn.com/saba/2331/#heading7" target="_blank" rel="nofollow noopener">7. 需要压缩的文件</a></li> </ol> </div> </div> <h2 id="heading1">1.不使用gzip static时的gzip处理</h2> <p><img referrerpolicy="no-referrer" loading="lazy" loading="lazy" class="aligncenter size-full wp-image-11784" src="https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-2.jpg" alt="Nginx 不使用 gzip_static 时 gzip 处理的说明" width="1187" height="615" srcset="https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-2.jpg 1187w, https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-2-300x155.jpg 300w, https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-2-1024x531.jpg 1024w, https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-2-768x398.jpg 768w" sizes="(max-width: 1187px) 100vw, 1187px" /></p> <p><strong>如果你不使用gzip_static而只是“gzip on”,它每次都会被压缩并发送。</strong></p> <p>虽然它实际上可能缓存在内存中,但传统<br /> 观点是“每次都会执行压缩处理,因此 CPU 负载很大。”<br /> 因此,我每次都想停止处理它。</p> <p>“gzip_static”可以实现这一点。</p> <h2 id="heading2">2.使用gzip static时的gzip处理</h2> <p><img referrerpolicy="no-referrer" loading="lazy" loading="lazy" class="aligncenter size-full wp-image-11785" src="https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-1.jpg" alt="Nginx中开启gzip_static时gzip处理的说明" width="1187" height="617" srcset="https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-1.jpg 1187w, https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-1-300x156.jpg 300w, https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-1-1024x532.jpg 1024w, https://blog.p2hp.com/wp-content/uploads/2024/02/p2331-1-768x399.jpg 768w" sizes="(max-width: 1187px) 100vw, 1187px" /></p> <p><strong>它将搜索“gz”文件并为您使用!</strong></p> <p>如果是“style.css”,它将自动搜索文件“style.css.gz”。<br /> 如果找到,则返回它;如果没有,则照常压缩“style.css”。&#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11783">使用静态 gzip 后,Nginx 速度更快!设置方法和压缩方法说明</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/2/1
阅读更多

简单一招竟把 nginx 服务器性能提升 50 倍

<h2>需求背景</h2> <p>接到重点业务需求要分轮次展示数据,预估最高承接 9w 的 QPS,作为后端工程师下意识的就是把接口写好,分级缓存、机器扩容、线程拉满等等一系列连招准备,再因为数据更新频次两只手都数得过来,我们采取了最稳妥的处理方式,直接生成静态文件拿 CDN 抗量<span id="more-11776"></span></p> <p>架构流程大致如下所示:</p> <p><img referrerpolicy="no-referrer" loading="lazy" loading="lazy" class="aligncenter size-full wp-image-11777" src="https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59FwLpwnTQRa2sueb..jpg" alt="" width="671" height="201" srcset="https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59FwLpwnTQRa2sueb..jpg 671w, https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59FwLpwnTQRa2sueb.-300x90.jpg 300w" sizes="(max-width: 671px) 100vw, 671px" /></p> <p>数据更新后会重新生成新一轮次的文件,刷新 CDN 的时候会触发大量回源请求,应用服务器极端情况得 hold 住这 9w 的 QPS</p> <h2>第一次压测</h2> <p>双机房一共 40 台 4C 的机器,25KB 数据文件,5w 的 QPS 直接把 CPU 打到 90%</p> <p>这明显不符合业务需求啊,咋办?先无脑加机器试试呗</p> <p>就在这时测试同学反馈压测的数据不对,最后一轮文件最大会有 125KB,雪上加霜</p> <p>于是乎文件替换,机器数量整体翻一倍扩到 80 台,服务端 CPU 依然是瓶颈,QPS 加不上去了</p> <p><img referrerpolicy="no-referrer" loading="lazy" loading="lazy" class="aligncenter size-full wp-image-11778" src="https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59591UDaNqz2ejKgeO.png" alt="" width="3336" height="1954" srcset="https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59591UDaNqz2ejKgeO.png 3336w, https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59591UDaNqz2ejKgeO-300x176.png 300w, https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59591UDaNqz2ejKgeO-1024x600.png 1024w, https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59591UDaNqz2ejKgeO-768x450.png 768w, https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59591UDaNqz2ejKgeO-1536x900.png 1536w, https://blog.p2hp.com/wp-content/uploads/2024/02/2024-01-02-11-59591UDaNqz2ejKgeO-2048x1200.png 2048w" sizes="(max-width: 3336px) 100vw, 3336px" /></p> <p>到底是哪里在消耗 CPU &#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11776">简单一招竟把 nginx 服务器性能提升 50 倍</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/2/1
阅读更多

Chrome 浏览器禁用三方 Cookies,今天已经开始全球 1% 的灰度,这个问题也折腾了我好几天,踩到一些坑

<p>Chrome 浏览器禁用三方 Cookies,今天已经开始全球 1% 的灰度,这个问题也折腾了我好几天,踩到一些坑。</p> <p>1)禁用三方 Cookies 是 Google 搞的 Privacy-Sandbox 项目的子项,最主要的目的是为了保护用户的在线隐私,但从厂商角度来看,这也是 Google 对数字广告业的一次主动出击,未来广告主推送广告的精准度将更大程度依赖 Google 系统或平台提供的能力;对应的,苹果在 iOS 14 也推出了 App Tracking Transparency(ATT)技术,目的也是为了提高用户隐私透明度,看资讯说这项技术让 Facebook 损失了 100 亿美元的广告收入,而苹果自身却没有受到此规则的限制。<span id="more-11774"></span></p> <p>2)禁用三方 Cookies,类似的还有禁用三方 Storage,这意味着未来跨站点的用户隐私信息收集将被强约束,例如 A 网站嵌入了 B 网站的内容,用户在 B 网站中储存的所有信息,包括 Cookies、LocalStorage、Cache 等等一大堆的东西,在 A 网站下默认都不允许使用(因为这些储存是根据域名分区的),这也会带来一些负面问题,假设你的网站(如文档类、流程图工具、代码演示工具等)大量被人内嵌,同时要求登录才能被使用,那意味着用户需要在每个内嵌你网站的地方重新登陆一次才能正常使用。</p> <p>3)为了实现跨域数据交互,最通用的做法是在 &#8230;</p> <p>The post <a href="https://blog.p2hp.com/archives/11774">Chrome 浏览器禁用三方 Cookies,今天已经开始全球 1% 的灰度,这个问题也折腾了我好几天,踩到一些坑</a> first appeared on <a href="https://blog.p2hp.com">Lenix Blog</a>.</p>

2024/1/30
阅读更多