<?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</title>
    <link>http://wfcoding.com/</link>
    <description>Recent content on 有趣的AI</description>
    <generator>Hugo -- 0.125.7</generator>
    <language>zh</language>
    <copyright>火云</copyright>
    <lastBuildDate>Wed, 08 Oct 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://wfcoding.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[合集]本地大模型编程实战</title>
      <link>http://wfcoding.com/articles/practice/03%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%BC%96%E7%A8%8B%E5%AE%9E%E6%88%98/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/03%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%BC%96%E7%A8%8B%E5%AE%9E%E6%88%98/</guid>
      <description>&lt;p&gt;此系列文章讲述了：如何在普通电脑上自己写代码完成常见的基于大语言模型能力的任务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[合集]从零搭建langchain&#43;本地大模型&#43;本地矢量数据库的RAG系统</title>
      <link>http://wfcoding.com/articles/practice/01%E4%BB%8E%E9%9B%B6%E6%90%AD%E5%BB%BAlangchain&#43;%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B&#43;%E6%9C%AC%E5%9C%B0%E7%9F%A2%E9%87%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84rag%E7%B3%BB%E7%BB%9F/</link>
      <pubDate>Thu, 10 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/01%E4%BB%8E%E9%9B%B6%E6%90%AD%E5%BB%BAlangchain&#43;%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B&#43;%E6%9C%AC%E5%9C%B0%E7%9F%A2%E9%87%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84rag%E7%B3%BB%E7%BB%9F/</guid>
      <description>&lt;p&gt;此系列文章详细的阐述了如何从第一行代码开始搭建一个可以运行完全在本地服务器的&lt;code&gt;RAG&lt;/code&gt;(&lt;code&gt;Retrieval Augmented Generation&lt;/code&gt;)系统，包含了详细的步骤说明和代码，它是保姆级教程。&lt;br&gt;
它主要包含以下功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用本地大语言模型做语言翻译&lt;/li&gt;
&lt;li&gt;使用本地大语言模型做专业领域的知识问答&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&#34;position:relative;width:100%;height:315px;&#34;&gt;
  &lt;iframe src=&#34;assert/vuetify_langchian_rag_demo.mp4&#34; style=&#34;position:absolute;top:0;left:0;width:100%;height:100%;&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;从系统架构来看，本系统包含了前端、API网关、后台服务三大部分：
&lt;img loading=&#34;lazy&#34; src=&#34;assert/arch.png&#34; alt=&#34;基本架构&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>[合集]veutify3入门实战</title>
      <link>http://wfcoding.com/articles/practice/02vuetify3%E7%BC%96%E7%A8%8B%E5%AE%9E%E6%88%98/</link>
      <pubDate>Sun, 15 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/02vuetify3%E7%BC%96%E7%A8%8B%E5%AE%9E%E6%88%98/</guid>
      <description>&lt;p&gt;此系列文章通过几个详细的经典案例，演示了如何从使用&lt;code&gt;vuetify3&lt;/code&gt;前端框架快速开发简单的web程序。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【保姆级教程】自己搭建AI大模型实验室</title>
      <link>http://wfcoding.com/articles/deploy/d05/</link>
      <pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/deploy/d05/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;如果我比别人看得更远，那是因为我站在巨人的肩上。 &amp;ndash; 艾萨克·牛顿&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不知道您是否像我一样：希望自己能有一个完全本地部署的AI实验室，它有可视化界面，可以与大模型聊天，可以做智能体，还可以提供标准化的接口&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/chatboxai/chatbox&#34;&gt;Chatbox&lt;/a&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;a href=&#34;https://github.com/langgenius/dify&#34;&gt;Dify&lt;/a&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;a href=&#34;https://ollama.com/&#34;&gt;Ollama&lt;/a&gt;&lt;/strong&gt; 与 Qwen（通义千问）大模型完全可以整合在一起，且整合后能形成 “本地模型 + 可视化开发管理 + 多端交互” 的完整 AI 应用链路。四者的定位互补性强，整合核心逻辑是 &lt;strong&gt;Ollama 负责本地运行 Qwen 模型 → Dify 提供模型管理与应用开发能力 → Chatbox 作为轻量客户端实现多端交互&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;系统/模型&lt;/th&gt;
&lt;th&gt;核心定位&lt;/th&gt;
&lt;th&gt;关键角色&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;轻量本地大模型运行框架&lt;/td&gt;
&lt;td&gt;「模型载体」：简化本地模型部署，支持一键启动 Qwen、Llama 等开源模型，提供 API 接口供外部调用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen（通义千问）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;阿里开源大模型（如 Qwen-8B/14B）&lt;/td&gt;
&lt;td&gt;「核心能力源」：提供对话、生成、推理等 AI 能力，需依赖 Ollama 或其他框架运行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dify&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;开源 LLM 应用开发平台&lt;/td&gt;
&lt;td&gt;「开发与管理中枢」：支持接入 Ollama 部署的 Qwen 模型，提供可视化 workflow、RAG 检索、Agent 工具链，可快速搭建 AI 应用（如问答系统、智能助手）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chatbox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多端 AI 客户端&lt;/td&gt;
&lt;td&gt;「交互入口」：支持接入 Dify 或 Ollama 的 API，提供桌面（Windows/Mac/Linux）、移动端（iOS/Android）的轻量交互界面，优化用户使用体验&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;下面我们就一步一步的把这个AI实验室搭建起来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【保姆级教程】用dify搭建智能体Agent</title>
      <link>http://wfcoding.com/articles/deploy/d04/</link>
      <pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/deploy/d04/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/langgenius/dify&#34;&gt;&lt;strong&gt;dify&lt;/strong&gt;&lt;/a&gt; 是一个开源的 LLM 应用开发平台，其核心功能包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;工作流：可在画布上构建和测试强大的 AI 工作流程。&lt;/li&gt;
&lt;li&gt;全面的模型支持：与数百种专有 / 开源 LLMs 及数十种推理提供商和自托管解决方案无缝集成，支持 GPT、Mistral、Llama3、qwen 等及任何与 OpenAI API 兼容的模型。&lt;/li&gt;
&lt;li&gt;Prompt IDE：提供直观界面，用于制作提示、比较模型性能及为聊天类应用添加文本转语音等功能。&lt;/li&gt;
&lt;li&gt;RAG Pipeline：具备广泛的 RAG 功能，涵盖文档摄入到检索，支持从 PDF、PPT 等常见文档格式提取文本。&lt;/li&gt;
&lt;li&gt;Agent 智能体：可基于 LLM 函数调用或 ReAct 定义 Agent，提供 50 多种内置工具如谷歌搜索、DALL・E 等。&lt;/li&gt;
&lt;li&gt;LLMOps：能监测和分析应用日志与性能，基于生产数据和注释持续改进提示、数据集及模型。&lt;/li&gt;
&lt;li&gt;Backend-as-a-Service：所有功能都提供 API，便于将 Dify 集成到自有业务逻辑中。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;本文将把详细的讲述搭建 &lt;strong&gt;dify&lt;/strong&gt; 并且用它的 &lt;code&gt;Chatflow&lt;/code&gt; 搭建智能体应用的过程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>构建chatbox的web版本的docker镜像</title>
      <link>http://wfcoding.com/articles/deploy/d03/</link>
      <pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/deploy/d03/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/chatboxai/chatbox&#34;&gt;&lt;strong&gt;Chatbox&lt;/strong&gt;&lt;/a&gt; 是一款开源的跨平台 AI 聊天客户端，核心功能是聚合管理多个 AI 模型，并提供更高效、隐私可控的对话体验。&lt;br&gt;
&lt;code&gt;Chatbox&lt;/code&gt; 默认支持桌面端 &lt;code&gt;Electron&lt;/code&gt; 应用，在构建纯 web 的 docker 容器时，需要自定义构建过程。&lt;br&gt;
最近我因为构建&lt;strong&gt;AI实验室&lt;/strong&gt;的需要，希望构建 &lt;code&gt;Chatbox&lt;/code&gt; 的纯web的docker镜像，然后部署在服务器上，方便大家使用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个过程比较艰辛，希望它能让您少走弯路：）&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>在ubuntu中离线部署ollama和大模型qwen</title>
      <link>http://wfcoding.com/articles/deploy/d02/</link>
      <pubDate>Sun, 05 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/deploy/d02/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Ollama&lt;/code&gt; 是一个致力于让每个人都能在本地设备上自由运行大型语言模型的开源平台。它可以在 &lt;code&gt;windows&lt;/code&gt; 和 &lt;code&gt;linux&lt;/code&gt; 平台上运行，即支持 &lt;code&gt;GPU&lt;/code&gt; ，也支持 &lt;code&gt;CPU&lt;/code&gt;，使用起来很方便。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文介绍了如何在ubuntu中离线部署  &lt;code&gt;ollama&lt;/code&gt; 和大模型 &lt;code&gt;qwen3&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在ubuntu中离线安装docker和docker-compose</title>
      <link>http://wfcoding.com/articles/deploy/m01/</link>
      <pubDate>Sat, 04 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/deploy/m01/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;docker&lt;/code&gt; 作为容器化技术的代表，其核心优势在于解决了 &lt;strong&gt;软件在不同环境中运行不一致&lt;/strong&gt; 的痛点，并通过轻量级虚拟化、标准化部署等特性显著提升了开发、测试和运维效率。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在绝大部分场合，掌握了 &lt;code&gt;docker&lt;/code&gt; 和 &lt;code&gt;docker-compose&lt;/code&gt; 就足够应对一般的应用场景了，本文将讲述在服务器不连接互联网的情况下，如何在ubuntu中离线部署 &lt;code&gt;docker&lt;/code&gt; 和 &lt;code&gt;docker-compose&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何选择FAISS的索引类型</title>
      <link>http://wfcoding.com/articles/practice/0115/</link>
      <pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0115/</guid>
      <description>&lt;p&gt;在之前的文章中，我们系统性的介绍了 &lt;a href=&#34;http://wfcoding.com/articles/programmer/p13/&#34;&gt;嵌入和语义检索&lt;/a&gt; 以及 &lt;a href=&#34;http://wfcoding.com/articles/programmer/p14/&#34;&gt;向量相似度&lt;/a&gt;。&lt;br&gt;
本文将在&lt;strong&gt;语义检索&lt;/strong&gt;领域探讨更加接近实战的话题：如何如何选择FAISS的索引类型。&lt;br&gt;
&lt;strong&gt;Faiss&lt;/strong&gt; 是一个用于高效相似性搜索和密集向量聚类的库。它使用 C++ 编写，并提供了完整的 Python 封装。 可以在 CPU 上运行，只是一些最有用的算法是在 GPU 上实现的。它的主要功能是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;k-NN 检索&lt;/strong&gt;: 不仅返回最近的邻居，还返回第二近、第三近、……、第 k 近的邻居；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;批量处理&lt;/strong&gt;: 一次搜索多个向量，而不是一次搜索一个。 对于许多索引类型，这比一个接一个地搜索向量更快；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;以精度换取速度&lt;/strong&gt;: 以 10% 的不正确结果为代价，换取 10 倍的速度或使用更少的内存；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;范围搜索&lt;/strong&gt;：返回查询点给定半径内的所有元素；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地存储&lt;/strong&gt;： 将索引存储在磁盘上而不是在 RAM 中；&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(9)向量相似度（vector similarity）</title>
      <link>http://wfcoding.com/articles/theory/p14/</link>
      <pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p14/</guid>
      <description>&lt;p&gt;在之前的文章 &lt;a href=&#34;http://wfcoding.com/articles/programmer/p13/&#34;&gt;嵌入和语义检索&lt;/a&gt; 中，我们了解了把文本变成向量的方法，由于这些向量相当于将文本做了分类：&lt;strong&gt;语义相近的距离越近&lt;/strong&gt;，所以这些向量就可以很方便的应用于&lt;strong&gt;语义检索&lt;/strong&gt;场景了。&lt;/p&gt;
