探索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大模型对特定业务领域的理解和应用能力方面表现突出,但需在技术细节描述、知识库维护、多语言支持、性能优化及数据安全等方面进一步完善。
84 1
|
3月前
|
机器学习/深度学习 Java API
阿里云文档智能解析——大模型版能力最佳实践与体验评测
阿里云文档智能解析(大模型版)在处理非结构化数据方面表现优异,尤其是在性能和可扩展性上具有明显优势。虽然存在一些待完善之处,但其强大的基础能力和广泛的适用场景使其成为企业数字转型过程中的有力助手。随着技术的不断进步和完善,相信它会在更多领域展现出更大的价值。
354 6
阿里云文档智能解析——大模型版能力最佳实践与体验评测
|
安全 程序员 Python
PDF转Word,1行Python代码就够了,免费用
PDF转Word,1行Python代码就够了,免费用
133 2
|
开发工具
阿里云百炼应用中心--QuickStart
针对阿里云最新推出的大模型平台:百炼,试用其应用中心的功能,通过Step By Step详细演示该产品的使用。
671 1
|
21天前
|
机器人 API 数据安全/隐私保护
AppFlow:支持飞书机器人调用百炼应用
本文介绍了如何创建并配置飞书应用及机器人,包括登录飞书开发者后台创建应用、添加应用能力和API权限,以及通过AppFlow连接流集成阿里云百炼服务,最后详细说明了如何将机器人添加到飞书群组中实现互动。
|
1月前
|
存储 Serverless API
基于百炼平台构建智能体应用——十分钟构造能主动提问的导购智能体
本文介绍了如何使用阿里云百炼大模型服务平台构建一个多智能体的智能导购应用,并将其部署到钉钉。通过百炼的Assistant API,您可以快速构建一个包含规划助理、手机导购、冰箱导购和电视导购的智能导购系统。文章详细讲解了从创建函数计算应用、访问网站、验证智能导购效果到将商品检索应用集成到智能导购中的全过程,帮助您快速实现智能导购功能。
150 0
基于百炼平台构建智能体应用——十分钟构造能主动提问的导购智能体
|
4月前
|
人工智能 自然语言处理 Serverless
阿里云百炼应用实践系列-让微信公众号成为智能客服
本文主要介绍如何基于百炼平台快速在10分钟让您的微信公众号(订阅号)变成 AI 智能客服。我们基于百炼平台的能力,以官方帮助文档为参考,让您的微信公众号(订阅号)成 为AI 智能客服,以便全天候(7x24)回应客户咨询,提升用户体验,介绍了相关技术方案和主要代码,供开发者参考。
阿里云百炼应用实践系列-让微信公众号成为智能客服
|
5月前
|
自然语言处理 数据管理 数据挖掘
阿里云百炼知识检索应用评测:构建智能问答助手【开发者评测|阿里云百炼】
阿里云百炼是基于大模型的一站式开发平台,支持快速构建智能问答助手。评测中,通过上传企业数据创建知识库,并配置应用参数如温度系数、最长回复长度等,最终通过API实现问答功能。实操难点包括数据上传限制及参数配置复杂度。建议增加上传灵活性、提供更多配置指南和功能扩展插件。总体而言,阿里云百炼提供了强大且灵活的工具,有助于高效开发大模型应用。
2320 5
|
5月前
|
数据管理 API 调度
阿里云百炼平台知识检索应用评测:搭建之旅与一点建议
阿里云百炼平台成为企业智能化转型的重要工具之一。
|
5月前
|
自然语言处理 监控 搜索推荐
阿里云百炼知识检索应用评测:搭建个人/企业专属智能问答助手
阿里云百炼知识检索应用评测:搭建个人/企业专属智能问答助手
262 3

相关产品

  • 大模型服务平台百炼