将私有数据接入到大模型:LlamaIndex (以文档检索智能问答为例,附 python 代码)

LlamaIndex 是一个用于构建上下文增强型 LLM应用的强大框架,能够帮助开发者高效创建能够与私有数据交互的 LLM 应用。本文介绍了 LlamaIndex 的核心功能及其应用示例(以文档检索智能问答应用为例),具体内容如下:

  1. 基础概念:上下文增强、智能体工作流
  2. LlamaIndex 的核心功能、工具、适用人群
  3. LlamaIndex 的安装步骤:LlamaIndex 包安装,轻量级的嵌入模型下载(附下载链接)。
  4. LlamaIndex 的应用示例:以文档检索智能问答应用为例,包括应用实现的流程步骤、python 代码实现。

LlamaIndex 在 github 项目已有 39.6K stars:https://github.com/run-llama/llama_index,官网文档为:https://docs.llamaindex.ai/en/stable/

基础概念

在当今的技术浪潮中,大型语言模型(LLMs)正以前所未有的速度改变着我们与数据交互的方式。通过大模型与我们的数据交互,涉及三个核心概念:上下文增强、智能体与工作流

上下文增强:让数据真正为LLMs所用

上下文增强(context augmentation),这一技术的核心在于为 LLMs 提供额外的数据,使其能够更精准地解决问题。LLMs 本身已在海量公开数据上预训练,但它们并未直接使用我们的私有数据进行训练。我们的私有数据可能隐藏在 API 背后、SQL数据库中,或是在PDF、PPT 等文件中。 上下文增强技术应运而生,它使私有数据能够被 LLMs 利用,从而解决特定问题。检索增强生成(RAG)是上下文增强的典型示例,它在推理时将上下文与 LLMs 结合使用,极大地提升了模型的准确性和相关性。

智能体:LLMs驱动的智能助手

智能体(agents),即由 LLMs 驱动的知识助手,能够利用各种工具执行诸如搜索、数据提取等任务。智能体(agents)的应用范围从简单的问答系统到复杂的任务执行(感知、决策并采取行动以完成任务)。

工作流:多步骤任务的协同执行

工作流(workflows)是更为复杂的过程,它结合了一个或多个智能体(agent)、数据连接器和其他工具,以完成多步骤的任务。工作流是事件驱动的软件,可以整合 RAG 数据源和多个智能体,创建复杂应用程序,以执行各种复杂任务。 基于工作流创建的应用程序具备反思、错误纠正等高级特性,是先进 LLM 应用的标志。我们可以将工作流部署为生产微服务,从而在实际业务场景中发挥其强大的功能。

LlamaIndex:上下文增强型LLM应用的框架

LamaIndex 是一个用于构建上下文增强型 LLM应用 的强大框架,能够帮助开发者创建能够与私有数据交互的 LLM 应用。

核心作用

LlamaIndex 的核心作用如下

  • 解决 LLM 的局限性:直接使用 LLM 处理私有或动态数据时存在局限性(如知识截断、无法访问最新数据等),LlamaIndex 充当“中间层”,将外部数据与 LLM 无缝衔接。
  • 检索增强生成(RAG):通过检索外部数据中的相关信息,辅助 LLM 生成更准确、可靠的回答,减少“幻觉”现象。

️核心工具

LlamaIndex 提供了以下核心工具:

  • 数据连接器(Data Connectors):LlamaIndex 支持导入多种数据源,包括 PDF 文档、Word 文档、Markdown 文件、网页内容、API数据、数据库等
  • 数据索引(Data Indexes):将数据转换为易于 LLM 高效处理的中间表示形式(如向量、树状结构等)。
  • 引擎(Engines):为数据提供自然语言交互接口,例如:
    • 查询引擎:面向问答场景的强大接口(例如检索增强生成(RAG)管道)。
    • 聊天引擎:支持多轮对话的交互式接口,实现与数据的"一问一答"式交流。

  • 智能体(Agents):通过工具增强的 LLM 知识助手,支持从简单的功能辅助到 API 集成等多种能力。
  • 可观察性/评估集成(Observability/Evaluation Integrations):提供性能评估和成本分析工具,帮助你优化应用性能和控制成本
  • 工作流(Workflows):将上述所有组件组合成事件驱动系统,其灵活性远超传统的基于图(graph-based)的架构方案。

‍ ‍ ‍ 适用人群