&lt;p&gt;比较向量相似度（vector similarity）的常见算法主要分为两大类：&lt;/p&gt;
&lt;p&gt;1️⃣ &lt;strong&gt;基于“角度/方向”的度量&lt;/strong&gt;&lt;br&gt;
2️⃣ &lt;strong&gt;基于“距离/差异”的度量&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下面我们系统的整理一下。&lt;/p&gt;
&lt;hr&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(8)嵌入和语义检索</title>
      <link>http://wfcoding.com/articles/theory/p13/</link>
      <pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p13/</guid>
      <description>&lt;p&gt;&lt;strong&gt;语义检索&lt;/strong&gt;是指系统能够理解用户查询的深层含义（语义），而不仅仅是匹配字面关键词。它通过分析上下文、同义词、相关概念等，查找与查询意图最相关的信息，即使文档中没有完全相同的词语。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;与关键词检索的区别：&lt;/strong&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;/ul&gt;
&lt;p&gt;&lt;strong&gt;简单来说&lt;/strong&gt;：关键词检索是“找词”，语义检索是“懂意”。&lt;br&gt;
例如：如果用关键词检索“苹果”，那么可能找到我们吃的苹果以及苹果公司的相关信息；而语义检索会考虑检索内容的上下文，它能断定这个苹果是“苹果公司”，所以只会检索“苹果公司”的相关内容出来。&lt;/p&gt;
&lt;hr&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(7)vLLM和ollama</title>
      <link>http://wfcoding.com/articles/theory/p12/</link>
      <pubDate>Mon, 29 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p12/</guid>
      <description>&lt;p&gt;&lt;strong&gt;vLLM&lt;/strong&gt;(Virtual Large Language Model) 和 &lt;strong&gt;Ollama&lt;/strong&gt; 都是用于运行大语言模型 &lt;strong&gt;大语言模型/LLM&lt;/strong&gt; 的工具，旨在降低本地部署和使用大模型的门槛。应用程序可以通过它们的统一接口，使用不同大模型。&lt;/p&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(6)Fine-tuning和RAG</title>
      <link>http://wfcoding.com/articles/theory/p11/</link>
      <pubDate>Sun, 28 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p11/</guid>
      <description>&lt;p&gt;&lt;strong&gt;大语言模型/LLM&lt;/strong&gt; 通常是由海量通用知识（如语法、常识、逻辑）训练的，在面对具体场景（如医疗问诊、法律文书生成）时，能力往往不足。&lt;br&gt;
&lt;strong&gt;Fine-tuning/微调&lt;/strong&gt; 正是为解决这一问题而生的核心技术，其本质是在预训练模型的基础上，用特定领域 / 任务的小数据集进一步训练，让模型 &lt;strong&gt;适配具体需求&lt;/strong&gt;，最终输出更精准、更贴合场景的结果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(5)MoE</title>
      <link>http://wfcoding.com/articles/theory/p10/</link>
      <pubDate>Sat, 27 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p10/</guid>
      <description>&lt;p&gt;&lt;strong&gt;MoE&lt;/strong&gt;(Mixture of Experts,专家混合模型）)是当前大模型（尤其是 GPT-4、Gemini、Mixtral、DeepSeek 等）架构中非常核心的一个概念。&lt;br&gt;
&lt;strong&gt;MoE&lt;/strong&gt; 的思想非常直白：不同的 &lt;code&gt;专家/Expert&lt;/code&gt; 只负责处理自己擅长的那一类输入，而不是让整个模型的所有参数都去处理所有任务。&lt;br&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;image/MoE.jpg&#34; alt=&#34;MoE架构图&#34;  /&gt;
&lt;br&gt;
也就是说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个 &lt;strong&gt;MoE&lt;/strong&gt; 模型内部其实包含了很多个“子网络”（这些子网络叫做 &lt;code&gt;专家/Expert&lt;/code&gt;）；&lt;/li&gt;
&lt;li&gt;每次输入一句话或一段文本时，模型不会激活所有 &lt;code&gt;专家/Expert&lt;/code&gt;，而是通过一个 &lt;code&gt;路由/Router&lt;/code&gt;来挑选 最合适的几个专家；&lt;/li&gt;
&lt;li&gt;只有被选中的那几个 &lt;code&gt;专家/Expert&lt;/code&gt; 会参与这次计算，从而节省大量算力。&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(39)MCP实战演练</title>
      <link>http://wfcoding.com/articles/practice/0339/</link>
      <pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0339/</guid>
      <description>&lt;p&gt;之前两篇文章:&lt;a href=&#34;http://wfcoding.com/articles/programmer/p08/&#34;&gt;MCP简介&lt;/a&gt;和&lt;a href=&#34;http://wfcoding.com/articles/programmer/p09/&#34;&gt;MCP能做什么&lt;/a&gt;阐述了MCP的基本概念和原理。&lt;br&gt;
本文将使用&lt;code&gt;Visual Studio Code&lt;/code&gt;写一个&lt;code&gt;MCP服务端&lt;/code&gt;和&lt;code&gt;MCP客户端&lt;/code&gt;，演示&lt;strong&gt;MCP&lt;/strong&gt;的基本功能。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;MCP版本迭代很快，能用把代码顺利跑起来并不是一件容易的事：）&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(4)MCP能做什么</title>
      <link>http://wfcoding.com/articles/theory/p09/</link>
      <pubDate>Thu, 25 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p09/</guid>
      <description>&lt;p&gt;在上一篇文章 &lt;a href=&#34;http://wfcoding.com/articles/programmer/p08/&#34;&gt;MCP简介&lt;/a&gt; 中，我们对 &lt;strong&gt;MCP&lt;/strong&gt;(Model Context Protocol)  有了一个概念上的认识，本文将更加深入的介绍 &lt;strong&gt;MCP&lt;/strong&gt; 的架构和功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(3)MCP简介</title>
      <link>http://wfcoding.com/articles/theory/p08/</link>
      <pubDate>Wed, 24 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p08/</guid>
      <description>&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt;(Model Context Protocol) 是由 Anthropic 在 2024 年 11 月提出并开源的一个协议标准，目的是统一 AI 模型（尤其是大语言模型） 与外部资源 / 工具 / 数据源之间的交互方式。&lt;br&gt;
MCP 被比喻为 AI 的 “USB-C 接口” —— 就像 USB-C 为各种外设提供统一接口一样，MCP 为 AI 模型与各类资源之间提供统一、标准化的接口。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OpenAI 在 2025 年 3 月宣布其 Agents SDK 已支持 MCP，从而使 OpenAI 的生态也兼容该协议。&lt;br&gt;
多家厂商和工具也在采纳 MCP，包括 IDE、插件、代理框架、知识库 / 应用平台等。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(38)实现一个通用的大模型客户端</title>
      <link>http://wfcoding.com/articles/practice/0338/</link>
      <pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0338/</guid>
      <description>&lt;p&gt;由于大部分AI平台提供的API/接口都兼容 &lt;code&gt;OpenAI API&lt;/code&gt; ,所以我们可以使用 &lt;code&gt;OpenAI SDK&lt;/code&gt; 实现通用的 &lt;code&gt;LLM（大语言模型）&lt;/code&gt; 客户端。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;关于 &lt;code&gt;OpenAI API&lt;/code&gt; 更多内容，可参考 &lt;a href=&#34;http://wfcoding.com/articles/programmer/p07/&#34;&gt;程序员应该熟悉的概念(2)OpenAI API&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文讲述了如何实现一个简单的&lt;strong&gt;大模型客户端&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(2)OpenAI API</title>
      <link>http://wfcoding.com/articles/theory/p07/</link>
      <pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p07/</guid>
      <description>&lt;p&gt;大名鼎鼎的 &lt;strong&gt;OpenAI&lt;/strong&gt; 发布之后，其 &lt;strong&gt;OpenAI API规范&lt;/strong&gt; 逐渐成了事实上的工业标准，很多大模型API都兼容这个规范。这也就意味着：OpenAI的SDK可以使用很多大模型。&lt;/p&gt;
&lt;p&gt;兼容 &lt;strong&gt;OpenAI API规范&lt;/strong&gt; 的大模型API包括：百炼、本地部署的Ollama、Anthropic（Claude 系列）、Mistral、Google DeepMind (Gemini)、Cohere、xAI（Elon Musk 团队）&amp;hellip;&lt;/p&gt;
&lt;p&gt;下面我们简单了解一下 &lt;strong&gt;OpenAI API规范&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>程序员应该熟悉的概念(1)RESTful</title>
      <link>http://wfcoding.com/articles/theory/p06/</link>
      <pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p06/</guid>
      <description>&lt;p&gt;在这个前后端分离（前端和后端均为独立的应用，只通过API/接口通信）成为应用编程主流的时代，&lt;strong&gt;RESTful&lt;/strong&gt; 规范（REST全称是：Representational State Transfer）应该是程序员&lt;strong&gt;必须掌握&lt;/strong&gt;的API/接口设计规范。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;RESTful&lt;/strong&gt; 规范是一种基于 HTTP 协议设计网络接口的架构风格，旨在构建&lt;strong&gt;可扩展&lt;/strong&gt;、&lt;strong&gt;清晰&lt;/strong&gt;、&lt;strong&gt;易于理解&lt;/strong&gt;的 Web 服务。&lt;br&gt;
其核心思想是将资源作为中心，通过标准的 HTTP 方法对资源进行操作，强调无状态通信和统一接口。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(37)使用知识图谱增强RAG(3)</title>
      <link>http://wfcoding.com/articles/practice/0337/</link>
      <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0337/</guid>
      <description>&lt;p&gt;本文将简单介绍如何使用 &lt;a href=&#34;https://github.com/HKUST-KnowComp/AutoSchemaKG&#34;&gt;&lt;strong&gt;AutoSchemaKG&lt;/strong&gt;&lt;/a&gt; 提升 &lt;strong&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/strong&gt; 的问答效果。实现的主要思路是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;解析知识图谱文件&lt;/strong&gt;：用 &lt;strong&gt;NetworkX&lt;/strong&gt; 解析 &lt;strong&gt;GraphML&lt;/strong&gt; 知识图谱文件；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;嵌入&lt;/strong&gt;：用 &lt;strong&gt;FAISS&lt;/strong&gt; (Facebook AI Similarity Search) 矢量化节点（实体、事件、概念），并将边的 “源节点 + 关系 + 目标节点” 拼接为字符串之后再做嵌入；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语义检索&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;检索 “源节点 + 关系 + 目标节点” 的矢量库，找出最相似的文档，再用 大语言模型（LLM）对结果进一步筛选，筛选出节点；&lt;/li&gt;
