引言

在人工智能技术飞速发展的今天,大语言模型(LLM)已经成为了各行各业关注的焦点。从智能客服到内容创作,从代码生成到数据分析,大语言模型正在深刻地改变着我们的工作和生活方式。然而,如何高效地利用这些强大的AI工具,特别是如何将它们与我们自己的知识库相结合,构建个性化的智能助手,仍然是许多开发者和企业面临的挑战。

Vibe Coding作为一种创新的编程范式,结合Qoder智能开发环境,为开发者提供了一种全新的解决方案。本文将通过实际案例,全面展示Vibe Coding的实践应用,并演示如何利用它构建一个功能完整的个人知识库助手。

Vibe Coding概述

Vibe Coding是一种创新的编程范式,它强调通过直观的交互式开发环境来提升编码体验。结合Qoder智能开发工具,Vibe Coding能够让开发者以更自然的方式与代码进行交互,实现所见即所得的编程体验。Vibe Coding的核心理念是"沉浸式编程",即通过智能化的代码补全、实时反馈和可视化调试,让开发者能够专注于解决问题而非语法细节。

Vibe Coding的主要特点包括:

  1. 沉浸式体验:通过Qoder IDE提供直观的交互式开发环境
  2. 智能辅助:基于AI的代码建议和错误检测
  3. 实时反馈:代码修改即时生效,无需繁琐的编译步骤
  4. 可视化调试:直观的调试界面帮助快速定位问题
  5. 无缝集成:与主流开发工具和框架良好集成

Vibe Coding快速入门

环境准备

在开始使用Vibe Coding之前,首先需要进行环境配置。Vibe Coding与Qoder IDE紧密结合,提供了开箱即用的开发体验。

  1. 下载并安装Qoder IDE,这是体验Vibe Coding的最佳环境

image-20251124150949313

  1. 打开Qoder IDE,开启你的Vibe Coding之旅

image-20251124151208523

智能对话

通过Vibe Coding快速实现与大模型的交互。

  1. 在Qoder IDE中创建一个 demo_chat.py 脚本,利用Vibe Coding的智能补全功能快速编写代码:
import lazyllm    

chat = lazyllm.OnlineChatModule()

while True:
    query = input("query(enter 'quit' to exit): ")      
    if query == "quit":                                 
        break
    res = chat.forward(query)                           
    print(f"answer: {res}")                             
  1. 利用Vibe Coding的实时调试功能,直接在IDE中运行代码,效果如下图所示:

image-20251124105150110

借助Vibe Coding的智能辅助,整个过程不到3分钟即可完成。这个简单的示例展示了如何通过Vibe Coding快速实现与大模型的交互,大大提升了开发效率。

Web应用

利用Vibe Coding配合Qoder IDE,可以轻松创建和部署Web应用!

  1. 在Qoder IDE中创建一个 demo_web.py 脚本,利用Vibe Coding的智能模板功能快速生成代码:
import lazyllm

chat = lazyllm.OnlineChatModule()
lazyllm.WebModule(chat, port=23333).start().wait()

image-20251124105238530

  1. 快速启动Web服务并访问 http://localhost:23333 与大模型进行对话。

image-20251124105418152

通过这个示例可以看出,Vibe Coding不仅简化了大模型调用的代码编写过程,还提供了便捷的Web应用部署功能,使得开发者能够快速将模型功能以Web服务的形式提供给用户使用。

知识库检索

利用Vibe Coding调用大模型,结合知识库进行回复。

  1. 在Qoder IDE中创建脚本demo_rag.py,利用Vibe Coding的智能代码生成功能快速编写以下代码:
import lazyllm

# Part0

documents = lazyllm.Document(dataset_path="knowledge_base",
                             embed=lazyllm.OnlineEmbeddingModule(),
                             manager=False)

documents.create_node_group(name="sentences",
                           transform=lambda s: '。'.split(s))

prompt = '你将扮演一个人工智能问答助手的角色,完成一项对话任务。在这个任务中,你需要根据给定的上下文以及问题,给出你的回答。'

# Part1

with lazyllm.pipeline() as ppl:
    with lazyllm.parallel().sum as ppl.prl:
        prl.retriever1 = lazyllm.Retriever(doc=documents,
                                           group_name="CoarseChunk",
                                           similarity="bm25_chinese",
                                           topk=3)
        prl.retriever2 = lazyllm.Retriever(doc=documents,
                                           group_name="sentences",
                                           similarity="cosine",
                                           topk=3)

    ppl.reranker = lazyllm.Reranker(name='ModuleReranker',
                                    model=lazyllm.OnlineEmbeddingModule(type="rerank"),
                                    topk=1) | bind(query=ppl.input)

    ppl.formatter = (
        lambda nodes, query: dict(
            context_str = "".join([node.get_content() for node in nodes]),
            query = query,
        )
    ) | bind(query=ppl.input)

    ppl.llm = lazyllm.OnlineChatModule().prompt(
        lazyllm.ChatPrompter(instruction=prompt, extra_keys=['context_str']))

