<?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>LLM on FXIO 技术博客</title><link>https://fxio.site/tags/llm/</link><description>Recent content in LLM on FXIO 技术博客</description><generator>Hugo -- 0.157.0</generator><language>zh-cn</language><lastBuildDate>Tue, 04 Aug 2026 11:53:09 +0800</lastBuildDate><atom:link href="https://fxio.site/tags/llm/index.xml" rel="self" type="application/rss+xml"/><item><title>跑一个大模型到底有几种跑法？从 llama.cpp、Ollama 到 vLLM 的三条路</title><link>https://fxio.site/posts/ai/2026-08-04-llm-inference-three-paths/</link><pubDate>Tue, 04 Aug 2026 11:53:09 +0800</pubDate><guid>https://fxio.site/posts/ai/2026-08-04-llm-inference-three-paths/</guid><description>&lt;h1 id="跑一个大模型到底有几种跑法从-llamacppollama-到-vllm-的三条路"&gt;跑一个大模型到底有几种跑法？从 llama.cpp、Ollama 到 vLLM 的三条路&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文回答一个看似简单的问题：「我想在本地跑个大模型」——然后呢？这三个 GitHub 上最火的推理项目，其实回答的是三个完全不同的问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;周末折腾本地大模型的人，大概率经历过这个场景：搜「本地跑 LLM」，GitHub 推荐给你 llama.cpp、Ollama、vLLM 三个项目，Star 数加起来四十多万。打开 README 都是「高性能推理」，看起来互为竞品。&lt;/p&gt;
&lt;p&gt;但我研究完这三个项目的架构后，结论是：**它们根本不是竞品，是三条不同的路，解决三个不同的问题。**选错工具不是性能差一点的问题，是方向错了。&lt;/p&gt;
&lt;h2 id="三个项目三个问题"&gt;三个项目，三个问题&lt;/h2&gt;
&lt;p&gt;先把结论摆出来：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;回答的问题&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;llama.cpp&lt;/td&gt;
&lt;td&gt;「我的笔记本/手机能跑吗？」&lt;/td&gt;
&lt;td&gt;单个极客&lt;/td&gt;
&lt;td&gt;单请求延迟、硬件可及性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ollama&lt;/td&gt;
&lt;td&gt;「我只想跑，不想折腾」&lt;/td&gt;
&lt;td&gt;所有人&lt;/td&gt;
&lt;td&gt;上手门槛（降到一条命令）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vLLM&lt;/td&gt;
&lt;td&gt;「一块 GPU 怎么服务上千用户？」&lt;/td&gt;
&lt;td&gt;生产 API 服务&lt;/td&gt;
&lt;td&gt;多请求吞吐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;注意看第三列——llama.cpp 和 vLLM 的优化目标甚至是&lt;strong&gt;对立&lt;/strong&gt;的。一个恨不得为单个请求榨干每一毫秒延迟，一个恨不得把一千个请求塞进一个 batch 里摊薄成本。这两个目标天然冲突，所以它们不可能是同一个工具的两种实现。&lt;/p&gt;
&lt;h2 id="llamacpp把-llm-从数据中心拽到你的笔记本"&gt;llama.cpp：把 LLM 从数据中心拽到你的笔记本&lt;/h2&gt;
&lt;p&gt;llama.cpp 的故事从一个意外开始：2023 年初 LLaMA 权重泄露，作者 Georgi Gergashev 四天内拿出了原型。这个「时机比技术重要」的案例后来被反复引用，但真正让这个项目活下来的是架构决策。&lt;/p&gt;
&lt;p&gt;它做了一个关键分层：底层是 &lt;strong&gt;ggml 张量库&lt;/strong&gt;（算子、内存管理、多后端抽象），上层是 &lt;strong&gt;llama 推理引擎&lt;/strong&gt;（模型定义、KV Cache、采样、API）。最大的亮点是多后端抽象——同一套 ggml API，底下可以是 CPU（AVX2/AVX512/NEON）、CUDA、Metal、Vulkan、SYCL、HIP，还支持 CPU+GPU 混合推理（&lt;code&gt;-ngl&lt;/code&gt; 指定丢给 GPU 的层数）。你 MacBook 上跑 Metal、Linux 服务器上跑 CUDA、安卓手机上跑 NEON，代码是同一套。&lt;/p&gt;</description></item><item><title>oMLX 本地大模型推理</title><link>https://fxio.site/posts/ai/omlx/</link><pubDate>Mon, 23 Mar 2026 01:46:53 +0800</pubDate><guid>https://fxio.site/posts/ai/omlx/</guid><description>&lt;h2 id="omlx是什么"&gt;oMLX是什么?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;omlx.ai&lt;/strong&gt;（通常指 &lt;strong&gt;oMLX&lt;/strong&gt; 项目）是一个专为 Apple Silicon（M1/M2/M3/M4 系列芯片）设计的本地大语言模型（LLM）推理服务器。它的核心目标是让 Mac 用户能够以极高的效率、极低的延迟在本地运行各种 AI 模型（如 Llama 3、Mistral、DeepSeek 等）。&lt;/p&gt;
&lt;p&gt;简单来说，它是对 Apple 官方 &lt;strong&gt;MLX&lt;/strong&gt; 框架的深度封装和功能扩展，提供了一个类似 OpenAI/Anthropic 接口的本地后端，并附带了美观的 macOS 菜单栏管理工具。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="omlx-速度提升的核心原理"&gt;oMLX 速度提升的核心原理&lt;/h3&gt;
&lt;p&gt;oMLX 之所以能在 Mac 上跑出惊人的速度，主要归功于以下几个技术层面的深度优化：&lt;/p&gt;
&lt;h4 id="1-统一内存架构-unified-memory-architecture"&gt;1. 统一内存架构 (Unified Memory Architecture)&lt;/h4&gt;
&lt;p&gt;这是 Apple Silicon 的硬件优势，也是 MLX 框架的灵魂。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;原理&lt;/strong&gt;：在传统 PC 中，数据需要在 CPU 内存和 GPU 显存之间来回拷贝。而 oMLX 利用了 Mac 的统一内存，CPU 和 GPU 共享同一块物理内存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提升&lt;/strong&gt;：消除了昂贵的显存带宽瓶颈，模型数据加载到内存后，GPU 可以直接读取并处理，极大减少了延迟。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="2-双层-kv-缓存系统-two-tier-kv-cache"&gt;2. 双层 KV 缓存系统 (Two-Tier KV Cache)&lt;/h4&gt;
&lt;p&gt;这是 oMLX 最具创新性的优化点，解决了大上下文下的重复计算问题。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;热缓存 (RAM)&lt;/strong&gt;：正在进行的对话上下文保存在内存中，实现即时响应。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;冷缓存 (SSD)&lt;/strong&gt;：当内存满了或服务器重启时，oMLX 会将过往的 KV 缓存以 &lt;code&gt;safetensors&lt;/code&gt; 格式持久化到 SSD。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提升&lt;/strong&gt;：当你再次输入相似的 Prompt 或继续之前的长对话时，系统直接从磁盘恢复缓存，&lt;strong&gt;无需重新计算（Prefill）&lt;/strong&gt;。这使得处理数万字上下文的“首字延迟”大幅缩短。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="3-连续批处理-continuous-batching"&gt;3. 连续批处理 (Continuous Batching)&lt;/h4&gt;
&lt;p&gt;通过集成 &lt;code&gt;mlx-lm&lt;/code&gt; 的 BatchGenerator 技术，oMLX 能够同时处理多个并发请求。&lt;/p&gt;</description></item><item><title>Function Calling 函数调用</title><link>https://fxio.site/posts/ai/function-calling/</link><pubDate>Mon, 23 Mar 2026 01:36:35 +0800</pubDate><guid>https://fxio.site/posts/ai/function-calling/</guid><description>&lt;p&gt;&lt;strong&gt;Function Calling&lt;/strong&gt;（函数调用）是人工智能领域，特别是大语言模型（LLM）应用中的一项关键技术。它允许 AI 模型不仅生成文本，还能&lt;strong&gt;主动选择并执行外部定义的函数或工具&lt;/strong&gt;，以解决超出其内部知识库的问题，或完成需要精确计算、实时数据查询等任务。&lt;/p&gt;
&lt;p&gt;简单来说，就是让 AI 学会“调用代码”来干活，而不仅仅是“说话”。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="1-核心概念ai-如何调用函数"&gt;1. 核心概念：AI 如何调用函数？&lt;/h3&gt;
&lt;p&gt;在传统的 LLM 交互中，用户输入提示词（Prompt），模型直接生成文本回答。而在 &lt;strong&gt;Function Calling&lt;/strong&gt; 模式下，流程发生了变化：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;定义工具&lt;/strong&gt;：开发者预先定义一组函数（Function Schema），描述这些函数的名称、参数类型、参数含义以及返回值。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型决策&lt;/strong&gt;：当用户提问时，模型会根据意图判断：是否需要调用某个函数？如果需要，它会自动生成一个包含函数名称和参数值的结构化请求（通常是 JSON 格式）。&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;/ol&gt;
&lt;h3 id="2-为什么需要-function-calling"&gt;2. 为什么需要 Function Calling？&lt;/h3&gt;
&lt;p&gt;大模型本身存在一些局限性，通过函数调用可以弥补：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时效性问题&lt;/strong&gt;：LLM 的训练数据有截止时间，无法知道“现在的天气”或“今天的股价”。通过调用 API，模型可以获取实时数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精确计算与逻辑&lt;/strong&gt;：LLM 在处理复杂数学运算或精确代码执行时容易出错（幻觉）。调用 Python 解释器或计算器函数可以得到 100% 准确的结果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;访问私有数据&lt;/strong&gt;：企业的数据在内部数据库中，模型无法直接读取。通过调用内部 API，模型可以查询订单状态或用户信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制输出格式&lt;/strong&gt;：让模型生成结构化的 JSON 数据，而不是长篇大论的文本，便于程序后续处理。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-工作流程示例"&gt;3. 工作流程示例&lt;/h3&gt;
&lt;p&gt;假设你正在开发一个&lt;strong&gt;智能天气助手&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;开发者定义函数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数名：&lt;code&gt;get_current_weather&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;参数：&lt;code&gt;location&lt;/code&gt; (string), &lt;code&gt;unit&lt;/code&gt; (string: &amp;ldquo;celsius&amp;rdquo; or &amp;ldquo;fahrenheit&amp;rdquo;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;用户提问&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“上海现在的气温是多少？用摄氏度表示。”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;模型推理与调用&lt;/strong&gt;：
模型识别到需要查询天气，于是输出如下结构（JSON）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;get_current_weather&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;arguments&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;location&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;上海&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;unit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;celsius&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后端执行&lt;/strong&gt;：
你的代码解析出 JSON，调用真实的天气 API，得到结果：&lt;code&gt;{&amp;quot;temp&amp;quot;: 24, &amp;quot;status&amp;quot;: &amp;quot;sunny&amp;quot;}&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>RAG 检索增强生成</title><link>https://fxio.site/posts/ai/rag/</link><pubDate>Mon, 23 Mar 2026 01:26:31 +0800</pubDate><guid>https://fxio.site/posts/ai/rag/</guid><description>&lt;h2 id="一什么是-rag"&gt;一、什么是 RAG？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;RAG&lt;/strong&gt; 全称是 &lt;strong&gt;Retrieval-Augmented Generation&lt;/strong&gt;（检索增强生成）。&lt;/p&gt;
&lt;p&gt;为了理解它，我们需要先了解大语言模型（LLM）的两大痛点：&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;：当面对未知领域的问题时，模型可能会自信地编造事实（Hallucination），导致输出内容看似通顺但内容错误。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;RAG 的核心理念非常简单：不要让大模型去“背”所有知识，而是给它配一个“图书馆”。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当用户提问时，RAG 系统不会直接让大模型生成答案，而是先执行两步操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;检索（Retrieval）&lt;/strong&gt;：在外部知识库中搜索与问题最相关的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成（Generation）&lt;/strong&gt;：将检索到的信息连同用户的问题一起交给大模型，让模型基于这些&lt;strong&gt;事实&lt;/strong&gt;生成最终回答。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一句话总结&lt;/strong&gt;：RAG = 大模型（生成能力） + 外部知识库（事实来源）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="二rag-是如何工作的工作流--代码示例"&gt;二、RAG 是如何工作的？（工作流 + 代码示例）&lt;/h2&gt;
&lt;p&gt;RAG 的工作流程通常包含以下四个关键步骤。下面我们通过一个&lt;strong&gt;具体的场景&lt;/strong&gt;，用伪代码和逻辑图解来展示它是如何运行的。&lt;/p&gt;
&lt;h3 id="-场景设定"&gt;🎯 场景设定&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;背景&lt;/strong&gt;：一家科技公司的 AI 客服。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识库（Vector DB）&lt;/strong&gt;：包含《员工手册 2024 版》和《最新产品 Q3 发布说明书》。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用户提问&lt;/strong&gt;：“我报销差旅费需要几个人审批？另外，Q3 发布的 AI 助手叫什么名字？”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;问题难点&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;审批人数在《员工手册》里，不在训练数据中。&lt;/li&gt;
&lt;li&gt;产品名字是刚发布的，模型不知道。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-步骤详解与代码逻辑"&gt;🔧 步骤详解与代码逻辑&lt;/h3&gt;
&lt;h4 id="1-数据准备与索引building-the-library"&gt;1. 数据准备与索引（Building the Library）&lt;/h4&gt;
&lt;p&gt;在系统上线前，我们需要将文档切片并转化为向量存入数据库。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 伪代码：建立知识库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;documents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;《员工手册》：差旅费报销流程需经过直接主管和部门经理两级审批。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;《Q3 发布说明书》：我们于 2023 年 10 月发布了名为 &amp;#39;Nebula AI&amp;#39; 的智能助手。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;《Q3 发布说明书》：&amp;#39;Nebula AI&amp;#39; 支持自然语言处理和多模态交互。&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将文本分块 (Chunking)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;chunks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;split_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将文本转化为向量 (Embedding) 并存入向量数据库 (如 Pinecone, Milvus)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;chunks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;vector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;embedding_model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;vector_db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;upsert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="2-用户提问query"&gt;2. 用户提问（Query）&lt;/h4&gt;
&lt;p&gt;用户输入：&amp;quot;&lt;em&gt;我报销差旅费需要几个人审批？另外，Q3 发布的 AI 助手叫什么名字？&lt;/em&gt;&amp;quot;&lt;/p&gt;</description></item></channel></rss>