简易实用项目攻略:如何创建集文档问答、摘要、转录、翻译与提取于一身的AI门户 原创

发布于 2025-6-12 08:21
浏览
0收藏

如今AI虽已全面普及,但多数职场人士仍难以统一运用各类互不相关的工具:一会需要使用聊天机器人、一会需要将文本复制到摘要器内,再加上会议转录和翻译,将本应顺畅的工作流程拆分得零散琐碎。

所以问题来了:为什么不能把各项AI功能集中起来?

为此我决定构建单一Web门户,供用户随时上传文档、提问、获取摘要、转录会议内容、翻译文件,甚至从PDF中提取表格等。其功能不求花哨、只讲实用,旨在解决我们每天面临的实际问题。

下面我们将共同了解如何将整个项目拼凑起来,介绍技术选型理由,以及如何将其运行起来。不必担心,所有内容均为开源,且不涉及任何AI“黑话”。

这个门户能干啥?​

  • 与数据对话:上传文档,用自然语言提问,直接获取答案(不只靠关键词匹配)。​
  • 摘要:上传长报告或政策文件,快速获取简短清晰的摘要——若有需要,还可以自定义摘要方式。​
  • 转录:上传会议录音,快速获得书面转录。​
  • 翻译:将文档转换为其他语言,保留原始格式。​
  • 提取:从PDF中抓取表格和关键数据,并下载为JSON或Excel格式。​

不必在各类应用间往来切换,只需上传文件、选择功能,即可获得所需内容。

各项功能如何协同起效?​

下面简单来看项目的整体架构:

  • 前端:React​
  • 后端:FastAPI(Python)​
  • 大模型和嵌入:Azure OpenAI​
  • 向量数据库:Pinecone​
  • 音频转录:Whisper(本地运行)​
  • 翻译:Azure Translator​
  • 文档提取:Azure Document Intelligence​
  • 存储:本地或Azure Blob存储(演示中使用本地存储)​
  • 认证:(生产环境可添加 Azure AD/OAuth)​

各组件间的连接方式:

简易实用项目攻略:如何创建集文档问答、摘要、转录、翻译与提取于一身的AI门户-AI.x社区

功能演示(附带图表及代码)​

与数据对话​

无需阅读全文,即可通过提问直接从PDF文件或者报告中获取答案,是不是很让人心动?这就是“与数据对话”功能。大家上传文档、用自然语言提出问题,大模型就能直接从文件内容中提取答案。这将为所有人节约时间——包括法律、财务、合规部门,乃至任何需要处理冗长文件的工作者。

如何实现​

此门户会拆分并嵌入文档,将其存储在Pinecone当中,并使用Azure OpenAI回答用户输入的任何问题。

简易实用项目攻略:如何创建集文档问答、摘要、转录、翻译与提取于一身的AI门户-AI.x社区

后端:用于上传文档的FastAPI端点​

# Python backend example
@app.post("/upload/")
async def upload_file(file: UploadFile = File(...)):
 contents = await file.read()
 text = contents.decode("utf-8", errors="ignore")
 upsert_document(text)
 return {"status": "uploaded"}

后端:用于聊天的FastAPI端点​

# Python backend for chat
@app.post("/chat/")
async def chat(query: str = Form(...)):
 matches = query_pinecone(query)
 context = " ".join([m['text'] for m in matches])
 answer = get_answer(query, context)
 return {"answer": answer}

其余后端代码请参见​GitHub​。​

摘要​

坦白讲,大多数商业文档都搞得太冗长。摘要功能将帮助我们从这些大文件中获取简短、清晰的摘要。我们甚至可以添加自定义提示词,例如“总结合规性关键风险”或“提供主要行动指标”。

如何实现​

在上传文档之后,后端将内容及用户的提示词发送至Azure OpenAI,而后返回摘要内容——再无需通读全文。

简易实用项目攻略:如何创建集文档问答、摘要、转录、翻译与提取于一身的AI门户-AI.x社区

后端:FastAPI摘要端点​

# Summarization endpoint
@app.post("/summarize/")
async def summarize(file: UploadFile = File(...), prompt: str = Form("Summarize this document:")):
 contents = await file.read()
 text = contents.decode("utf-8", errors="ignore")
 summary = summarize_text(text, prompt)
 return JSONResponse(content={"summary": summary})

详见​React SummarizeForm组件​。​

音频转录​

大家肯定都处理过会议或者电话录音……再听一遍真的让人崩溃。现在有了这项功能,只需上传音频或者视频文件,即可快速获取书面记录。

如何实现​

音频上传完成后,后端会使用Whisper转录所有内容,而后将全文显示在浏览器内。

后端:FastAPI音频转录端点​

# Audio transcription endpoint
@app.post("/transcribe/")
async def transcribe(file: UploadFile = File(...)):
 audio_bytes = await file.read()
 transcript = transcribe_audio_file(audio_bytes, file.filename)
 return JSONResponse(content={"transcript": transcript})

TranscribeForm.js​​

语言翻译​

全球团队往往需要跨语种协作,而文档翻译则速度极慢且耗费大量人力。现在大家可以上传任意文件、选定目标语言并快速获取翻译版本——连格式都几乎保持一致。

如何实现​

上传文档、选定语言,后端会调用Azure Translator进行翻译,并将结果展示给用户。

简易实用项目攻略:如何创建集文档问答、摘要、转录、翻译与提取于一身的AI门户-AI.x社区

后端:FastAPI翻译端点​

# Translation endpoint
@app.post("/translate/")
async def translate(
 file: UploadFile = File(...),
 to_language: str = Form(...)
):
 contents = await file.read()
 text = contents.decode("utf-8", errors="ignore")
 translated = fake_translate(text, to_language)
 return JSONResponse(content={"translated": translated})

TranslateForm.js​​

文档提取器​

从PDF和表单中提取表格和键值数据一直是最让文员们抓狂的任务。不怕,现在可以交给AI搞定。

如何实现​

上传PDF(或其他扫描文档),选择JSON或Excel格式,此门户将使用Azure Document Intelligence提取表格及键值对。结果可供随时下载。

简易实用项目攻略:如何创建集文档问答、摘要、转录、翻译与提取于一身的AI门户-AI.x社区

后端:FastAPI提取端点​

# Document extractor endpoint
@app.post("/extract/")
async def extract(
 file: UploadFile = File(...),
 output_format: str = Form("json")
):
 contents = await file.read()
 filename = file.filename

 if output_format == "excel":
 xls_path = extract_tables_and_kv(contents, filename, output_format="excel")
 return FileResponse(xls_path, media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename="extracted_tables.xlsx")
 else:
 output = extract_tables_and_kv(contents, filename, output_format="json")
 return JSONResponse(content=output)

ExtractForm.js​​

如何运行这套门户​

开源代码地址: github.com/sanjaybk7/AIPortal​​

  • 克隆repo: git clone https://github.com/sanjaybk7/AIPortal.git
  • 后端:
    进入 backend,设置Python、安装依赖项并运行FastAPI。​
  • 前端:
    进入 frontend,安装依赖项并运行React。​
  • 打开浏览器:
    访问 http://localhost:3000​​​ 并开始上传。​

注意,这里需要使用Azure和Pinecone的API密钥,相关设置方法已在repo说明中提供。

总结​

相信很多朋友跟我一样,已经厌倦了在不同AI工具间往来切换。通过这篇简短的攻略,咱们成功把多款现代AI工具集中起来,感兴趣的朋友不妨赶紧用起来!

原文标题How I Built an AI Portal for Document Q and A, Summarization, Transcription, Translation, and Extraction​,作者:Sanjay Krishnegowda

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