LlamaIndex 的适用人群包括以下几类:

  • 初学者:可以使用高级API,仅需 5 行代码即可实现基本功能。
  • 进阶用户:可以自定义和扩展任何模块,包括数据连接器、索引、检索器、查询引擎和重新排序模块。
  • 企业用户:提供完整的生产级解决方案,适用于需要构建企业级LLM应用的场景。

安装步骤

使用 LlamaIndex 时,通常需要与 LlamaIndex 核心和选定的集成集(或插件)配合使用。在 Python 中使用 LlamaIndex时,有以下两种开始构建的方式:

  1. 入门包:llama-index。包含 LlamaIndex 核心功能和一些功能的集成包。
  2. 定制化包:llama-index-core。安装 LlamaIndex 核心,并在LlamaHub上添加你的应用程序所需的 LlamaIndex集成包。有超过 300 个 LlamaIndex 集成包可与核心无缝协作,可以使用自己偏好的 LLM、嵌入模型和向量存储。

lamaIndex Python 库是命名空间化的,这意味着导入语句中包含core的部分表示正在使用核心包,而不包含core的部分表示正在使用集成包。如:

  • from http://llama_index.core.xxx import ClassABC:从核心子模块xxx中导入类ClassABC。
  • from llama_index.xxx.yyy import SubclassABC:从子模块xxx的集成部分yyy中导入类SubclassABC
# typical pattern
from llama_index.core.xxx import ClassABC 
from llama_index.xxx.yyy import (
    SubclassABC,
)  

# 具体示例
from llama_index.core.llms import LLM
from llama_index.llms.openai import OpenAI

LlamaIndex 的 python 包安装

在终端运行 pip install llama-index 安装 LlamaIndex。

pip install llama-index

llama-index 是一个入门集成包,包含了以下 packages:

  • llama-index-core
  • llama-index-llms-openai
  • llama-index-embeddings-openai
  • llama-index-program-openai
  • llama-index-question-gen-openai
  • llama-index-agent-openai
  • llama-index-readers-file
  • llama-index-multi-modal-llms-openai

若要调用 DeepSeek 模型服务,我们还需要安装 llama-index-llms-deepseek:

pip install llama-index-llms-deepseek

安装 llama_index.embeddings.huggingface,用于调用 huggingface 的嵌入模型。

pip install llama_index.embeddings.huggingface

嵌入模型下载

本文的应用示例,使用 huggingface 上的 BAAI 的嵌入模型。以下两个是轻量级的嵌入模型:

使用 huggingface-cli 命令,将嵌入模型下载到本地:

huggingface-cli download --resume-download BAAI/bge-small-en-v1.5 --local-dir bge-small-en-v1.5
huggingface-cli download --resume-download BAAI/bge-small-zh-v1.5 --local-dir bge-small-zh-v1.5

由于科学上网的原因,上面的两个嵌入模型可能不好下载。海哥已经从 huggingface 下载好了。关注我,发送消息:“嵌入模型”,获取下载链接

以文档检索智能问答应用

应用场景:针对用户提出的问题,检索一篇论文,大模型根据检索到的内容,回答用户的问题。 要通过 LlamaIndex 实现上面的场景,首先我们要理解以下两类模型:

  • 语言模型(LLM):用于生成文本(如 DeepSeek、Qwen)。
  • 嵌入模型(Embedding Model):用于将文本转换为向量(如 text-embedding-3-small、bge-large)。

应用的流程步骤如下:

  1. 初始化:文档数据被加载;嵌入模型将文档内容转换为向量表示;向量存储在索引存储中。
  2. 用户提问:用户提出问题。
  3. 用户问题向量化:检索器使用嵌入模型将用户问题转换为向量表示。
  4. 检索结果:检索器在索引存储中找到与用户问题最相关的文档片段。
  5. 将用户问题 + 检索结果输入到语言模型:大语言模型接收用户问题和检索到的文档片段。
  6. 返回针对用户问题的回答:大语言模型根据用户问题和检索到的文档片段生成最终的回答;用户接收大语言模型生成的回答。

