探索RAG应用:文档智能与百炼平台的最佳实践(完整代码示例)

简介: 方华在阿里云开发者社区发现了一个构建RAG应用的活动,通过官方教程和阿里云提供的工具,如ROS、百炼平台及文档智能,实现了零代码配置RAG应用的Demo。本文分享了该项目的源码本地部署调试方法,介绍了其基于Python的Web应用程序结构,使用FastAPI和Jinja模板引擎,支持文件上传、自定义问答等功能。项目还详细描述了环境配置、服务启动等步骤,帮助开发者更好地理解和实践应用开发。

d21380bc-52e6-4dde-9c5a-91124c38e1ec.jpg

你好,我是方华。今天无意中看到阿里云开发者社区有一个构建RAG应用的活动,于是简单看了一下,按照官方教程和阿里云提供的ROS(资源编排服务)百炼平台、以及文档智能等工具能力的支持,基本上网页操作,零代码就可配置一个RAG应用的Demo。然而,为了更好的学习理解和进一步实践应用开发,本文将分享如何根据该项目的源码本地部署调试,自定义修改该项目代码。☁️

RAG项目简介

基于文档智能和百炼平台的RAG应用,该项目旨在基于阿里云的文档智能能力和百炼平台,构建一个高效的RAG(Retrieval-Augmented Generation)应用。使用LLamaIndex作为核心技术,能够有效地从大量文档中检索相关信息,以增强生成模型的回答质量。
通过将文档智能与百炼平台相结合,可实现快速、准确的信息获取,帮助用户更高效地处理和理解复杂数据。
同时,可以支持灵活的知识管理和智能问答服务,为决策提供可靠支持。

功能

  • 支持上传文件,自动提取文本内容,并构建知识库。
  • 支持自定义问答,实现RAG问答应用。
  • 支持用户登陆鉴权,用于系统识别和权限控制。

项目地址

网页链接🔗:https://atomgit.com/aliyun_solution/docmind-rag
image.png

代码结构

该项目是一个基于 Python 的 Web 应用程序,采用了 FastAPI 作为后端框架,Jinja 模板引擎作为前端模板引擎。

  • 后端:使用 FastAPI 框架,主要处理 API 请求,包括认证、文档处理、问答和文件上传等逻辑。
  • 前端:使用 Jinja 模板引擎,提供静态资源文件和模板文件,实现用户界面。
  • 数据模型:定义在 models.py 文件中,用于数据库操作。
  • 依赖管理:通过 requirements.txt 文件管理项目依赖,确保环境一致性。

image.png

功能代码逻辑

uploadfile(文件上传)

@router.post("/uploadfile")
async def upload_parse_and_create_knowledge_base(file: UploadFile = File(...), knowledge_base_name: str = Form(...)):
    upload_folder = os.getenv("UPLOAD_FOLDER", "uploads")
    os.makedirs(upload_folder, exist_ok=True)
    if file.filename == "":
        raise HTTPException(status_code=400, detail="未选择文件")

    # 校验文件类型
    allowed_extensions = ['.pdf', '.doc', '.docx']
    file_extension = os.path.splitext(file.filename)[1].lower()
    if file_extension not in allowed_extensions:
        raise HTTPException(status_code=400, detail="不支持的文件类型,仅支持 PDF/Doc/Docx 格式")

    # 校验文件大小
    max_file_size = 100 * 1024 * 1024  # 100 MB
    if len(await file.read()) > max_file_size:
        raise HTTPException(status_code=400, detail="文件大小超过100MB")

    # 重置文件指针
    await file.seek(0)
    try:
        file_path = os.path.join(upload_folder, file.filename)
        contents = await file.read()
        with open(file_path, "wb") as buffer:
            buffer.write(contents)
        # 解析文档
        documents = await parse_document(file_path)
        # 处理解析结果
        processed_result = process_parsed_result(documents)
        # 创建知识库索引
        index = DashScopeCloudIndex.from_documents(
            documents,
            knowledge_base_name,
            verbose=True,
        )
        # 查询文档
        dashscope_llm = DashScope(
          model_name=DashScopeGenerationModels.QWEN_MAX, api_key=DASHSCOPE_API_KEY
        )
        query_engine = index.as_query_engine(llm=dashscope_llm)
        abstract = query_engine.query("给出一段300字以内的文本,总结文档内容")
        print(abstract.response)
        return {
   "parsed_result": processed_result,"abstract": abstract.response}
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"文件上传和处理失败,请检查百炼相关配置")

