当前位置:首页>python>2python之搜索引用文件展示及前端编译

2python之搜索引用文件展示及前端编译

  • 2026-10-11 05:54:01
2python之搜索引用文件展示及前端编译

写在前面的话

不怕别人知道。之前,做头条运营时,有一段时间,我特别害怕别人知道。一是不好意思,怕别人知道我干这种不务正业的事,二是怕同行知道了,都去做。后面我发现知道的人越多越好,对我来说反而是一种推广,如果别人压根就没听说过,我还要解释半天,估计别人还是不相信,以为我是骗子。至于同行,想做的,来来来,咱们交流交流,但一些关键节点是不会说的,那是我花时间研究出来的,不可能让别人免费白嫖。就像最近获得菲尔兹奖的王虹,她研究挂谷猜想取得了突破。但在发表论文之前,她会把自己的成果轻易地告诉别人吗?显然不会,因为他研究了十几年才研究出点成果。但别人问她在干啥,她会告诉别人自己在研究挂谷猜想,和别人交流,也许能激发她的思路,别人估计也没她那个毅力和脑子研究出来,所以,她不怕别人知道。同样,我也想让更多人知道我在做的事,说不定能碰出什么火花呢?

[156+100]-------->底部有张生活照片(头条号运营:大家想全托管上号的联系我哦,每天让你得个地铁钱,微信号: qhz_toutiao)

【关键词】python、ragflow、引用文件、前端编译

一、搜索引用文件展示(三级)

描述:现在搜索引用文件展示不出来,需要参考官网搞一下。

开工:

第一步:官网数据(四级)

20250620周六时间段:20:22-21:00

现在官网数据如下:

data: {
"code": 0,
"message": "",
"data": {
"answer": "根据提供的文档信息,生成SSH密钥的步骤如下:\n\n```bash\nssh-keygen -t rsa -b 4096 -C \"243127387@qq.com\"\n```\n [ID:0]\n\n说明:\n1. 使用`-t rsa`指定密钥类型为RSA\n2. 使用`-b 4096`指定密钥长度为4096位\n3. 使用`-C`添加注释(这里用的是示例邮箱243127387@qq.com)\n\n执行命令后,按照提示操作:\n- 选择密钥保存位置(默认是~/.ssh/id_rsa)\n- 设置密钥密码(可选)",
"reference": {
"total": 1,
"chunks": [{
"id": "05130bb5066937ee",
"content": "a.检查 SSH 密钥配置(四级)首先,确保你在本地生成并配置了 SSH 密钥,并且正确添加到阿里云效账号。a.1生成 SSH 密钥(如果还没有的话)如果你还没有 SSH 密钥,可以使用下面的命令生成:ssh-keygen -t rsa -b 4096 -C \"243127387@qq.com\"然后按照提示保存密钥文件。",
"document_id": "948bc4ec4dbc11f09db642010a8e0005",
"document_name": "git相关-上传ragflow.docx",
"dataset_id": "e73948c0445911f0bbbc42010a8a0003",
"image_id": "",
"positions": [
[2, 1, 1, 1, 1]
],
"url": null,
"similarity": 18.740826629827506,
"vector_similarity": 0.657597764274924,
"term_similarity": 0.7764961436357573,
"doc_type": ""
}],
"doc_aggs": [{
"doc_name": "git相关-上传ragflow.docx",
"doc_id": "948bc4ec4dbc11f09db642010a8e0005",
"count": 1
}]
}
}
}

注:接下来,测试服上传同样文件进行解析和搜索。

第二步:上传文件(四级)

20250620周五时间段:20:25-21:00

上传如下:

图2a-1

注:估计解析还得一会,先回去。还没解析成功,把官网最新的代码下载下来。

第三步:下载最新官网代码(四级)

20250620周五时间段:23:49-01:00

下载好了,解压后如下:

图2a-2

注:打开研究下ask接口。

第四步:研究ask接口(四级)

20250621周六时间段:00:04-02:00

ask方法如下:

def ask(question, kb_ids, tenant_id, chat_llm_name=None):
    kbs = KnowledgebaseService.get_by_ids(kb_ids)
    embedding_list = list(set([kb.embd_id for kb in kbs]))

    is_knowledge_graph = all([kb.parser_id == ParserType.KG for kb in kbs])
    retriever = settings.retrievaler if not is_knowledge_graph else settings.kg_retrievaler

    embd_mdl = LLMBundle(tenant_id, LLMType.EMBEDDING, embedding_list[0])
    chat_mdl = LLMBundle(tenant_id, LLMType.CHAT, chat_llm_name)
    max_tokens = chat_mdl.max_length
    tenant_ids = list(set([kb.tenant_id for kb in kbs]))
    kbinfos = retriever.retrieval(question, embd_mdl, tenant_ids, kb_ids, 1, 12, 0.1, 0.3, aggs=False, rank_feature=label_question(question, kbs))
    knowledges = kb_prompt(kbinfos, max_tokens)
    prompt = """
    Role: You're a smart assistant. Your name is Miss R.
    Task: Summarize the information from knowledge bases and answer user's question.
    Requirements and restriction:
      - DO NOT make things up, especially for numbers.
      - If the information from knowledge is irrelevant with user's question, JUST SAY: Sorry, no relevant information provided.
      - Answer with markdown format text.
      - Answer in language of user's question.
      - DO NOT make things up, especially for numbers.

    ### Information from knowledge bases
    %s

    The above is information from knowledge bases.

    """ % "\n".join(knowledges)
    msg = [{"role": "user", "content": question}]

    def decorate_answer(answer):
        nonlocal knowledges, kbinfos, prompt
        answer, idx = retriever.insert_citations(answer, [ck["content_ltks"] for ck in kbinfos["chunks"]], [ck["vector"] for ck in kbinfos["chunks"]], embd_mdl, tkweight=0.7, vtweight=0.3)
        idx = set([kbinfos["chunks"][int(i)]["doc_id"] for i in idx])
        recall_docs = [d for d in kbinfos["doc_aggs"] if d["doc_id"] in idx]
        if not recall_docs:
            recall_docs = kbinfos["doc_aggs"]
        kbinfos["doc_aggs"] = recall_docs
        refs = deepcopy(kbinfos)
        for c in refs["chunks"]:
            if c.get("vector"):
                del c["vector"]

        if answer.lower().find("invalid key") >= 0 or answer.lower().find("invalid api") >= 0:
            answer += " Please set LLM API-Key in 'User Setting -> Model Providers -> API-Key'"
        refs["chunks"] = chunks_format(refs)
        return {"answer": answer, "reference": refs}

    answer = ""
    for ans in chat_mdl.chat_streamly(prompt, msg, {"temperature": 0.1}):
        answer = ans
        yield {"answer": answer, "reference": {}}
    yield decorate_answer(answer)

注:接下来,想着本地手搓一个最新版的,使其跑起来,打日志,看它是怎么调用的,怎么能召回文档。

第五步:先看一个替换流程(四级)

二、本地跑最新版代码(三级)

描述:本地跑个最新的代码,看看搜索是怎么搞出来的。

开工:

第一步:按文档来(四级)

20250621周六时间段:01:02-02:00

https://ragflow.io/docs/dev/

a.开始

RAGFlow 是一个基于深度文档理解的开源 RAG(检索增强生成)引擎。与 LLM 集成后,它能够提供真实的问答功能,并以来自各种复杂格式数据的可靠引用为支撑。

本快速入门指南描述了以下一般流程:

  • 启动本地 RAGFlow 服务器,

  • 创建知识库,

  • 干预文件解析,

  • 根据您的数据集建立 AI 聊天。

注:

我们正式支持 x86 CPU 和 Nvidia GPU,本文档提供了在 x86 平台上使用 Docker 部署 RAGFlow 的说明。虽然我们也在 ARM64 平台上测试了 RAGFlow,但我们不维护 ARM 平台的 RAGFlow Docker 镜像。

如果您使用的是 ARM 平台,请按照本指南构建 RAGFlow Docker 镜像。

三、前端文件替换流程(三级)

描述:现在zero4上前端index.html文件需要替换,理一下流程。

开工:

第一步:web/dist下的index.html改为app.html

命令如下:

cd web/dist
mv index.html app.html