&lt;li&gt;检索相似的 passage(文本段落)；&lt;/li&gt;
&lt;li&gt;将上述包含分数的结果合并，将分数作为初始权重，通过 &lt;strong&gt;NetworkX&lt;/strong&gt; 的 &lt;strong&gt;Pagerank&lt;/strong&gt; 方法在 知识图谱 中通过节点间的关联关系传播权重，权重更新后，选择权重最高的 passage(文本段落) 为结果。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PageRank 核心原理&lt;/strong&gt;（知识图谱场景）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;给节点赋予初始权重（与查询相关的节点权重高）&lt;/li&gt;
&lt;li&gt;每个节点将自身权重按 “出边数量” 平均分配给相邻节点（例如，节点 A 有 2 条出边，就将自身权重的 1/2 分别传给两个邻居）&lt;/li&gt;
&lt;li&gt;迭代传播，直到权重分布稳定（误差小于 tol），最终每个节点的 pr[node] 即为 “综合相关度分数”。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过&lt;strong&gt;权重传播&lt;/strong&gt;，与查询节点间接关联的节点（例如 “苹果手机”→“苹果公司”→“芯片供应商”）也能获得较高分数，挖掘出 “字面不直接匹配但语义相关” 的内容。&lt;br&gt;
传统的 &lt;strong&gt;RAG&lt;/strong&gt;(Retrieval Augmented Generation,检索增强生成) 一般是直接查询返回相似的 passage(文本段落)，没有上述&lt;strong&gt;通过知识图谱调整权重&lt;/strong&gt;的过程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(36)使用知识图谱增强RAG(2)生成知识图谱</title>
      <link>http://wfcoding.com/articles/practice/0336/</link>
      <pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0336/</guid>
      <description>&lt;p&gt;本文将简单介绍如何把文本生成 &lt;strong&gt;知识图谱&lt;/strong&gt;（Knowledge Graph）。具体来说，是使用开源项目 &lt;a href=&#34;https://github.com/HKUST-KnowComp/AutoSchemaKG&#34;&gt;AutoSchemaKG&lt;/a&gt; 生成 &lt;strong&gt;GraphML&lt;/strong&gt; 。&lt;br&gt;
&lt;strong&gt;GraphML&lt;/strong&gt; 是 XML（Extensible Markup Language） 格式的文件，可以使用 &lt;strong&gt;NetworkX&lt;/strong&gt; 等框架轻松处理这种格式的文件。下图是一个典型的 GraphML ：&lt;br&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;assert/gaphml.png&#34; alt=&#34;GraphML样例&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(35)使用知识图谱增强RAG(1)知识图谱简介</title>
      <link>http://wfcoding.com/articles/practice/0335/</link>
      <pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0335/</guid>
      <description>&lt;p&gt;&lt;strong&gt;知识图谱&lt;/strong&gt;（Knowledge Graph）本质上是一种结构化的语义知识库，它以 “实体 - 关系 - 实体” 的三元组形式，将现实世界中的概念、实体及其关联关系进行建模和存储，核心目标是让机器能够像人一样理解和运用知识。下图就是一个典型的知识图谱：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;assert/knowledgegraph.png&#34; alt=&#34;知识图谱例子&#34;  /&gt;
&lt;/p&gt;
&lt;p&gt;知识图谱的主要特点是建立了“知识”之间的关联，所以它的强项是 &lt;strong&gt;推理&lt;/strong&gt; ，&lt;strong&gt;HugeGraph&lt;/strong&gt; 、&lt;strong&gt;NetworkX&lt;/strong&gt; 支持 &lt;strong&gt;PageRank&lt;/strong&gt;（在后面RAG中会用到）、k-短路、LPA（标签传播算法）、Jaccard 相似度 等算法。有了这些支持，它在 搜索引擎 、智能问答&lt;strong&gt;RAG&lt;/strong&gt;（Retrieval Augmented Generation,检索增强生成） 等领域都有广泛的应用，可以明显提升这些领域应用的智能化水平。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(34)使用faiss实现语义检索</title>
      <link>http://wfcoding.com/articles/practice/0334/</link>
      <pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0334/</guid>
      <description>&lt;p&gt;&lt;strong&gt;FAISS&lt;/strong&gt;（Facebook AI Similarity Search）是 Facebook AI 研究院开发的一款高效的向量相似性搜索库，专门用于优化大规模高维向量的近邻搜索任务，广泛应用于语义检索、图像检索、推荐系统等场景。&lt;br&gt;
本文将详细介绍如何使用  &lt;strong&gt;FAISS&lt;/strong&gt; 实现语义检索。具体内容包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将内容矢量化并保存为索引&lt;/li&gt;
&lt;li&gt;在保存索引的同时，保存每条信息的相关信息metadata&lt;/li&gt;
&lt;li&gt;通过矢量库进行语义检索&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;语义检索&lt;/strong&gt;是一种基于内容含义（语义）而非表面关键词的信息检索技术，核心目标是让计算机 “理解” 用户查询的真实意图，从而返回含义相关的结果，而非仅匹配字面关键词的内容。&lt;br&gt;
传统检索（如早期搜索引擎）依赖关键词匹配，例如用户搜索 “如何缓解头痛”，仅会返回包含 “缓解”“头痛” 等字面词汇的内容，若某篇文章写 “应对偏头痛的方法”（未出现 “缓解”“头痛”），则会被遗漏。
语义检索则通过语义嵌入（Embedding） 技术解决这一问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将文本转化为 “语义向量”：用 AI 模型（如 BERT、BGE-M3 等）把用户的查询、待检索的文档（句子 / 段落）都转化为高维向量（类似 “数字指纹”），向量的相似度直接对应内容语义的相似度。&lt;/li&gt;
&lt;li&gt;通过向量相似度匹配结果：计算 “查询向量” 与 “文档向量” 的相似度（如余弦相似度），排序后返回相似度最高的内容，实现 “含义相关即匹配”。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>使用NetworkX查询GraphML图数据</title>
      <link>http://wfcoding.com/articles/theory/p05/</link>
      <pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p05/</guid>
      <description>&lt;p&gt;当遇到展示小规模图谱时，使用 &lt;strong&gt;Nextworkx&lt;/strong&gt; 和 &lt;strong&gt;GraphML&lt;/strong&gt; 是一种性价比很高的解决方案。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;GraphML&lt;/strong&gt; 是通用的图数据交换格式，负责图数据的存储和跨工具共享。&lt;br&gt;
&lt;strong&gt;NetworkX&lt;/strong&gt; 是 Python 中一个强大的 网络（图）分析与操作库，它可以处理 GraphML ，还提供丰富的图算法。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文使用 &lt;strong&gt;Nextworkx&lt;/strong&gt; 实现查询 &lt;strong&gt;GraphML&lt;/strong&gt; 图数据的功能。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;查询根节点，支持分页&lt;/li&gt;
&lt;li&gt;查询某个节点的子图结构：即它的子节点以及子节点对应的边和下一级节点&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>内网的服务如何能在公网使用？</title>
      <link>http://wfcoding.com/articles/programmer/m05/</link>
      <pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/programmer/m05/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;我在内网中有很棒的服务资源，但是没有固定IP，如何能够在公网使用呢？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;要解决这种问题，内网穿透工具 &lt;strong&gt;frp（Fast Reverse Proxy）&lt;/strong&gt; 是一个很棒的选择：既然外网不能访问内网，那么就主动从内网打通到外网的通道！&lt;br&gt;
基本的原理是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前提条件
&lt;ul&gt;
&lt;li&gt;要有一台有公网地址的服务器【配置可以比较低】，内网服务器可以连接到这台公网服务器&lt;/li&gt;
&lt;li&gt;内网服务器安装frp客户端:frpc，公网服务器安装frp服务端:frps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;建立 “长连接”—— 打通内网到公网的 “通道”
&lt;ul&gt;
&lt;li&gt;内网设备启动 frpc 客户端，并加载配置文件（配置中包含 frps 的公网 IP、端口、认证信息等）。&lt;/li&gt;
&lt;li&gt;frpc 主动向公网的 frps 发起 TCP 长连接（默认用 8000 端口，可自定义），并维持这个连接（通过心跳机制防止断开）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;这一步是穿透的关键：由于内网设备没有公网 IP，公网无法主动 “找到” 内网设备，因此必须由内网的 frpc “主动出击”，与公网的 frps 建立连接，形成一条稳定的 “数据通道”。&lt;br&gt;
内网设备无法被公网访问的根本原因，是路由器的 NAT（网络地址转换）机制会隐藏内网 IP。frp 通过 “frpc 主动连接 frps” 的方式，让路由器将 frpc 与 frps 的连接加入 “NAT 映射表”，后续 frps 向 frpc 发送的数据（公网请求），会被路由器正确转发到内网的 frpc，从而实现 “穿透” NAT 的效果。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文通过一个具体的例子来展示如何使用内网穿透工具frp将内网的web服务推向公网。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://gofrp.org/zh-cn/docs/setup/#%E4%B8%8B%E8%BD%BD&#34;&gt;frp下载地址&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>使用pyHugeGraph查询HugeGraph图数据</title>
      <link>http://wfcoding.com/articles/theory/p04/</link>
      <pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p04/</guid>
      <description>&lt;p&gt;在实际项目中，我们经常会遇到类似下面的查询图数据库的需求：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查询根节点，根节点可能有多个，需要&lt;strong&gt;分页&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;点击根节点，查询其子节点以及子节点关联的边和更下一层的子节点&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;本文使用 &lt;strong&gt;pyHugeGraph&lt;/strong&gt; 实现上述查询 &lt;strong&gt;HugeGraph&lt;/strong&gt; 图数据库的功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(33)用SSE实现大模型的流式输出</title>
      <link>http://wfcoding.com/articles/practice/0333/</link>
      <pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0333/</guid>
      <description>&lt;p&gt;SSE(Server-Sent Events)是一种基于 HTTP 协议的服务器向客户端单向推送数据的技术，允许服务器主动向已建立连接的客户端持续发送事件流（如实时通知、更新数据等），无需客户端频繁轮询。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心特点&lt;/strong&gt;：基于 HTTP 长连接，单向通信（仅服务器→客户端），数据以 “事件” 格式传输（包含事件类型、数据体等结构化信息），天然支持断线重连。&lt;br&gt;