以检索一篇 RAG 论文为例:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(https://arxiv.org/pdf/2005.11401),该论文在 RAG 领域具有重要的地位,系统性地总结了 RAG 技术的关键组件和应用。感兴趣的读者可以阅读一下。 python 代码如下:

、# 导入所需库
from llama_index.llms.deepseek import DeepSeek
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader
import os

# 从环境变量获取 DeepSeek API Key
api_key = os.environ["DS_API_KEY"]

# 配置本地嵌入模型路径(已下载的 BGE 英文小模型)
embed_model_path = 'D:\\DevelopTools\\huggingface_model\\baai\\bge-small-en-v1.5'

# 初始化 DeepSeek 语言模型
llm = DeepSeek(model="deepseek-chat", api_key=api_key)

# 全局配置设置
Settings.llm = llm  # 绑定语言模型(用于生成回答)
# 绑定嵌入模型(用于生成向量)
Settings.embed_model = HuggingFaceEmbedding(
    model_name=embed_model_path,
    cache_folder=embed_model_path
)

# 加载本地文档数据("data" 目录下的 paper)
documents ="data").load_data()

# 创建向量索引(自动使用配置的嵌入模型生成向量)
index = VectorStoreIndex.from_documents(documents)

# 创建查询引擎(单次问答模式)
query_engine = index.as_query_engine()

# 执行查询并打印结果
response = query_engine.query("介绍一下 RAG-Sequence Model")
print(response)

若要将上面的代码,改造成用户与大模型的多轮对话交互,代码如下:

from llama_index.llms.deepseek import DeepSeek
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader, StorageContext
from llama_index.core.chat_engine import ContextChatEngine  # 支持上下文的聊天引擎
import os


def main():
    # 环境配置
    api_key = os.environ.get("DS_API_KEY")
    if not api_key:
        raise ValueError("未找到环境变量 DS_API_KEY")

    # 模型路径配置
    embed_model_path = 'D:\\DevelopTools\\huggingface_model\\baai\\bge-small-en-v1.5'
    data_dir = "data"  # 文档数据目录

    # 初始化模型
    try:
        # 语言模型(DeepSeek)
        llm = DeepSeek(model="deepseek-chat", api_key=api_key)

        # 嵌入模型(本地加载)
        embed_model = HuggingFaceEmbedding(
            model_name=embed_model_path,
            cache_folder=embed_model_path,
            device="cpu"  # 可选:指定使用 CPU/GPU
        )

        # 全局设置
        Settings.llm = llm
        Settings.embed_model = embed_model
    except Exception as e:
        print(f"模型初始化失败: {str(e)}")
        return

    # 加载文档并创建索引
    try:
        documents = SimpleDirectoryReader(data_dir).load_data()
        index = VectorStoreIndex.from_documents(documents)
    except FileNotFoundError:
        print(f"文档目录 {data_dir} 不存在")
        return
    except Exception as e:
        print(f"索引创建失败: {str(e)}")
        return

    # 创建支持上下文的聊天引擎
    chat_engine = index.as_chat_engine(
        chat_mode="context",  # 启用上下文模式
        system_prompt="你是一个专业的技术助手,请基于提供的文档回答问题。",  # 系统提示
        verbose=True  # 显示详细过程
    )

    # 多轮对话循环
    print("欢迎使用文档问答助手!输入 'exit' 退出对话。")
    while True:
        try:
            user_input = input("\n用户: ")
            if user_input.lower() == "exit":
                print("对话结束。")
                break

            # 生成响应(自动携带历史上下文)
            response = chat_engine.chat(user_input)
            print(f"\n助手: {response}")
        except KeyboardInterrupt:
            print("\n对话被中断。")
            break
        except Exception as e:
            print(f"请求出错: {str(e)}")


if __name__ == "__main__":
    main()

运行效果(准确地介绍了关于论文里的 RAG-Sequence Model、RAG-Token Model 两个概念):

D:\DevelopTools\pythonenv\llamaindex\Scripts\python.exe D:\python_project\llm_learning\llamaindex\query_about_paper.py 
欢迎使用文档问答助手!输入 'exit' 退出对话。

用户: 介绍一下 RAG-Sequence Model

助手: RAG-Sequence Model 是一种用于生成文本的模型,它使用相同的检索文档来生成完整的序列。具体来说,RAG-Sequence Model 将检索到的文档视为一个单一的潜在变量,并通过 top-K 近似来边缘化这个变量,从而得到序列到序列的概率 \( p(y|x) \)。

具体步骤如下:
1. **检索文档**:使用检索器(retriever)检索出 top-K 个文档。
2. **生成序列概率**:对于每个检索到的文档,生成器(generator)生成输出序列的概率。
3. **边缘化**:将这些概率进行边缘化处理,得到最终的序列概率。

