基于 FastAPI + LangChain 的高并发 Agent 架构解析
Published in:2025-12-03 |
Words: 1.4k | Reading time: 5min | reading:

基于 FastAPI + LangChain 的高并发 Agent 架构解析

项目地址: https://github.com/caozhaoqi/jd_agent

摘要:在 AI Agent 爆发的今天,如何让大模型从“聊天玩具”变成“生产力工具”?本文将深度拆解 jd_agent 项目。这是一个全栈 AI 应用,它能自动分析岗位描述(JD),并行生成技术面试题、HR 行为面试指南及公司背景调研。项目采用 FastAPI + LangChain 构建高并发后端,配合 Next.js + Tailwind 实现类似 DeepSeek 的现代化交互界面。


1. 项目背景与痛点

求职者在准备面试时,往往面临“信息过载”与“针对性不足”的矛盾:

  • 手动分析慢:面对几十个 JD,逐个提取技术栈和核心职责非常耗时。
  • 准备无方向:不知道该复习哪些底层原理,也不知道 HR 会问什么刁钻的行为问题。
  • 通用 AI 效率低:直接问 ChatGPT,需要反复输入 Prompt,且输出格式乱七八糟,难以保存。

jd_agent 的目标:输入一段 JD,10秒内 输出一份结构清晰、包含技术突击点与回答策略的全方位面试指南。


2. 核心功能 (Core Features)

截至目前,项目已实现以下核心能力:

✅ 1. 智能 JD 解析 (Smart Parsing)

利用 LLM 的语义理解能力,从非结构化的 JD 文本中精准提取:

  • 核心技术栈 (e.g., Python, K8s, Redis)
  • 职级/经验要求 (e.g., 架构师, 3-5年)
  • 软技能要求 (e.g., 抗压能力, 跨部门沟通)
  • 公司名称 (用于后续背调)

✅ 2. 深度技术题生成 (Hardcore Tech QA)

基于提取的技术栈和职级,生成定制化的面试题:

  • 差异化出题:针对初级岗位问语法,针对高级岗位问底层原理(如 GIL 锁、分布式一致性)。
  • 参考答案:每道题均附带“参考回答要点”,辅助记忆。

✅ 3. HR 行为面试指南 (Behavioral Guide)

结合 JD 中的软技能要求,基于 STAR 法则(情境、任务、行动、结果)生成行为面试题及高分回答策略。

✅ 4. 现代化对话界面 (Modern UI)

  • DeepSeek 风格交互:采用 Next.js + Tailwind CSS 构建,支持 Markdown 实时渲染。
  • 流式响应 (预留):后端架构已支持 SSE,前端具备打字机效果展示能力。

3. 技术架构设计 (System Architecture)

为了保证高性能与可扩展性,项目采用了 分层架构 (Layered Architecture) 与 异步并发 (Asyncio) 设计。

3.1 架构图解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
graph TD
User[用户 (Next.js UI)] -->|HTTP POST| API[API Layer (FastAPI)]

subgraph Backend_Core [后端核心服务]
API --> Service[Service Layer (编排层)]

Service --> Parser[JD 解析器 (Chain A)]

subgraph Parallel_Zone [异步并行执行区]
direction TB
Parser -->|提取技术栈| TechGen[技术题生成器 (Chain B)]
Parser -->|提取公司名| Research[公司背调/HR生成 (Chain C)]
end

TechGen --> LLM[(LLM Factory)]
Research --> LLM

LLM -->|OpenAI/DeepSeek| Cloud[模型服务商]
end

Service -->|Structured JSON| User

3.2 核心技术栈

  • 后端: Python 3.9+, FastAPI (异步 Web 框架), Pydantic (数据验证)。
  • AI 编排: LangChain (管理 Prompt 与 Chains)。
  • 模型层: OpenAI SDK (兼容 DeepSeek-V3, SiliconFlow 等多渠道)。
  • 前端: Next.js 14, Tailwind CSS, Lucide React。

4. 关键实现原理 (Implementation Deep Dive)

4.1 强制结构化输出 (Solving the JSON Problem)

大模型天生喜欢“说话”,但程序需要 JSON。我们摒弃了不稳定的正则表达式,使用 LangChain 的 PydanticOutputParser。

代码片段:

1
2
3
4
5
6
7
8
9
10
11
# 定义期望的数据结构
class InterviewQuestion(BaseModel):
category: str
question: str
reference_answer: str

# 注入 Schema 指令
parser = PydanticOutputParser(pydantic_object=InterviewQuestion)
format_instructions = parser.get_format_instructions()

# Prompt 中包含 format_instructions,强制 LLM 输出 JSON

4.2 异步并发优化 (From 30s to 10s)

这是本项目最大的工程亮点。

  • 串行模式: 解析(5s) + 技术题(10s) + HR题(10s) = 25s+
  • 并行模式: 解析(5s) + [技术题 & HR题 同时跑](max 10s) = 15s

利用 Python 的 asyncio.gather 实现“Fire and Forget”模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
async def generate_interview_guide(request):
# 1. 前置依赖:解析 JD
jd_meta = await parse_jd_async(request.jd_text)

# 2. 并发执行无依赖的任务
# 使用 ainvoke 而不是 invoke
task_tech = generate_tech_async(jd_meta.tech_stack, jd_meta.years_required)
task_hr = generate_hr_async(jd_meta.soft_skills)

# 3. 挂起等待所有任务完成
tech_qs, hr_qs = await asyncio.gather(task_tech, task_hr)

return InterviewReport(...)

4.3 LLM 工厂模式 (Cost Optimization)

为了降低 token 成本,我们设计了配置驱动的 LLM 工厂。开发时使用 DeepSeek (充值 10 元用很久),生产环境可无缝切换至 GPT-4。

配置管理 (.env 驱动):

1
2
3
4
5
# core/config.py
class Settings(BaseSettings):
OPENAI_API_KEY: str
OPENAI_API_BASE: str = "https://api.deepseek.com" # 一键切换底座
MODEL_NAME: str = "deepseek-chat"

5. 工程踩坑与解决方案 (Troubleshooting)

在开发过程中,我们解决了一系列真实的工程问题,这些经验非常宝贵:

问题现象 根本原因 解决方案
Error 402 / 429 API 账户余额不足(OpenAI 欠费)。 切换至 DeepSeek 或 硅基流动 的免费额度。
ValidationError 某些情况下 LLM 未生成非必填项(如系统设计题),导致返回 None。 在 Pydantic Schema 中使用 Optional[T] = None。
UI 样式丢失 Next.js 页面内容堆叠在左上角,无样式。 1. 检查 layout.tsx 是否引入 globals.css。
2. 检查 tailwind.config.ts 的 content 路径是否包含 app 目录。
SSL Error Mac 自带 LibreSSL 版本过低。 降级 urllib3 或使用 Homebrew 升级 OpenSSL。

6. 总结与展望

jd_agent 不仅仅是一个 Demo,它展示了现代 AI 应用开发的标准范式:Prompt 工程化 + 异步后端 + 结构化数据流。

未来规划 (Roadmap):

  1. RAG 增强: 集成 Tavily 搜索 API,实时抓取公司财报和新闻,生成更犀利的反问环节。
  2. 简历匹配: 上传用户简历 PDF,自动计算与 JD 的匹配度分数 (Matching Score)。
  3. 多模态: 支持直接输入 JD 截图或 PDF 文件。

Prev:
Docker, Compose 与 K8s
Next:
打造 L5 级人机协同与全双工语音的 AI 面试官