&lt;strong&gt;典型场景&lt;/strong&gt;：大语言模型（LLM）客户端、股票行情实时更新、新闻推送、系统通知等只需服务器主动下发数据的场景。&lt;/p&gt;
&lt;p&gt;它与websocket的主要区别是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若场景仅需 “服务器推数据给客户端”（单向），优先选 SSE（实现简单、基于 HTTP 无额外协议成本）&lt;/li&gt;
&lt;li&gt;若需 “客户端与服务器实时双向通信”（如聊天、互动），必须选 WebSocket（全双工能力是核心优势）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面我们使用大语言模型&lt;strong&gt;qwen3&lt;/strong&gt;实现翻译功能。它可以自动识别源语言，并翻译为目标语种。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;像千问这种大模型是基于多语言训练的，所以它支持中文、英文、法文、西班牙等多个语种的翻译。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是实现的效果：
&lt;img loading=&#34;lazy&#34; src=&#34;assert/demo.gif&#34; alt=&#34;前端显示LLM(大语言模型)的流式输出内容&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(32)用websocket显示大模型的流式输出</title>
      <link>http://wfcoding.com/articles/practice/0332/</link>
      <pubDate>Sun, 27 Apr 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0332/</guid>
      <description>&lt;p&gt;在与 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 对话时，如果每次都等 &lt;code&gt;LLM&lt;/code&gt; 处理完毕再返回给客户端，会显得比较卡顿，不友好。如何能够像主流的AI平台那样：可以一点一点吐出字符呢？&lt;br&gt;
本文将模仿后端流式输出文字，前端一块一块的显示文字。主要的实现路径是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LLM&lt;/code&gt; 采用 &lt;code&gt;qwen3&lt;/code&gt; ，使用 &lt;code&gt;stream&lt;/code&gt; 方式输出&lt;/li&gt;
&lt;li&gt;后端使用 &lt;code&gt;langchain&lt;/code&gt; 框架&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;fastapi&lt;/code&gt; 实现后端接口&lt;/li&gt;
&lt;li&gt;前后端之间使用 &lt;strong&gt;&lt;code&gt;websocket&lt;/code&gt;&lt;/strong&gt; 长连接通信&lt;/li&gt;
&lt;li&gt;前端使用一个简单的 &lt;code&gt;html5&lt;/code&gt; 网页做演示&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面是最终实现的效果：
&lt;img loading=&#34;lazy&#34; src=&#34;assert/demo.gif&#34; alt=&#34;前端流式显示LLM(大语言模型)的流式输出内容&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(31)用Map-Reduce从大文本中提取摘要</title>
      <link>http://wfcoding.com/articles/practice/0331/</link>
      <pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0331/</guid>
      <description>&lt;p&gt;在执行从文本中提取摘要的任务时，难免遇到大文本的情况：文本的长度超出了 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 的token限制。&lt;br&gt;
&lt;code&gt;LangGraph&lt;/code&gt; 提供了 &lt;code&gt;map-reduce&lt;/code&gt; 工作流，它先把大文本拆成小文档分别提取摘要，然后再提炼/压缩提取的摘要，直到最后提取的摘要的token长度满足既定要求。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;image/01.png&#34; alt=&#34;LangGraph的map-reduce工作流&#34;  /&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本次演练使用 &lt;code&gt;qwen2.5:7b&lt;/code&gt; 开源大模型。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(30)从文本提取摘要</title>
      <link>http://wfcoding.com/articles/practice/0330/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0330/</guid>
      <description>&lt;p&gt;本文将演练如何使用 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 提取文本摘要。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本次演练使用 &lt;code&gt;qwen2.5:7b&lt;/code&gt; 开源大模型。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(29)用大语言模型LLM查询图数据库NEO4J(2)</title>
      <link>http://wfcoding.com/articles/practice/0329/</link>
      <pubDate>Thu, 24 Apr 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0329/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;上一篇文章 &lt;a href=&#34;http://wfcoding.com/articles/practice/0328/&#34;&gt;用大语言模型LLM查询图数据库NEO4J(1)&lt;/a&gt; 介绍了使用&lt;code&gt;GraphQACypherChain&lt;/code&gt;查询&lt;code&gt;NEO4J&lt;/code&gt;。用它实现简单快捷，但是不容易定制，在生产环境中可能会面临挑战。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文将基于&lt;code&gt;langgraph&lt;/code&gt; 框架，用&lt;code&gt;LLM(大语言模型)&lt;/code&gt;查询图数据库&lt;code&gt;NEO4J&lt;/code&gt;。它可以定义清晰复杂的工作流，能应对比较复杂的应用场景。&lt;/p&gt;
&lt;p&gt;以下是即将实现的可视化&lt;code&gt;LangGraph&lt;/code&gt;流程：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;image/01.jpg&#34; alt=&#34;LangGraph查询图数据库NEO4J&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>在windows系统中安装图数据库NEO4J</title>
      <link>http://wfcoding.com/articles/theory/p03/</link>
      <pubDate>Thu, 24 Apr 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p03/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Neo4j&lt;/code&gt;是一个高性能的&lt;code&gt;NOSQL&lt;/code&gt;图形数据库，它将结构化数据存储在网络上而不是表中。&lt;br&gt;
&lt;code&gt;Neo4j&lt;/code&gt;也可以被看作是一个高性能的图引擎，该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文讲述了在如何在&lt;code&gt;windows&lt;/code&gt;系统中安装&lt;code&gt;NEO4J&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(28)用大语言模型LLM查询图数据库NEO4J(1)</title>
      <link>http://wfcoding.com/articles/practice/0328/</link>
      <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0328/</guid>
      <description>&lt;p&gt;本文将基于&lt;code&gt;langchain&lt;/code&gt; 框架，用&lt;code&gt;LLM(大语言模型)&lt;/code&gt;查询图数据库&lt;code&gt;NEO4J&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 做实验，用 &lt;code&gt;llama3.1&lt;/code&gt; 查不出内容。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(27)初探langgraph的流式输出</title>
      <link>http://wfcoding.com/articles/practice/0327/</link>
      <pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0327/</guid>
      <description>&lt;p&gt;对于 &lt;code&gt;LLM(大语言模型)&lt;/code&gt;，流式传输已成为一种越来越受欢迎的功能。其理念是在 &lt;code&gt;LLM&lt;/code&gt; 生成令牌时就快速返回，而不是等待创建完整响应后再返回全部内容。&lt;/p&gt;
&lt;p&gt;在简单的场景中，流式传输实际上非常容易实现，但当涉及到智能体之类的应用时，它会变得复杂，这些智能体有自己的运行逻辑，可能会阻止我们尝试进行流式传输。&lt;/p&gt;
&lt;p&gt;本文将探讨 &lt;code&gt;langchain&lt;/code&gt; 的流式输出，后面将实现&lt;strong&gt;智能体最终结果的流式输出&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本次演练将全部使用 &lt;code&gt;qwen2.5:7b&lt;/code&gt; 开源大模型。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)</title>
      <link>http://wfcoding.com/articles/practice/0326/</link>
      <pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0326/</guid>
      <description>&lt;p&gt;本文将扩展上一篇文章完成的 &lt;code&gt;langgraph&lt;/code&gt; 链，继续使用基于 &lt;code&gt;langgraph&lt;/code&gt; 链 ，对结构化数据库 &lt;code&gt;SQlite&lt;/code&gt; 进行查询的方法。该系统建立以后，我们不需要掌握专业的 &lt;code&gt;SQL&lt;/code&gt; 技能，可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善一下两点内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动记录消息历史&lt;/li&gt;
&lt;li&gt;增加人工审核环节，防止 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 运行危险的SQL语句&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们先看看完成的 &lt;code&gt;langgraph&lt;/code&gt; 链的模样，主要有两步：创建SQL查询语句-&amp;gt;执行SQL查询语句，在执行SQL查询前中断进行人工审核，上一篇文章的 链 没有人工审核：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;image/graph1.png&#34; alt=&#34;本次实现的链&#34;  /&gt;
&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;image/graph2.png&#34; alt=&#34;上一篇文章实现的链&#34;  /&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;本次实现的链&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;上一篇文章实现的链&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;llama3.1&lt;/code&gt; 做实验。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;请注意&lt;/strong&gt;:&lt;br&gt;
构建 &lt;code&gt;SQL&lt;/code&gt; 数据库的问答系统需要执行模型生成的 &lt;code&gt;SQL&lt;/code&gt; 查询。这样做存在风险，请&lt;strong&gt;确保您的数据库连接权限始终尽可能小&lt;/strong&gt;，这将减轻（但不能消除）构建模型驱动系统的风险。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(25)用langgraph实现基于SQL数据构建的问答系统(4)</title>
      <link>http://wfcoding.com/articles/practice/0325/</link>
      <pubDate>Tue, 25 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0325/</guid>
      <description>&lt;p&gt;本文将演练使用基于 &lt;code&gt;langgraph&lt;/code&gt; 链 ，对结构化数据库 &lt;code&gt;SQlite&lt;/code&gt; 进行查询的方法。该系统建立以后，我们不需要掌握专业的 &lt;code&gt;SQL&lt;/code&gt; 技能，可以用自然语言询问有关数据库中数据的问题并返回答案。&lt;br&gt;
使 &lt;code&gt;大语言模型(LLM)&lt;/code&gt; 查询结构化数据与非结构化文本数据有所不同。查询非结构化数据时，通常需要将待查询的文本嵌入到向量数据库中；而查询结构化数据的方法则是让 &lt;code&gt;LLM&lt;/code&gt; 编写和执行 &lt;code&gt;DSL&lt;/code&gt;（例如 SQL）进行查询。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在 &lt;a href=&#34;http://wfcoding.com/articles/practice/0322/&#34;&gt;用langchain实现基于SQL数据构建问答系统(1)&lt;/a&gt; 中，我们已经用 &lt;code&gt;langchain&lt;/code&gt; 的 &lt;code&gt;create_sql_query_chain&lt;/code&gt; 实现了类似功能，在本文结束后，我们将能看到它们之间的区别。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们先看看完成的 &lt;code&gt;langgraph&lt;/code&gt; 链的模样，情况一目了然，主要有两步：创建SQL查询语句-&amp;gt;执行SQL查询语句：&lt;br&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;image/graph.png&#34; alt=&#34;查询架构&#34;  /&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;deepseek&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;请注意&lt;/strong&gt;:&lt;br&gt;
构建 &lt;code&gt;SQL&lt;/code&gt; 数据库的问答系统需要执行模型生成的 &lt;code&gt;SQL&lt;/code&gt; 查询。这样做存在风险，请&lt;strong&gt;确保您的数据库连接权限始终尽可能小&lt;/strong&gt;，这将减轻（但不能消除）构建模型驱动系统的风险。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(24)用智能体(Agent)实现智能纠错的SQL数据库问答系统(3)</title>
      <link>http://wfcoding.com/articles/practice/0324/</link>
      <pubDate>Mon, 24 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0324/</guid>
      <description>&lt;p&gt;本文将实现这样一个 &lt;code&gt;智能体(Agent)&lt;/code&gt; ：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以使用自然语言对 &lt;code&gt;SQLite&lt;/code&gt; 数据库进行查询。即：用户用自然语言提出问题，智能体也用自然语言根据数据库的查询结果回答问题。&lt;/li&gt;
