写点什么

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

作者:方华Elton
  • 2024-12-07
    江苏
  • 本文字数:2513 字

    阅读完需:约 8 分钟

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


RAG 项目简介

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

功能

  • 支持上传文件,自动提取文本内容,并构建知识库。

  • 支持自定义问答,实现 RAG 问答应用。

  • 支持用户登陆鉴权,用于系统识别和权限控制。

项目地址

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


代码结构

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


  • **后端:**使用 FastAPI 框架,主要处理 API 请求,包括认证、文档处理、问答和文件上传等逻辑。

  • **前端:**使用 Jinja 模板引擎,提供静态资源文件和模板文件,实现用户界面。

  • **数据模型:**定义在 models.py 文件中,用于数据库操作。

  • **依赖管理:**通过 requirements.txt 文件管理项目依赖,确保环境一致性。


功能代码逻辑

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"文件上传和处理失败,请检查百炼相关配置")
复制代码


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}
复制代码


部署介绍

配置 python 环境

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


conda create -n rag_app python=3.9.6conda activate rag_apppip 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


启动服务

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

  • 新建 FastAPI 配置

  • 选择程序运行设置

  • 环境变量配置

  • 选择对应 conda 环境


通过方式命令启动

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


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

实际效果


发布于: 2024-12-07阅读数: 3
用户头像

方华Elton

关注

llmlearning-x 2020-05-20 加入

你好,我是方华,咨询顾问,计算机硕士。昵称对应个人公众号,欢迎交流!

评论

发布
暂无评论
探索RAG应用:文档智能与百炼平台的最佳实践(完整代码示例)_RAG知识库_方华Elton_InfoQ写作社区