基于 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.tscontent 路径是否包含 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 面试官