&lt;li&gt;增加一个自动对查询中的专有名词进行纠错的工具，这将明显提升查询的准确性。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;本次将使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;llama3.1&lt;/code&gt; 做实验。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(23)用智能体(Agent)实现基于SQL数据构建问答系统(2)</title>
      <link>http://wfcoding.com/articles/practice/0323/</link>
      <pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0323/</guid>
      <description>&lt;p&gt;本文将用 &lt;code&gt;智能体(Agent)&lt;/code&gt;  实现对 &lt;code&gt;SQLite&lt;/code&gt; 数据库的查询：用户用自然语言提出问题，智能体也用自然语言根据数据库的查询结果回答问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本次将分别在英文、中文环境下，使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;MFDoom/deepseek-r1-tool-calling:7b&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(22)用langchain实现基于SQL数据构建问答的系统(1)</title>
      <link>http://wfcoding.com/articles/practice/0322/</link>
      <pubDate>Wed, 19 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0322/</guid>
      <description>&lt;p&gt;使 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 系统能够查询结构化数据与非结构化文本数据在性质上可能不同。后者通常生成可在向量数据库中搜索的文本，而结构化数据的方法通常是让 &lt;code&gt;LLM&lt;/code&gt; 编写和执行 &lt;code&gt;DSL&lt;/code&gt;（例如 SQL）中的查询。&lt;br&gt;
我们将演练使用 &lt;code&gt;langchain&lt;/code&gt; 链 ，在结构化数据库 &lt;code&gt;SQlite&lt;/code&gt; 中的数据上创建问答系统的基本方法，该系统建立以后，我们用自然语言询问有关数据库中数据的问题并返回答案。&lt;br&gt;
后面我们将基于 &lt;code&gt;智能体(Agent)&lt;/code&gt; 实现类似功能，两者之间的主要区别在于：&lt;strong&gt;智能体可以根据需要多次循环查询数据库以回答问题&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;实现上述功能需要以下步骤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将问题转换为 &lt;code&gt;DSL&lt;/code&gt; 查询：模型将用户输入转换为 &lt;code&gt;SQL&lt;/code&gt; 查询；&lt;/li&gt;
&lt;li&gt;执行 &lt;code&gt;SQL&lt;/code&gt; 查询；&lt;/li&gt;
&lt;li&gt;回答问题：模型使用查询结果响应用户输入。
&lt;img loading=&#34;lazy&#34; src=&#34;image/qa.png&#34; alt=&#34;查询架构&#34;  /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;deepseek&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(21)支持多参数检索的RAG(Retrieval Augmented Generation,检索增强生成)(5)</title>
      <link>http://wfcoding.com/articles/practice/0321/</link>
      <pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0321/</guid>
      <description>&lt;p&gt;在实现 &lt;code&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/code&gt; 系统的时候，在检索（retrieve）知识库时通常一个参数。&lt;br&gt;
本文将演练更复杂一点的情况：通过两个参数进行知识库的检索。为此会在 &lt;code&gt;langgraph&lt;/code&gt;链 中增加一个 &lt;code&gt;analyze_query&lt;/code&gt; 节点，它用来基于用户问题推理检索的参数。&lt;/p&gt;
&lt;p&gt;本次构建的 &lt;code&gt;LangGraph&lt;/code&gt; 链结构如下图：
&lt;img loading=&#34;lazy&#34; src=&#34;image/graph.png&#34; alt=&#34;Langgraph RAG 链&#34;  /&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;deepseek&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验，用 &lt;code&gt;shaw/dmeta-embedding-zh&lt;/code&gt; 做中文嵌入和检索。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(20)用langgraph和智能体实现RAG(Retrieval Augmented Generation,检索增强生成)(4)</title>
      <link>http://wfcoding.com/articles/practice/0320/</link>
      <pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0320/</guid>
      <description>&lt;p&gt;上一篇文章我们演练了一个 &lt;a href=&#34;http://wfcoding.com/articles/practice/0319/&#34;&gt;用 &lt;code&gt;langgraph&lt;/code&gt; 实现的 &lt;code&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/code&gt; 系统&lt;/a&gt;。本文将要在此基础上，增加自动记录聊天历史的功能，另外，我们还将使用一个 &lt;code&gt;Agent(智能体)&lt;/code&gt; 来实现几乎同样的功能，我们来一起体会一下用 &lt;code&gt;langgraph&lt;/code&gt; 和 &lt;code&gt;Agent(智能体)&lt;/code&gt; 实现 &lt;code&gt;RAG系统&lt;/code&gt; 的区别。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;本次构建的 &lt;code&gt;LangGraph&lt;/code&gt; 链结构如下图：
&lt;img loading=&#34;lazy&#34; src=&#34;image/graph.png&#34; alt=&#34;Langgraph RAG 链&#34;  /&gt;
&lt;br&gt;
如上图，query_or_respond 是一个条件节点，它通过能否根据用户的问题生成 工具调用（tool_calls） ，来判断是否需要检索矢量知识库：如果 工具调用 为空，则直接由大语言模型处理；否则通过 工具调用 调用 tools 进行检索。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;实现类似功能的智能体结构如下图：
&lt;img loading=&#34;lazy&#34; src=&#34;image/agent.png&#34; alt=&#34;智能体结构图&#34;  /&gt;
&lt;br&gt;
我们可以直观的发现：&lt;strong&gt;用 &lt;code&gt;Agent(智能体)&lt;/code&gt; 实现更加简单&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;deepseek&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验，用 &lt;code&gt;shaw/dmeta-embedding-zh&lt;/code&gt; 做中文嵌入和检索。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(19)用langgraph实现RAG(Retrieval Augmented Generation,检索增强生成)(3)</title>
      <link>http://wfcoding.com/articles/practice/0319/</link>
      <pubDate>Sun, 16 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0319/</guid>
      <description>&lt;p&gt;上一篇文章我们演练了一个 &lt;a href=&#34;http://wfcoding.com/articles/practice/0318/&#34;&gt;用 &lt;code&gt;langgraph&lt;/code&gt; 实现的 &lt;code&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/code&gt; 系统&lt;/a&gt;。本文将要创建的系统将更加智能：如果在知识库中未找到靠谱的文档，则用 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 自身的能力弥补。&lt;br&gt;
另外，检索和生成部分增加了更多的细节控制。本次构建的 &lt;code&gt;LangGraph&lt;/code&gt; 链如下图：
&lt;img loading=&#34;lazy&#34; src=&#34;image/graph.png&#34; alt=&#34;Langgraph RAG 链&#34;  /&gt;
&lt;br&gt;
如上图，query_or_respond 是一个条件节点，它通过能否根据用户的问题生成 工具调用（tool_calls） ，来判断是否需要检索矢量知识库：如果 工具调用 为空，则直接由大语言模型处理；否则通过 工具调用 调用 tools 进行检索。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;deepseek&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验，用 &lt;code&gt;shaw/dmeta-embedding-zh&lt;/code&gt; 做中文嵌入和检索。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(18)用langgraph实现RAG(Retrieval Augmented Generation,检索增强生成)(2)</title>
      <link>http://wfcoding.com/articles/practice/0318/</link>
      <pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0318/</guid>
      <description>&lt;p&gt;本文将使用 &lt;code&gt;langgraph&lt;/code&gt; 实现一个简单的 &lt;code&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/code&gt; 系统。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;deepseek-r1&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验，用 &lt;code&gt;shaw/dmeta-embedding-zh&lt;/code&gt; 做中文嵌入和检索。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(17)用langchain和智能体实现RAG(Retrieval Augmented Generation,检索增强生成)(1)</title>
      <link>http://wfcoding.com/articles/practice/0317/</link>
      <pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0317/</guid>
      <description>&lt;p&gt;本文将用实际代码演练一个简单的 &lt;code&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/code&gt; 系统。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;qwen2.5&lt;/code&gt; 、 &lt;code&gt;deepseek-r1&lt;/code&gt; 以及 &lt;code&gt;llama3.1&lt;/code&gt; 做实验，用 &lt;code&gt;shaw/dmeta-embedding-zh&lt;/code&gt; 做中文嵌入和检索。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(16)在智能体中自动记录消息历史(3)</title>
      <link>http://wfcoding.com/articles/practice/0316/</link>
      <pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0316/</guid>
      <description>&lt;p&gt;本文将基于上一篇文章完善 &lt;code&gt;Agent(智能体)&lt;/code&gt; ，主要完善的功能有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;跟踪 &lt;code&gt;Agent(智能体)&lt;/code&gt; 的执行过程&lt;/li&gt;
&lt;li&gt;记录消息历史&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;此次我们使用 &lt;code&gt;qwen2.5&lt;/code&gt; 做 &lt;code&gt;LLM（大语言模型）&lt;/code&gt; 驱动 &lt;code&gt;Agent(智能体)&lt;/code&gt; ，使用 &lt;code&gt;shaw/dmeta-embedding-zh&lt;/code&gt; 做中文嵌入和检索。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(15)可以调用两个工具的智能体Agent(2)</title>
      <link>http://wfcoding.com/articles/practice/0315/</link>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0315/</guid>
      <description>&lt;p&gt;在上一篇文章中，我们实践了如何使用 &lt;code&gt;langchain&lt;/code&gt; 创建一个简单的 &lt;code&gt;ReAct Agent(智能体)&lt;/code&gt;，这次我们升级一下玩法：实现一个可以调用两个 工具 的智能体。&lt;br&gt;
其中一个工具用户查询天气预报，另外一个工具用来查询知识库，实际上该工具实现了 &lt;code&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;此次我们使用 &lt;code&gt;qwen2.5&lt;/code&gt;, &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;deepseek&lt;/code&gt; 。感觉在处理中文方面，感觉 &lt;strong&gt;&lt;code&gt;qwen2.5&lt;/code&gt;&lt;/strong&gt; 比 &lt;code&gt;llama3.1&lt;/code&gt; 要好一些。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(14)初探智能体Agent(1)</title>
      <link>http://wfcoding.com/articles/practice/0314/</link>
      <pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0314/</guid>
      <description>&lt;p&gt;在前面的文章中，我们了解了 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 如何使用 &lt;code&gt;tool(工具)&lt;/code&gt; ，现在我们开始进一步，初探 &lt;code&gt;Agent(智能体)&lt;/code&gt; 的玩法。&lt;br&gt;