# Part2

rag = lazyllm.ActionModule(ppl)
rag.start()

query = input("query(enter 'quit' to exit): ")
if query == "quit":
    exit(0)

res = rag(query)
print(f"answer: {res}")
  1. 在Qoder IDE中利用Vibe Coding的文件管理功能,快速创建文件夹knowledge_base,然后在该文件夹下创建文件 example.txt并填入以下内容:
小明在2025年11月24日的早上没有吃饭。
  1. 利用Vibe Coding的实时调试功能运行代码,与大模型交互。

image-20251124110435108

从大模型的回复可以看出,其检索了知识库中的内容,然后再回复用户。

这个示例展示了Vibe Coding在RAG(Retrieval-Augmented Generation)应用中的强大能力。通过文档处理、检索器、重排序器等模块的组合,配合Qoder IDE的智能辅助,能够轻松实现基于知识库的问答功能。

构建个人知识库助手

需求分析

在实际应用中,我们往往需要一个更加完整的解决方案,不仅能够进行智能对话和知识库检索,还需要提供友好的用户界面和便捷的知识库管理功能。因此,我们计划构建一个个人知识库助手,具备以下功能特性:

  1. Web界面:提供直观易用的Web界面,用户可以通过浏览器访问
  2. 文件上传:支持用户上传本地文件到知识库目录
  3. 知识库管理:能够查看和管理知识库中的文件
  4. 智能问答:基于知识库内容进行智能问答
  5. 对话历史:保存和显示对话历史记录

项目开发

  1. 在Qoder IDE中打开demo_rag.pydemo_web.py文件,利用Vibe Coding的智能分析功能理解两个脚本的功能。

image-20251124111011424

  1. 利用Vibe Coding的智能代码生成功能,在Qoder IDE中创建新脚本web_rag.py,该脚本实现了一个知识库助手。启动脚本后,用户可以访问 http://0.0.0.0:23333,上传本地文件到知识库的目录,然后向大模型提出问题,大模型基于知识库的内容进行回复。

image-20251124111309282

以下是Vibe Coding智能体的思考和回复内容:

我将结合 [demo_web.py](file:///e:/TEST/demo_web.py) 和 [demo_rag.py](file:///e:/TEST/demo_rag.py) 创建一个新的脚本 [web_rag.py](file:///e:/TEST/web_rag.py),实现一个可以通过网页上传文件并基于知识库回答问题的知识库助手。
首先,让我分析一下两个脚本的功能:
1. [demo_web.py](file:///e:/TEST/demo_web.py) - 启动了一个简单的聊天界面
2. [demo_rag.py](file:///e:/TEST/demo_rag.py) - 实现了基于知识库的问答功能
我需要创建一个整合了这两个功能的新脚本,支持文件上传和基于知识库的问答。
我已经创建了 [web_rag.py](file:///e:/TEST/web_rag.py) 文件,它结合了 [demo_web.py](file:///e:/TEST/demo_web.py) 和 [demo_rag.py](file:///e:/TEST/demo_rag.py) 的功能,实现了您要求的知识库助手。
这个脚本具有以下功能:
1. 启动后会在 http://0.0.0.0:23333 提供Web界面
2. 左侧提供了文件上传功能,用户可以上传本地文件到知识库目录
3. 右侧提供了聊天界面,用户可以提出问题
4. 系统会基于上传到知识库的文件内容来回答问题
主要特性包括:
- 自动创建知识库目录
- 支持文件上传并自动更新知识库
- 使用RAG技术实现基于知识库的问答
- 左右分栏布局,符合之前项目的UI规范
- 支持BM25和语义检索相结合的方式
您可以运行 `python web_rag.py` 来启动这个知识库助手。启动后访问 http://0.0.0.0:23333 即可使用。
需要注意的是,由于我无法实际测试代码运行情况,如果您在使用过程中遇到任何问题,请告诉我,我可以帮助您进行调试和修复。
  1. Vibe Coding生成代码后,你可以选择"拒绝"或者"采纳"。

image-20251124112807421

  1. 利用Vibe Coding的智能调试功能运行生成的代码,如果报错,可以将错误信息反馈给Vibe Coding智能体,让它帮我们修复代码。

image-20251124120656866

image-20251124120720952

以下是Vibe Coding智能体的思考和回复内容:

我来帮你解决这个Gradio Chatbot组件的数据格式问题。从错误信息看,问题是Chatbot组件期望接收元组列表格式`[(user_msg, bot_msg), ...]`,但当前返回的可能是字符串或其他不兼容格式。
首先让我检查一下相关的代码文件:
让我查看一下可能涉及chatbot实现的文件,特别是web_rag.py,因为错误发生在chatbot组件中:
现在让我检查一下demo_chat.py文件,看看是否有其他chatbot实现:
让我也检查一下demo_rag.py文件:
让我再检查demo_web.py文件:
现在我已经了解了问题所在。从错误信息和代码分析可以看出,问题出现在web_rag.py文件中的[query_rag](file:///E:/TEST/web_rag.py#L77-L82)函数。Gradio的Chatbot组件期望接收一个元组列表格式`[(user_msg, bot_msg), ...]`,但目前[query_rag](file:///E:/TEST/web_rag.py#L77-L82)函数只是简单地返回了一个字符串。
我需要修改[query_rag](file:///E:/TEST/web_rag.py#L77-L82)函数,使其返回正确的格式。下面是修复方案:
我注意到还需要更新Gradio界面中按钮点击事件的处理方式,因为现在[query_rag](file:///E:/TEST/web_rag.py#L77-L82)函数需要接收history参数。让我继续修改:
现在让我启动服务来测试修复是否成功:
看起来是在Windows PowerShell中使用了不支持的`&&`操作符。让我按照正确的Windows命令格式来启动服务:
让我尝试另一种方式进入目录并启动服务:
服务已经成功启动了。现在让我创建一个简单的预览来测试修复是否解决了Gradio Chatbot组件的数据格式问题:
我已经成功修复了Gradio Chatbot组件的数据格式问题。以下是具体的修改内容:
### 问题分析
错误信息显示:`'Data incompatible with tuples format. Each message should be a list of length 2.'`,这表明Chatbot组件期望接收元组列表格式`[(user_msg, bot_msg), ...]`,但原来的实现只是返回了一个简单的字符串。
### 解决方案
我对 [web_rag.py](file:///E:/TEST/web_rag.py) 文件进行了两处关键修改:
1. 修改了 [query_rag](file:///E:/TEST/web_rag.py#L77-L82) 函数,使其返回正确的格式:
   def query_rag(query, history=[]):
       if not query:
           return history + [("", "请输入您的问题")]
       res = rag(query)
       # 返回正确的格式:[(user_msg, bot_msg), ...]
       history.append((query, res))
       return history
2. 更新了Gradio界面中按钮点击事件的输入参数,以传递聊天历史记录:
query_input.submit(fn=query_rag, inputs=[query_input, chatbot], outputs=chatbot)
submit_btn.click(fn=query_rag, inputs=[query_input, chatbot], outputs=chatbot)
### 验证
我已经启动了服务并在端口23333上运行,你可以通过预览浏览器访问该地址来测试修复效果。现在Chatbot应该能够正常显示对话历史,而不会再出现数据格式错误。
这些修改确保了Chatbot组件接收到符合预期格式的数据,从而解决了之前的问题。
  1. 最后可以访问 http://localhost:23333 ,与个人知识库助手进行交互。

image-20251124121303961

项目测试

  1. 创建一个 example_upload.txt 文件,填入以下内容。
小明在2025年11月23日早上吃了一个鸡蛋

image-20251124121434165

  1. 将文件上传至知识库。

image-20251124121813835

  1. 与个人知识库助手进行对话。

image-20251124121933587

通过测试可以看出,个人知识库助手能够成功处理用户上传的文件,并基于文件内容进行智能问答。这证明了我们构建的系统具备了预期的功能。

项目优化

  1. 可以让Qoder智能体启动预览。

image-20251124122121095

  1. 然后选择元素,发送给Qoder智能体,让它优化。

image-20251124122224696

image-20251124122955109

image-20251124123012529

  • 红色表示删除的代码
  • 绿色表示添加的代码

优化后的结果如下图所示。

image-20251124131537729

项目上线

这里我选择一个免费的平台:魔搭创空间,将项目部署上线。

  1. 进入魔搭创空间,单击右上角的"我要创建"按钮,然后单击"编程式创建"。

image-20251124131632431

image-20251124132001805

  1. 填入基本信息,创建创空间。

image-20251124132020461

image-20251124132528558

  1. 修改README.md文件,创建requirements.txt文件,将本地项目上传到创空间。

image-20251124132749129

image-20251124132913374

image-20251124133728318

image-20251124132950242

image-20251124140743441

  1. 添加环境变量,最后上线创空间。

image-20251124140728361

image-20251124143011453

image-20251124133048518

总结

Vibe Coding作为一种创新的编程范式,结合Qoder智能开发环境,为开发者提供了一种全新的解决方案。通过本文的实际案例演示,我们可以看到Vibe Coding在构建个人知识库助手方面的强大能力。总的来说,Vibe Coding为现代软件开发提供了一个优秀的解决方案,无论是初学者还是经验丰富的开发者,都能从中受益。通过合理利用Vibe Coding的强大功能,我们可以快速构建出功能丰富、性能优异的应用,为软件开发效率的提升贡献力量。

参考资料

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