公式表示为:
\[
p_{\text{RAG-Sequence}}(y|x) \approx \sum_{z \in \text{top-k}(p(\cdot|x))} p_{\eta}(z|x) p_{\theta}(y|x,z) = \sum_{z \in \text{top-k}(p(\cdot|x))} p_{\eta}(z|x) \prod_{i} p_{\theta}(y_i|x,z,y_{1:i-1})
\]

其中,\( p_{\eta}(z|x) \) 是检索器给出的文档概率,\( p_{\theta}(y|x,z) \) 是生成器给出的序列概率。

RAG-Sequence Model 适用于需要从单一文档中生成完整序列的任务,例如问答系统或文本生成任务。

用户: 介绍一下 RAG-Token Model

助手: RAG-Token Model 是一种用于生成文本的模型,它允许为每个目标标记(token)选择不同的检索文档,并在生成过程中对这些文档进行边缘化处理。与 RAG-Sequence Model 不同,RAG-Token Model 在生成每个目标标记时可以选择不同的文档,从而在生成答案时能够从多个文档中提取内容。

具体步骤如下:
1. **检索文档**:使用检索器(retriever)检索出 top-K 个文档。
2. **生成标记概率**:对于每个检索到的文档,生成器(generator)生成下一个输出标记的概率。
3. **边缘化**:将这些概率进行边缘化处理,得到下一个标记的概率分布。
4. **重复过程**:重复上述过程,生成后续的输出标记。

公式表示为:
\[
p_{\text{RAG-Token}}(y|x) \approx \prod_{i} \sum_{z \in \text{top-k}(p(\cdot|x))} p_{\eta}(z|x) p_{\theta}(y_i|x,z,y_{1:i-1})
\]

其中,\( p_{\eta}(z|x) \) 是检索器给出的文档概率,\( p_{\theta}(y_i|x,z,y_{1:i-1}) \) 是生成器给出的下一个标记的概率。

RAG-Token Model 适用于需要从多个文档中提取信息来生成答案的任务,例如开放域问答系统或复杂的文本生成任务。通过为每个标记选择不同的文档,RAG-Token Model 能够更灵活地利用多个文档中的信息。

用户: exit
对话结束。

 如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!

在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

五、AI产品经理大模型教程

在这里插入图片描述

LLM大模型学习路线 

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

 