image.png

qa(知识库问答)

@router.post("/qa")
async def post_qa(request: Request,
                  data: dict):

    user_message = data.get("message")
    knowledge_base_name = data.get("knowledge_base_name")
    if not user_message:
        raise HTTPException(status_code=400, detail="请输入问题")
    if not knowledge_base_name:  # 如果没有提供知识库名称,则返回错误
        raise HTTPException(status_code=400, detail="请输入知识库名称")
    # 知识库检索
    retriever = DashScopeCloudRetriever(knowledge_base_name)
    nodes = retriever.retrieve(data["message"])

    # 初始化大模型
    dashscope_llm = DashScope(
        model_name=DashScopeGenerationModels.QWEN_MAX, api_key=DASHSCOPE_API_KEY
    )
    messages = [
        ChatMessage(role=MessageRole.SYSTEM, content="你是一个智能助手,回答问题"),
        ChatMessage(role=MessageRole.USER, content=data["message"])
    ]
    # 添加检索到的信息作为上下文
    for result in nodes:
        text_content = result.node.text
        messages.append(ChatMessage(role=MessageRole.ASSISTANT, content=text_content))
    resp = dashscope_llm.chat(messages)

    print(resp.message.content)
    return {
   "answer": resp.message.content}

image.png

部署介绍

配置python环境

利用pip安装依赖环境时,可选择使用国内镜像,提高下载速度。

conda create -n rag_app python=3.9.6
conda activate rag_app
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 清华镜像源
# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ #阿里云镜像源

获取环境变量信息

  • UPLOAD_FOLDER : 文件上传路径,自定义即可。
  • DASHSCOPE_API_KEY :百炼平台的API密钥,用于访问百炼平台服务。
  • DASHSCOPE_WORKSPACE_ID:百炼平台的业务空间ID。
  • USERNAME :应用演示账户的用户名,用于系统识别和权限控制。
  • PASSWORD :应用演示账户的默认密码,用于登录演示账号。

阿里云百炼平台地址:https://bailian.console.aliyun.com
image.png

启动服务

通过IDE设置运行配置启动(PyCharm)

  • 新建FastAPI配置
  • 选择程序运行设置
  • 环境变量配置
  • 选择对应conda环境

image.png

通过方式命令启动

通过命令启动需要提前在terminal终端中配置环境变量。

# uvicorn main:app --host 0.0.0.0 --reload # 外网模式
uvicorn main:app --host 127.0.01 --reload # 本地模式

实际效果

1733406147716.jpg