第二步:把web/dist复制至web/dist/admin下

命令如下:

cd ragflow
mv web/dist/ web/admin/dist

第三步:webclient下的index.html改为chat.html

命令如下:

cd ragflow
mv webclient/dist/index.html web/dist/chat.html

第四步:把webclient/dist复制至web/dist下

命令如下:

cd ragflow
cp -Rf webclient/dist/. web/dist

第五步:把web下的dist整体覆盖容器内web/dist

命令如下:

cd web
tar -cvf - ./dist | docker exec -i ragflow-server tar -xvf - -C /ragflow/web/
  • -cvf -:将 ./dist 打包成 tar 流

  • -xvf -:在容器内解压到 /ragflow/web/

  • 这样能绕过某些 docker cp 的权限限制。

注:接下来,看一下前端编译。

四、前端bash编译(三级)

描述:现在前端编译,我觉得有问题,需要1个多小时,需要处理一下。

开工:

第一步:研究脚本(四级)

20250621周六时间段:21:54-22:00

相关前端脚本如下:

build_web() {
  local web=$1

  cd "$APP_HOME/$web"

  # 获取 src 目录最新文件的修改时间(Unix 时间戳)
  src_latest_time=$(find src -type f -printf "%TY-%Tm-%Td %TH:%TM:%TS %p\n" | sort -nr | head -1 | cut -d. -f1)
  echo src_latest_time=$src_latest_time

  # 获取 docker 容器内 dist 目录最新文件的修改时间(Unix 时间戳)
  find_cmd="find /ragflow/$web/dist -type f -printf \"%TY-%Tm-%Td %TH:%TM:%TS %p\n\" | sort -nr | head -1 | cut -d. -f1"
  dist_latest_time=$(docker exec ragflow-server sh -c "$find_cmd")
  echo dist_latest_time=$dist_latest_time


  # 直接使用字符串比较(YYYY-MM-DD HH:MM:SS 格式可字典序比较)
  if [[ "$src_latest_time" > "$dist_latest_time" ]]; then
      echo "find new $web files"

    # Check if svgo is installed globally, if not install it
    npm list -g svgo || npm install -g svgo

    # Check if node_modules exists, if not install dependencies
    [ -d "node_modules" ] || npm install

    # 检查 umi 是否已安装
    if ! npm list umi --depth=0 > /dev/null 2>&1; then
      echo "umi 未安装,正在安装..."
      npm install umi --save-dev
    fi

    echo "正在编译前端..."
    NODE_OPTIONS="--max-old-space-size=4096" \
    UMI_UI=none \
    COMPRESS=none \
    npm run build -- --max-workers=12 || {
        echo "npm run build 执行失败" >&2
        exit 1  # 中途退出,返回非0状态码表示失败
    }
  fi
}

五、头条战果汇报

昨日数据来啦,昨日总收入:1123.69块,昨日总播放:892.92万次,软件截图如下:

图2e-1

注:想要全托管运营头条号的联系我,你出账号,我来运营,保你天天有钱花,咨询电话: 17701328814(微信同号),也可以加群先了解一下。

图2e-2

注:个人微信如下,欢迎骚扰。

图2e-3

六、生活照片

拍摄于‎2026‎年‎5‎月‎4‎日,‏‎10:03:47,带二宝去天津玩拍的,还是不愿意去旅游,到哪都是人,累的够呛,当时二宝三岁七个月。工作中很多事,靠自己努力,现在是自由工作者,好不容易得出的成果,不可能轻易示人,尤其是对我完成工作没有一点帮助的人。但同时我也是个没原则的人,有时一动情一股脑全倒给别人了,之前一位领导说,啥事都别给海振说,他是一个最不能保守秘密的人。其实我就是心好,这点随我妈,看不得别人受苦,自己本就是泥菩萨,还想拯救大众,我也是个奇葩。前一段回去,看到一个叔现在靠乞讨为生,老妈忍不住给了100,我也给了一盒烟,一瓶水。媳妇说,你可怜这个,可怜那个,能不能可怜可怜我,我跟着你这么多年,我得到啥了。哎,媳妇说的也对,慢慢改吧,家和万事兴。

图2f-1

《本文完》

最新文章

随机文章