其中的 &lt;code&gt;tool(工具)&lt;/code&gt; 用于从矢量数据库中查询信息，这种方式在 &lt;code&gt;RAG(Retrieval Augmented Generation,检索增强生成)&lt;/code&gt; 也很常用。在这种场景中，能否准确的查询出有用信息很关键，为此我们本次将使用多种大模型进行对比演练。包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多语言通用 &lt;code&gt;LLM&lt;/code&gt;: &lt;code&gt;llma3.1&lt;/code&gt; , &lt;code&gt;deepseek-r1&lt;/code&gt; , &lt;code&gt;qwen2.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;专用于嵌入检索的大模型： &lt;code&gt;shaw/dmeta-embedding-zh&lt;/code&gt; , &lt;code&gt;milkey/m3e&lt;/code&gt; , &lt;code&gt;mxbai-embed-large&lt;/code&gt; , &lt;code&gt;nomic-embed-text&lt;/code&gt; , &lt;code&gt;all-minilm:33m&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;了解-agent智能体&#34;&gt;了解 &lt;code&gt;Agent(智能体)&lt;/code&gt;&lt;/h2&gt;
&lt;h3 id=&#34;tool工具-与-agent智能体-的区别&#34;&gt;&lt;code&gt;tool(工具)&lt;/code&gt; 与 &lt;code&gt;Agent(智能体)&lt;/code&gt; 的区别&lt;/h3&gt;
&lt;p&gt;工具往往用于大语言模型调用其它功能，比如：搜索、数据库查询、计算等；&lt;code&gt;Agent(智能体)&lt;/code&gt; 是一个可以使用 &lt;code&gt;LLM&lt;/code&gt; 处理复杂任务的智能体；它通常会决定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;何时调用 &lt;code&gt;tool(工具)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;选择哪个工具&lt;/li&gt;
&lt;li&gt;处理工具返回的结果&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;reactreasoning--acting&#34;&gt;&lt;code&gt;ReAct（Reasoning + Acting）&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;ReAct（Reasoning + Acting）&lt;/code&gt;是一种用于 &lt;code&gt;Agent(智能体)&lt;/code&gt; 的决策方式，它结合了&lt;strong&gt;推理（Reasoning）和行动（Acting）&lt;/strong&gt;，让智能体能更灵活地思考和执行任务。&lt;br&gt;
简单来说，&lt;code&gt;ReAct&lt;/code&gt; 让智能体在做事情之前，先&lt;strong&gt;思考一下&lt;/strong&gt;，然后再决定下一步行动，而不是盲目执行。&lt;/p&gt;
&lt;h3 id=&#34;react-的核心思路&#34;&gt;&lt;code&gt;ReAct&lt;/code&gt; 的核心思路&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;观察环境（Observations）&lt;/strong&gt;：获取当前任务或问题的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理（Reasoning）&lt;/strong&gt;：分析当前信息，思考如何解决问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行行动（Acting）&lt;/strong&gt;：基于推理结果，采取具体的行动（比如调用工具、查询数据库、与用户交互等）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;循环执行&lt;/strong&gt;：智能体会不断重复&lt;strong&gt;观察 → 推理 → 行动&lt;/strong&gt;的过程，直到任务完成。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于 &lt;code&gt;ReAct&lt;/code&gt; 的更多内容，请参阅：&lt;a href=&#34;https://klu.ai/glossary/react-agent-model&#34;&gt;ReACT Agent Model&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(13)与外部工具交互时注入参数(4)</title>
      <link>http://wfcoding.com/articles/practice/0313/</link>
      <pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0313/</guid>
      <description>&lt;p&gt;在使用 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 调用工具方法时，可能会在运行时才会将类似 用户ID 的数值传递给工具。&lt;br&gt;
大多数情况下，此类值不应由 &lt;code&gt;LLM&lt;/code&gt; 控制。允许 &lt;code&gt;LLM&lt;/code&gt; 控制 用户ID &lt;strong&gt;可能会导致安全风险&lt;/strong&gt;。&lt;br&gt;
相反，&lt;code&gt;LLM&lt;/code&gt; 应该只控制本应由 &lt;code&gt;LLM&lt;/code&gt; 控制的工具参数，而其他参数（如用户ID）应由应用程序逻辑固定。&lt;/p&gt;
&lt;p&gt;本文将向您展示：如何防止大模型生成某些工具参数并&lt;strong&gt;在运行时直接注入&lt;/strong&gt;它们。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文使用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;MFDoom/deepseek-r1-tool-calling:7b&lt;/code&gt; 进行演练。 &lt;code&gt;deepseek-r1&lt;/code&gt; 不支持 &lt;code&gt;langchain&lt;/code&gt; 的 bind_tools 方法。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(12)与外部工具交互时进行人工审核(3)</title>
      <link>http://wfcoding.com/articles/practice/0312/</link>
      <pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0312/</guid>
      <description>&lt;p&gt;本文将实践如何在 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 调用工具函数时进行审核，即由人来确定是否应该调用工具函数。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本次使用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;MFDoom/deepseek-r1-tool-calling:7b&lt;/code&gt; 进行演练。 &lt;code&gt;deepseek-r1&lt;/code&gt; 不支持 &lt;code&gt;langchain&lt;/code&gt; 的 bind_tools 方法。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(11)用提示词提升与外部工具交互的能力并支持deepseek(2)</title>
      <link>http://wfcoding.com/articles/practice/0311/</link>
      <pubDate>Sat, 08 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0311/</guid>
      <description>&lt;p&gt;在使用 &lt;code&gt;LLM(大语言模型)&lt;/code&gt; 时，经常需要调用一些自定义的工具方法完成特定的任务，比如：执行一些特殊算法、查询天气预报、旅游线路等。&lt;br&gt;
很多大模型都具备使用这些工具方法的能力，&lt;code&gt;Langchain&lt;/code&gt; 也为这些调用提供了便利。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;之前的文章介绍了 &lt;code&gt;llama3.1&lt;/code&gt; 与工具方法交互的实际例子，不过可惜 &lt;code&gt;langchain&lt;/code&gt; 对 &lt;code&gt;deepseek&lt;/code&gt; 支持还不够，导致：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;llm.bind_tools 根据用户问题生成的工具方法签名与 &lt;code&gt;llama3.1&lt;/code&gt; 不同，在后续在调用工具方法时报错&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deepseek&lt;/code&gt; 返回的结果中包含了思考过程内容，显然 &lt;code&gt;Langchain&lt;/code&gt; 还不能正确解析出最终结果，这会导致 &lt;code&gt;langchain&lt;/code&gt; 的很多方法不能正常运行&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;这次我们将尝试通过以下两种方法解决 &lt;code&gt;Langchain&lt;/code&gt; 使用 &lt;code&gt;deepseek&lt;/code&gt; 时产生的上述问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用提示词让大模型推理调用工具的方法名称和参数&lt;/li&gt;
&lt;li&gt;使用自定义的 &lt;code&gt;JsonOutputParser&lt;/code&gt; 处理 &lt;code&gt;deepseek&lt;/code&gt; 返回的信息&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;这里使用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;deepseek&lt;/code&gt; 等不同模型做对比，并不是为了说明孰优孰劣，而是仅仅为了技术演示需要。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(10)与外部工具交互(1)</title>
      <link>http://wfcoding.com/articles/practice/0310/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0310/</guid>
      <description>&lt;p&gt;某些模型能够进行工具方法调用：生成用户自定义的方法的签名并调用它。一般来说，此交互过程主要包含下面几个步骤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LLM(大语言模型)&lt;/code&gt; 根据用户的问题推理生成调用工具方法的名称和参数&lt;/li&gt;
&lt;li&gt;调用工具，返回简单的结果&lt;/li&gt;
&lt;li&gt;再次调用 &lt;code&gt;LLM&lt;/code&gt; ，生成自然流畅的回答&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面我们来说明这一过程。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;应该是因为 &lt;code&gt;langchian&lt;/code&gt; 对 &lt;code&gt;deepseek&lt;/code&gt; 的支持还完善，使用 &lt;code&gt;deepseek-r1&lt;/code&gt; 无法生成工具方法签名，使用 &lt;code&gt;MFDoom/deepseek-r1-tool-calling:7b&lt;/code&gt; 可以生成工具方法签名，但是在调用工具方法时不成功。&lt;br&gt;
所以本文仅使用 &lt;code&gt;llama3.1&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(09)完善聊天机器人(3)</title>
      <link>http://wfcoding.com/articles/practice/0309/</link>
      <pubDate>Thu, 06 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0309/</guid>
      <description>&lt;p&gt;本文将实现一个比较完善的聊天机器人的主要功能。包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;LangGraph&lt;/code&gt; 构建聊天机器人&lt;/li&gt;
&lt;li&gt;自动裁剪聊天历史&lt;/li&gt;
&lt;li&gt;管理聊天会话的方法&lt;/li&gt;
&lt;li&gt;以流的方式输出回复&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;我们将同时使用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;deepseek&lt;/code&gt; 做演示。由于 &lt;code&gt;langchain&lt;/code&gt; 可能对不同大模型支持程度不同以及其它限制，所以这个对比并不能说明哪个模型更好。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(08)用提示词改变聊天机器人的能力(2)</title>
      <link>http://wfcoding.com/articles/practice/0308/</link>
      <pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0308/</guid>
      <description>&lt;p&gt;本文将演示使用大语言模型自制聊天机器人。主要的内容有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;LangGraph&lt;/code&gt; 进一步完善聊天机器人&lt;/li&gt;
&lt;li&gt;使用提示词改变 &lt;code&gt;LLM&lt;/code&gt; 的能力&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;我们将同时使用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;deepseek&lt;/code&gt; 做演示。由于 &lt;code&gt;langchain&lt;/code&gt; 可能对不同大模型支持程度不同，不同大模型的特点也不同，所以这个对比并不能说明哪个模型更好。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(07)用langgraph自制聊天机器人(1)</title>
      <link>http://wfcoding.com/articles/practice/0307/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0307/</guid>
      <description>&lt;p&gt;本文将演示使用大语言模型自制聊天机器人。主要的内容有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如何让机器人具有记忆&lt;/li&gt;
&lt;li&gt;如何使用 &lt;code&gt;langgraph&lt;/code&gt; 自动记录聊天历史&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;我们将同时使用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;deepseek&lt;/code&gt; 做演示。由于 &lt;code&gt;langchain&lt;/code&gt; 可能对不同大模型支持程度不同，不同大模型的特点也不同，所以这个对比并不能说明哪个模型更好。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(06)从文本中提取重要信息(2)</title>
      <link>http://wfcoding.com/articles/practice/0306/</link>
      <pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0306/</guid>
      <description>&lt;p&gt;本文将演示使用大语言模型从文本中提炼结构化信息。这次我们不直接使用提示词，而是使用大模型的 &lt;code&gt;few-shot prompting&lt;/code&gt; 特性，即使用很少的例子来引导大模型做推理。&lt;br&gt;
我们将用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;deepseek&lt;/code&gt; 做一个简单的对比。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由于 &lt;code&gt;langchain&lt;/code&gt; 可能对不同大模型支持程度不同，不同大模型的特点也不同，所以这个对比并不能说明哪个模型更好。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(05)从文本中提取重要信息(1)</title>
      <link>http://wfcoding.com/articles/practice/0305/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0305/</guid>
      <description>&lt;p&gt;本文将演示使用大语言模型从文本中提炼结构化信息。&lt;br&gt;