目录
相关文章
|
2月前
|
人工智能 算法 数据安全/隐私保护
基于文档智能和百炼平台的RAG应用-部署实践有感
本文对《文档智能 & RAG让AI大模型更懂业务》解决方案进行了详细测评,涵盖实践原理理解、部署体验、LLM知识库优势及改进空间、适用业务场景等方面。测评指出,该方案在提升AI大模型对特定业务领域的理解和应用能力方面表现突出,但需在技术细节描述、知识库维护、多语言支持、性能优化及数据安全等方面进一步完善。
80 1
|
3月前
|
机器学习/深度学习 Java API
阿里云文档智能解析——大模型版能力最佳实践与体验评测
阿里云文档智能解析(大模型版)在处理非结构化数据方面表现优异,尤其是在性能和可扩展性上具有明显优势。虽然存在一些待完善之处,但其强大的基础能力和广泛的适用场景使其成为企业数字转型过程中的有力助手。随着技术的不断进步和完善,相信它会在更多领域展现出更大的价值。
347 6
阿里云文档智能解析——大模型版能力最佳实践与体验评测
|
安全 程序员 Python
PDF转Word,1行Python代码就够了,免费用
PDF转Word,1行Python代码就够了,免费用
133 2
|
26天前
|
人工智能 自然语言处理 机器人
文档智能与RAG技术如何提升AI大模型的业务理解能力
随着人工智能的发展,AI大模型在自然语言处理中的应用日益广泛。文档智能和检索增强生成(RAG)技术的兴起,为模型更好地理解和适应特定业务场景提供了新方案。文档智能通过自动化提取和分析非结构化文档中的信息,提高工作效率和准确性。RAG结合检索机制和生成模型,利用外部知识库提高生成内容的相关性和准确性。两者的结合进一步增强了AI大模型的业务理解能力,助力企业数字化转型。
85 3
|
1月前
|
人工智能 JSON API
阿里云文档智能 & RAG解决方案:提升AI大模型业务理解与应用
阿里云推出的文档智能 & RAG解决方案,旨在通过先进的文档解析技术和检索增强生成(RAG)方法,显著提升人工智能大模型在业务场景中的应用效果。该方案通过文档智能(Document Mind)技术将非结构化文档内容转换为结构化数据,提取文档的层级树、样式和版面信息,并输出为Markdown和Json格式,为RAG提供语义分块策略。这一过程不仅解决了文档内容解析错误和切块丢失语义信息的问题,还优化了输出LLM友好的Markdown信息。方案的优势在于其多格式支持能力,能够处理包括Office文档、PDF、Html、图片在内的主流文件类型,返回文档的样式、版面信息和层级树结构。
109 2
|
2月前
|
机器学习/深度学习 数据采集 人工智能
文档智能 & RAG 让AI大模型更懂业务 —— 阿里云LLM知识库解决方案评测
随着数字化转型的深入,企业对文档管理和知识提取的需求日益增长。阿里云推出的文档智能 & RAG(Retrieval-Augmented Generation)解决方案,通过高效的内容清洗、向量化处理、精准的问答召回和灵活的Prompt设计,帮助企业构建强大的LLM知识库,显著提升企业级文档管理的效率和准确性。
|
2月前
|
数据采集 人工智能 自然语言处理
文档智能 & RAG让AI大模型更懂业务
《文档智能 & RAG让AI大模型更懂业务》解决方案基于文档智能技术和检索增强生成(RAG)方法,通过结构化企业内部文档并结合实时检索,显著提升了大模型对业务内容的理解能力。方案在金融、法律、医疗等行业的应用表现出色,但在大规模文档管理和个性化定制方面仍有改进空间。部署文档详细但需增加更多排错指导。
|
2天前
|
人工智能 安全 数据安全/隐私保护
文档智能 & RAG让AI大模型更懂业务测评
文档智能 & RAG让AI大模型更懂业务
105 73
|
9天前
|
人工智能
解决方案 | 文档智能 & RAG让AI大模型更懂业务获奖名单公布!
解决方案 | 文档智能 & RAG让AI大模型更懂业务获奖名单公布!
|
1月前
|
人工智能 JSON 自然语言处理
基于文档智能&RAG搭建更懂业务的AI大模型
本文介绍了一种结合文档智能和检索增强生成(RAG)技术,构建强大LLM知识库的方法。通过清洗文档内容、向量化处理和特定Prompt,提供足够的上下文信息,实现对企业级文档的智能问答。文档智能(Document Mind)能够高效解析多种文档格式,确保语义的连贯性和准确性。整个部署过程简单快捷,适合处理复杂的企业文档,提升信息提取和利用效率。

热门文章

最新文章