<think>嗯,用户现在问的是如何将深度求索(DeepSeek)和自己的知识库结合起来使用。之前他们问过Vue怎么接入智能对话,现在可能是在扩展他们的项目,需要结合特定的大模型和自己的数据。首先,我需要确认DeepSeek是否提供了相关的API或者文档支持知识库集成。可能用户已经知道如何调用基础API,但现在需要进一步的知识库整合。 用户可能的需求是,他们有自己的数据,比如产品信息、文档或者FAQ,想要让DeepSeek在回答时能够基于这些数据生成更准确的回复。这时候可能需要用到RAG(检索增强生成)技术,或者利用微调的方法让模型适应特定领域的数据。 接下来,我得考虑两种主要方法:检索增强生成(RAG)和模型微调。RAG适合实时检索外部知识库,而微调则是让模型学习特定领域的数据。用户可能没有太多训练资源,所以RAG可能更可行,尤其是如果他们希望知识库可以动态更新的话。 然后需要分步骤说明。首先准备知识库,可能需要处理成文本向量,存储在向量数据库中。然后,在用户提问时,先检索相关知识,再结合这些信息生成回答。这涉及到文本嵌入模型和向量数据库的选择,比如Hugging Face的模型或OpenAI的Embeddings,向量数据库如FAISS或Pinecone。 另外,用户可能需要一个后端服务来处理检索和调用DeepSeek的API,前端用Vue展示,就像之前的问题那样。需要注意安全性,避免在前端暴露API密钥,所以建议通过后端代理。 用户可能还关心如何优化检索效果,比如分块策略、元数据过滤,以及如何处理知识库的更新。此外,成本也是一个问题,特别是如果知识库很大,生成嵌入向量可能会有开销,这时候分块和选择合适的模型很重要。 最后,要提醒用户注意事项,比如数据预处理的重要性、API调用的成本控制,以及回复的校验,确保生成的内容准确合理。可能还需要建议他们使用现有的开源框架,比如LangChain或LlamaIndex,来简化流程。</think>在 Vue 中接入 DeepSeek 并与其知识库结合使用,通常需要结合 **检索增强生成(RAG, Retrieval-Augmented Generation)** 技术。以下是详细实现流程: --- ### 一、整体架构 ```plaintext 用户输入 → Vue前端 → 后端服务 → 知识库检索 → DeepSeek API → 返回增强后的回答 ``` --- ### 二、具体步骤 #### 1. **准备知识库** - 将自有知识库文档转换为结构化数据: - 格式:TXT/PDF/Markdown → 分段文本 - 处理:文本清洗、分块(建议 256-512 tokens/块) - 生成向量嵌入(Embedding): - 使用模型:`text-embedding-3-small`、`bge-large-zh`(中文)或 DeepSeek 自带嵌入模型 - 存储到向量数据库:ChromaDB、FAISS、Pinecone 等 **示代码Python 处理知识库):** ```python from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceEmbeddings # 文本分块 splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50) docs = splitter.split_documents(your_documents) # 生成嵌入 embedder = HuggingFaceEmbeddings(model_name="BAAI/bge-zh") vectors = embedder.embed_documents([doc.page_content for doc in docs]) # 存入向量数据库(以 ChromaDB 为) import chromadb client = chromadb.PersistentClient(path="/path/to/db") collection = client.create_collection("knowledge_base") collection.add(embeddings=vectors, documents=[doc.page_content for doc in docs]) ``` --- #### 2. **前端集成(Vue)** 创建聊天组件,与后端 API 交互: ```vue <template> <div> <input v-model="input" @keyup.enter="sendQuery" /> <button @click="sendQuery">发送</button> <div v-html="response"></div> </div> </template> <script> export default { data() { return { input: '', response: '' }; }, methods: { async sendQuery() { try { const res = await fetch('https://your-api.com/ask', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ question: this.input }) }); const data = await res.json(); this.response = data.answer; } catch (error) { console.error('Error:', error); } } } }; </script> ``` --- #### 3. **后端服务(关键步骤)** 实现 RAG 流程: 1. 接收用户问题 2. 从向量数据库检索相关知识 3. 将检索结果 + 原始问题提交给 DeepSeek **Python(FastAPI):** ```python from fastapi import FastAPI from pydantic import BaseModel import chromadb app = FastAPI() chroma_client = chromadb.PersistentClient(path="/path/to/db") collection = chroma_client.get_collection("knowledge_base") class Query(BaseModel): question: str @app.post("/ask") async def ask(query: Query): # 1. 检索知识库 question_embedding = embedder.embed_query(query.question) results = collection.query(query_embeddings=[question_embedding], n_results=3) # 2. 构建提示词 context = "\n".join(results['documents'][0]) prompt = f"""基于以下知识库内容回答问题: {context} 问题:{query.question} 答案:""" # 3. 调用 DeepSeek API deepseek_response = requests.post( "https://api.deepseek.com/v1/chat/completions", headers={"Authorization": "Bearer YOUR_API_KEY"}, json={ "model": "deepseek-chat", "messages": [{"role": "user", "content": prompt}] } ) return {"answer": deepseek_response.json()['choices'][0]['message']['content']} ``` --- ### 三、高级优化技巧 #### 1. **检索优化** - 混合搜索:结合向量检索 + 关键词匹配(BM25) - 元数据过滤:为文档块添加时间、来源等元数据 - 重排序:使用 `bge-reranker` 等模型优化检索结果排序 #### 2. **提示工程** ```python # 更好的提示词模板 prompt = f""" 你是一名专业助手,请严格根据以下信息回答问题。如果信息不足,请回答“我不清楚”。 参考信息: {context} 问题:{query.question} 请按照以下格式回答: 1. 核心要点(不超过50字) 2. 详细解释(分点列出) 3. 数据来源(如果有) """ ``` #### 3. **流式传输** 通过 SSE(Server-Sent Events)实现逐字输出: ```javascript // Vue 前端 const eventSource = new EventSource(`/ask-stream?question=${encodeURIComponent(input)}`); eventSource.onmessage = (e) => { this.response += JSON.parse(e.data).token; }; ``` --- ### 四、注意事项 1. **知识更新**:定期同步最新数据到向量库 2. **权限控制**:通过 JWT 验证用户访问权限 3. **成本控制**:监控 API 调用量和 token 消耗 4. **错误处理**:添加网络重试、限流机制 如果需要更具体的实现细节(如本地部署方案、私有化知识库处理),可以进一步说明需求!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值