我们将用 &lt;code&gt;llama3.1&lt;/code&gt; 和 &lt;code&gt;deepseek&lt;/code&gt; 做一个简单的对比。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由于 &lt;code&gt;langchain&lt;/code&gt; 可能对不同大模型支持程度不同，不同大模型的特点也不同，所以这个对比并不能说明哪个模型更好。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(04)给文本自动打标签</title>
      <link>http://wfcoding.com/articles/practice/0304/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0304/</guid>
      <description>&lt;p&gt;使用本地大模型可以根据需要给文本打标签，本文介绍了如何基于 &lt;code&gt;langchain&lt;/code&gt; 和本地部署的大模型给文本打标签。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文使用 &lt;code&gt;llama3.1&lt;/code&gt; 作为本地大模型，它的性能比非开源大模型要查一下，不过在我们可以调整提示词后，它也基本能达到要求。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(03)用本地矢量数据库实现语义检索(2)</title>
      <link>http://wfcoding.com/articles/practice/0303/</link>
      <pubDate>Sun, 26 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0303/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;上一篇文章： &lt;a href=&#34;http://wfcoding.com/articles/practice/0302/&#34;&gt;本地大模型编程实战(02)语义检索(1)&lt;/a&gt; 详细介绍了如何使用 &lt;code&gt;langchain&lt;/code&gt; 实现语义检索，为了演示方便，使用的是 &lt;code&gt;langchain&lt;/code&gt; 提供的内存数据库。&lt;br&gt;
在实际工作中，更多的使用场景是将矢量化的数据物理存储下来，在查询的时候在从存储介质中读取矢量数据进行查询，不会每次使用矢量数据时都必须想做嵌入。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文描述了如何使用 &lt;code&gt;Chroma&lt;/code&gt; 对csv数据进行矢量化，并且将矢量存储在硬盘中，未来查询矢量数据时，直接从硬盘中读取矢量数据进行查询。&lt;br&gt;
另外，如果数据量大一些，矢量化数据是很花时间的，我们将使用进度条显示嵌入csv的进度。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(02)语义检索(1)</title>
      <link>http://wfcoding.com/articles/practice/0302/</link>
      <pubDate>Sat, 25 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0302/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;我们在百度、必应、谷歌等搜索引擎中使用的检索都是基于字符串的：用户输入字符串后，搜索引擎先对搜索内容进行分词，然后在已经进行了倒排索引的巨大数据库中找出最符合用户要求的结果。&lt;br&gt;
&lt;strong&gt;语义检索&lt;/strong&gt;与其主要的区别是：它根据文本的真正含义进行搜索，其基本思路是将待检索的内容都转变成矢量（这个过程也叫做&lt;strong&gt;嵌入&lt;/strong&gt;），转化矢量的基本原则是：语义相近的内容距离更近、相似性更高。&lt;br&gt;
当用户输入检索内容时，也是先把检索内容变成矢量，然后去矢量数据库中找到最相似的文档。这样检索出来的结果并不依据字面的意思，而是依据语义的相似度。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文描述了如何使用 &lt;code&gt;langchain&lt;/code&gt; 和 &lt;code&gt;大语言模型&lt;/code&gt; 以及 &lt;code&gt;矢量数据库&lt;/code&gt; 完成pdf内容的语义检索。&lt;br&gt;
在对内容进行矢量化时使用了 &lt;code&gt;nomic-embed-text&lt;/code&gt;，这个模型个头小，英文嵌入效果不错。&lt;br&gt;
后面还将涉及到以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文档和文档加载器&lt;/li&gt;
&lt;li&gt;文本分割器&lt;/li&gt;
&lt;li&gt;嵌入&lt;/li&gt;
&lt;li&gt;向量存储和检索器&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>本地大模型编程实战(01)实现翻译功能</title>
      <link>http://wfcoding.com/articles/practice/0301/</link>
      <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0301/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;大语言模型的主要功能是&lt;strong&gt;预测&lt;/strong&gt;：输入一些字符串，它预测输出另一些字符串，这个特点使它擅长翻译。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文描述了如何使用大语言模型(&lt;code&gt;LLM&lt;/code&gt;)实现基本的翻译功能，此翻译功能的特点是：&lt;mark&gt;无需指定源语言，只需要指定目标语言就可以进行翻译了&lt;/mark&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用图形验证码增强用户认证安全性[python&#43;vuetify]</title>
      <link>http://wfcoding.com/articles/practice/0114/</link>
      <pubDate>Sun, 05 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0114/</guid>
      <description>&lt;p&gt;这里通过代码讲述了使用&lt;code&gt;python&lt;/code&gt;生成以及校验图片验证码，增强用户认证安全性的过程。&lt;br&gt;
客户端则使用 &lt;code&gt;vue3&lt;/code&gt; 和 &lt;code&gt;vuetify3&lt;/code&gt; 框架使用后台API生成的图片验证码。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;image/01.jpg&#34; alt=&#34;图片验证码&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>[python]实现可以自动清除过期条目的缓存</title>
      <link>http://wfcoding.com/articles/practice/0113/</link>
      <pubDate>Sat, 04 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0113/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;由于有缓存图片验证码的需要，所以我找了一些开源的缓存想直接使用，结果要么太老旧，要么太复杂，要么和 &lt;code&gt;fastAPI&lt;/code&gt; 整合有问题，所以才想到自己写一个简单的，够用就好。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文讲述了如何实现一个简单的内存缓存，他可以把过期的键值自动清除，在缓存验证码等场合应该很好用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Elasticsearch]使用search_after实现深度分页[附源码]</title>
      <link>http://wfcoding.com/articles/theory/p02/</link>
      <pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p02/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;elasticsearch&lt;/code&gt; 在使用 from + size 这种方式进行分页查询时，因为 &lt;code&gt;index.max_result_window&lt;/code&gt; 的默认值是 10K，所以当查询的文档超过第10K个文档时，会报错：Result window is too large&amp;hellip;&lt;br&gt;
当然，我们可以调整&lt;code&gt;index.max_result_window&lt;/code&gt;的大小，不过这种办法会导致查询效率降低和内存占用增加。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文讲述了在 &lt;code&gt;elasticsearch&lt;/code&gt; 中包含几十万乃至上百万的大数据量时，使用 &lt;code&gt;search_after&lt;/code&gt; 进行深度分页的方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于OAuth2.0和JWT规范实现安全易用的用户认证</title>
      <link>http://wfcoding.com/articles/practice/0112/</link>
      <pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0112/</guid>
      <description>&lt;p&gt;遵循&lt;code&gt;OAuth2.0&lt;/code&gt;和&lt;code&gt;JWT&lt;/code&gt;规范实现用户认证，不但具有很好的实用性，还能提供很不错的安全保障。&lt;br&gt;
本文结合实用的代码讲述了基于&lt;code&gt;OAuth2.0&lt;/code&gt;和&lt;code&gt;JWT&lt;/code&gt;，在前后端分离的系统中，实现用户使用方便而又安全可靠的用户认证的基本思路。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用vuetify3实现待办事项管理</title>
      <link>http://wfcoding.com/articles/practice/0204/</link>
      <pubDate>Thu, 19 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0204/</guid>
      <description>&lt;p&gt;这是使用&lt;code&gt;vuetify3&lt;/code&gt;可以开发的一个待办事项管理实例。&lt;br&gt;
它主要包含事项概览、我的项目、我的团队。其中事项概览中以列表的方式列出所有的事项，在这里可以添加事项、对事项进行排序。&lt;/p&gt;
&lt;div style=&#34;position:relative;width:100%;height:315px;&#34;&gt;
  &lt;iframe src=&#34;todo_demo.mp4&#34; style=&#34;position:absolute;top:0;left:0;width:100%;height:100%;&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://vuetifyjs.com/zh-Hans/getting-started/installation/#section-5b8988c5&#34;&gt;vuetify官网的组件部分&lt;/a&gt;有大量控件，我想绝大部分应用使用这些控件拼凑就足够酷了。
一个快捷的方式是：到此官网找控件，把代码拷贝出来，修改一下直接使用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;请注意：&lt;/strong&gt;
事项数据是存储在google的&lt;code&gt;firebase&lt;/code&gt;中的，如果访问不便，可以使用代码中也提供的本地数据。
&lt;img loading=&#34;lazy&#34; src=&#34;image/01.jpg&#34; alt=&#34;firebase界面&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>用vuetify3实现经典的登录页面</title>
      <link>http://wfcoding.com/articles/practice/0203/</link>
      <pubDate>Tue, 17 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0203/</guid>
      <description>&lt;p&gt;这是使用&lt;code&gt;vuetify3&lt;/code&gt;可以开发的一个登录实例。&lt;br&gt;
它包含了一个经典的包含系统消息、登录按钮、更换主题按钮的工具栏（toolbar）、轮播(carousel)和登录表单控件。&lt;/p&gt;
&lt;div style=&#34;position:relative;width:100%;height:315px;&#34;&gt;
  &lt;iframe src=&#34;vuetify_login_demo.mp4&#34; style=&#34;position:absolute;top:0;left:0;width:100%;height:100%;&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://vuetifyjs.com/zh-Hans/getting-started/installation/#section-5b8988c5&#34;&gt;vuetify官网的组件部分&lt;/a&gt;有大量控件，我想绝大部分应用使用这些控件拼凑就足够酷了。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>用vuetify3做一个简单的相册</title>
      <link>http://wfcoding.com/articles/practice/0202/</link>
      <pubDate>Sun, 15 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0202/</guid>
      <description>&lt;p&gt;这是使用&lt;code&gt;vuetify3&lt;/code&gt;可以开发的一个简单的相册，通过菜单可以控制相册以彩色或者黑白方式显示。&lt;br&gt;
在这个例子中，我们主要使用 &lt;code&gt;抽屉式导航（Navigation drawers）&lt;/code&gt; 做导航，使用&lt;code&gt;栅格（Grids）&lt;/code&gt;显示相册图片。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在整个过程中，我们可以直接使用&lt;code&gt;vuetify3&lt;/code&gt;的各种控件，几乎不用写&lt;code&gt;css&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style=&#34;position:relative;width:100%;height:315px;&#34;&gt;
  &lt;iframe src=&#34;vuetify3_gallery_demo.mp4&#34; style=&#34;position:absolute;top:0;left:0;width:100%;height:100%;&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>用最快捷的方法创建vuetify3项目</title>
      <link>http://wfcoding.com/articles/practice/0201/</link>
      <pubDate>Fri, 13 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0201/</guid>
      <description>&lt;p&gt;有很多办法可以基于&lt;code&gt;vue3&lt;/code&gt;创建&lt;code&gt;vuetify3&lt;/code&gt;项目，本文介绍我认为最快捷的创建方式。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;vuetify3&lt;/code&gt;是成熟的&lt;code&gt;vue3&lt;/code&gt;框架：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;严格遵循 Google 的 &lt;code&gt;Material Design&lt;/code&gt; 规范，提供一致的设计语言和视觉体验，&lt;mark&gt;适合需要现代、简约风格的项目&lt;/mark&gt;。&lt;/li&gt;
&lt;li&gt;提供了&lt;mark&gt;超过 80 个功能强大的 UI 组件&lt;/mark&gt;，例如按钮、表格、对话框、菜单等，能够满足大多数应用的开发需求，减少了第三方依赖。&lt;/li&gt;
&lt;li&gt;完全重构以&lt;mark&gt;支持 Vue 3 的 Composition API 和其他新特性&lt;/mark&gt;，与 Vue 3 的生态系统无缝集成。&lt;/li&gt;
&lt;li&gt;提供&lt;mark&gt;动态主题和深色模式支持&lt;/mark&gt;，允许开发者轻松自定义颜色、字体和其他主题元素，满足品牌化需求。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>基于FastAPI和JWT实现OAuth2用户认证</title>
      <link>http://wfcoding.com/articles/practice/0111/</link>
      <pubDate>Sun, 01 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0111/</guid>
      <description>&lt;p&gt;本文阐述了如何基于&lt;code&gt;FastAPI&lt;/code&gt;框架实现 &lt;code&gt;OAuth2&lt;/code&gt;用户认证，其中使用哈希算法对密码进行了加密，使用 &lt;code&gt;JWT&lt;/code&gt; 持有令牌。&lt;br&gt;
附带完整的代码，避免大家再次踩坑。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用FastAPI实现简单的OAuth2的Password和Bearer验证</title>
      <link>http://wfcoding.com/articles/practice/0110/</link>
      <pubDate>Sun, 01 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0110/</guid>
      <description>&lt;p&gt;本文讲述了基于&lt;code&gt;FastAPI&lt;/code&gt;框架，实现实现简单的&lt;code&gt;OAuth2&lt;/code&gt;的Password和Bearer验证。&lt;br&gt;
附带完整的代码，避免大家再次踩坑。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用FastAPI实现微服务API网关</title>
      <link>http://wfcoding.com/articles/practice/0109/</link>
      <pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0109/</guid>
      <description>&lt;p&gt;本文阐述了基于&lt;code&gt;FastAPI&lt;/code&gt;实现一个&lt;code&gt;API网关&lt;/code&gt;的详细步骤，这样未来可以不断的在服务端像搭积木一样添加各种服务。&lt;br&gt;
我们即将实现下面的简单的微服务架构，目前它只实现了请求转发功能：
&lt;img loading=&#34;lazy&#34; src=&#34;image/arch.png&#34; alt=&#34;api gateway架构&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何给github开源项目提交修改</title>
      <link>http://wfcoding.com/articles/theory/p01/</link>
      <pubDate>Tue, 05 Nov 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/p01/</guid>
      <description>&lt;p&gt;本文描述了如何参与&lt;code&gt;github&lt;/code&gt;的项目合作：包括将要修改的项目fork到本地，修改后再提交到github的详细过程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用FastAPI做langchain本地大模型的API</title>
      <link>http://wfcoding.com/articles/practice/0108/</link>
      <pubDate>Tue, 05 Nov 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0108/</guid>
      <description>&lt;p&gt;本文讲述了如何使用&lt;code&gt;FastAPI&lt;/code&gt;和&lt;code&gt;langchain&lt;/code&gt;框架，包装本地大模型&lt;code&gt;llama3.1&lt;/code&gt;，实现&lt;mark&gt;语言翻译&lt;/mark&gt;功能的API。&lt;br&gt;
相对于 &lt;code&gt;Flask&lt;/code&gt; ，使用&lt;code&gt;FastAPI&lt;/code&gt;做接口要简便得多。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用Flask做langchain服务的API</title>
      <link>http://wfcoding.com/articles/practice/0107/</link>
      <pubDate>Sun, 03 Nov 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0107/</guid>
      <description>&lt;p&gt;本文讲述了如何使用一个利用本地大模型&lt;code&gt;llama3.1&lt;/code&gt;实现&lt;mark&gt;语言翻译&lt;/mark&gt;功能的API。&lt;br&gt;
它用&lt;code&gt;flask&lt;/code&gt;很轻松的&lt;mark&gt;将langchian服务开放为API&lt;/mark&gt;，结合&lt;code&gt;flasgger&lt;/code&gt;&lt;mark&gt;给文档添加注释并生成playground&lt;/mark&gt;，并且使用&lt;code&gt;jsonschema&lt;/code&gt;&lt;mark&gt;做json数据校验&lt;/mark&gt;，轻松验证接口参数。&lt;br&gt;
麻雀虽小，但五脏俱全，应该对&lt;strong&gt;langchain入门者&lt;/strong&gt;有较大帮助。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用LangServe做API开放本地大模型的能力</title>
      <link>http://wfcoding.com/articles/practice/0106/</link>
      <pubDate>Sun, 27 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0106/</guid>
      <description>&lt;p&gt;&lt;code&gt;LangServe&lt;/code&gt;可以轻松的将&lt;code&gt;langchain&lt;/code&gt;的能力包装为接口，为前端提供服务。本文通过一个简单的应用演示&lt;code&gt;LangServe&lt;/code&gt;如何使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于langchain和本地大模型以及会话式检索增强生成技术实现知识问答</title>
      <link>http://wfcoding.com/articles/practice/0105/</link>
      <pubDate>Thu, 10 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0105/</guid>
      <description>&lt;p&gt;本文概述了基于langchian框架和对话式增强生成（&lt;code&gt;Conversational RAG&lt;/code&gt;(&lt;code&gt;Retrieval Augmented Generation&lt;/code&gt;)）技术实现知识问答。&lt;br&gt;
具体来说，系统&lt;mark&gt;自动记录聊天历史&lt;/mark&gt;，并把它作为上下文提供给大模型，这样它让大模型产生了“记忆”，可以“理解”和关联上下文，体验更好。&lt;br&gt;
此样例程序使用本地部署的&lt;code&gt;nomic-embed-text&lt;/code&gt;模型做嵌入检索，使用本地部署的&lt;code&gt;llama3.1&lt;/code&gt;做回答内容生成。&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于langchain和本地大模型以及会话式检索增强生成技术实现知识问答</title>
      <link>http://wfcoding.com/articles/practice/0104/</link>
      <pubDate>Wed, 09 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0104/</guid>
      <description>&lt;p&gt;本文讲述了基于&lt;code&gt;langchian&lt;/code&gt;框架，使用本地部署的&lt;code&gt;nomic-embed-text&lt;/code&gt;模型做嵌入检索、&lt;code&gt;llama3.1&lt;/code&gt;做回答内容生成的知识问答系统实例。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;会话式检索增强生成，即：&lt;code&gt;Conversational RAG&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nomic-embed-text&lt;/code&gt;：一个高性能开放嵌入模型，具有较大的标记上下文窗口。这个模型只有274M，但实际做嵌入和检索时，感觉&lt;strong&gt;比llama3好&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;通过对比测试使用历史聊天记录和不使用历史聊天记录两种情况，我们可以明显看出来使用历史聊天记录的优点：它让大模型产生了“记忆”，可以“理解”和关联上下文，体验更好。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>使用langchain&#43;本地lamma3.1&#43;本地chroma做RAG系统</title>
      <link>http://wfcoding.com/articles/practice/0103/</link>
      <pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0103/</guid>
      <description>&lt;p&gt;本文详细讲述了如何使用&lt;code&gt;langchain&lt;/code&gt;+本地&lt;code&gt;lamma3.1&lt;/code&gt;+本地&lt;code&gt;chroma&lt;/code&gt;做&lt;code&gt;RAG&lt;/code&gt;系统。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在langchian中使用本地部署的llama3.1大模型</title>
      <link>http://wfcoding.com/articles/practice/0102%E5%9C%A8langchian%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2%E7%9A%84llama3%E5%A4%A7%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0102%E5%9C%A8langchian%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2%E7%9A%84llama3%E5%A4%A7%E6%A8%A1%E5%9E%8B/</guid>
      <description>&lt;p&gt;本文讲述如何在&lt;code&gt;langchian&lt;/code&gt;中使用本地部署的&lt;code&gt;llama3.1&lt;/code&gt;大模型。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在Visual Studio Code中配置venv</title>
      <link>http://wfcoding.com/articles/practice/0101%E5%9C%A8visual_studio_code%E4%B8%AD%E9%85%8D%E7%BD%AEvenv/</link>
      <pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/practice/0101%E5%9C%A8visual_studio_code%E4%B8%AD%E9%85%8D%E7%BD%AEvenv/</guid>
      <description>&lt;p&gt;介绍如何在Visual Studio Code中配置venv&lt;/p&gt;</description>
    </item>
    <item>
      <title>大语言模型能做什么</title>
      <link>http://wfcoding.com/articles/theory/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E8%83%BD%E5%81%9A%E4%BB%80%E4%B9%88/</link>
      <pubDate>Fri, 20 Sep 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E8%83%BD%E5%81%9A%E4%BB%80%E4%B9%88/</guid>
      <description>&lt;p&gt;当前AI的本质能力上是&lt;mark&gt;预测&lt;/mark&gt;：AI能通过大数据训练，总结过去的规律，预测未来。&lt;br&gt;
比如我们问AI：“内蒙古的首府是哪个城市？”，其实AI并不会透彻“理解”这句话的意思，但是它可以预测：当人们提出这样一个问题时，他们寻找的是一个特定的答案：呼和浩特。&lt;br&gt;
从经济的角度看，AI能让各种“中低端”的服务变得更廉价，可见AI必然会逐渐替代这些服务有其必然性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>大模型的涌现能力</title>
      <link>http://wfcoding.com/articles/theory/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%9A%84%E6%B6%8C%E7%8E%B0%E8%83%BD%E5%8A%9B/</link>
      <pubDate>Thu, 19 Sep 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/theory/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%9A%84%E6%B6%8C%E7%8E%B0%E8%83%BD%E5%8A%9B/</guid>
      <description>&lt;p&gt;涌现能力是在模型参数增加到某一临界点后突然出现的，这些能力包括但不限于语言理解能力、生成能力、逻辑推理能力等，而这种能力是小模型所不具备的。&lt;br&gt;
这也是为什么chat GPT出现后让人眼前一亮：和它聊天与真人无异，不像是机器了！这主要应该归功于大模型的&lt;mark&gt;涌现能力&lt;/mark&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在Centos7中搭建vpn服务器</title>
      <link>http://wfcoding.com/articles/programmer/m01/</link>
      <pubDate>Tue, 20 Aug 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/programmer/m01/</guid>
      <description>&lt;p&gt;这是一篇保姆式的在centos中搭建PPTP VPN Server的教程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bitwise:一款好用的ssh工具</title>
      <link>http://wfcoding.com/articles/programmer/m02/</link>
      <pubDate>Mon, 19 Aug 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/programmer/m02/</guid>
      <description>&lt;p&gt;最近发现一款很好用的免费的SSH客户端：&lt;code&gt;Bitwise SSH Client&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>阿里云windows服务器远程桌面不能连接了怎么办</title>
      <link>http://wfcoding.com/articles/programmer/m04/</link>
      <pubDate>Mon, 19 Aug 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/programmer/m04/</guid>
      <description>&lt;p&gt;在无法通过windows远程桌面远程连接管理阿里云windows服务器的情况下，其实还有其它办法可以远程连接控制阿里云服务器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用开源的SoftEther VPN在windows服务器上搭建VPN服务器</title>
      <link>http://wfcoding.com/articles/programmer/m03/</link>
      <pubDate>Mon, 19 Aug 2024 00:00:00 +0000</pubDate>
      <guid>http://wfcoding.com/articles/programmer/m03/</guid>
      <description>&lt;p&gt;最近发现一款非常好用的开源的vpn server和client：&lt;code&gt;SoftEther VPN&lt;/code&gt;。我觉得用这款软件自建vpn server挺方便。希望对您有帮助。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
