用大白话解释Agent开发中的核心概念,零基础也能看懂
Agent 就像一个数字员工:
类比:
传统程序:计算器
输入:1 + 1
输出:2
特点:固定规则,不会思考
Agent:像人一样工作的程序
输入:"帮我面试一个前端候选人"
处理:理解要求 → 准备问题 → 根据回答追问 → 评估表现
输出:面试报告
特点:能思考、能决策、能自主行动
| 对比 | 传统程序 | Agent |
|---|---|---|
| 决策方式 | 固定规则 | 基于LLM推理 |
| 灵活性 | 低 | 高 |
| 可扩展性 | 需要改代码 | 改Prompt即可 |
| 适用场景 | 确定逻辑 | 需要理解/推理的场景 |
Multi-Agent = 多个数字员工协作完成任务
现实类比:
开一家餐厅需要:
- 厨师:做菜
- 服务员:接待客人
- 收银员:结账
- 清洁工:打扫卫生
每个人有自己的职责,互相协作,餐厅才能运转。
本项目中的Multi-Agent:
AI面试系统需要:
- 面试官Agent:提问、追问
- 评估员Agent:打分、写评语
- 学习顾问Agent:推荐学习资源
三个Agent协作,完成整个面试流程。
想象一个超级员工:
分工的好处:
RAG = Retrieval(检索)+ Augmented(增强)+ Generation(生成)
大白话:先查资料,再回答
闭卷考试 vs 开卷考试
闭卷考试(传统LLM):
- 只能凭记忆回答
- 可能会记错(幻觉)
- 知识停留在训练时
开卷考试(RAG):
- 先查书(检索)
- 再基于查到的内容回答(生成)
- 答案更准确,可以引用资料
场景:面试结束后推荐学习资源
1. 检索阶段:
评估结果:"专业知识60分(薄弱)、逻辑思维85分(良好)"
↓
向量化:"专业知识薄弱 需要学习Python..."
↓
向量搜索:找到Python教程、算法书等相关资源
2. 生成阶段:
LLM看到:评估结果 + 检索到的资源
↓
生成推荐理由:"根据您的评估,建议在Python基础上加强学习,推荐《Python编程从入门到实践》..."
Embedding = 把文字变成数字向量
计算机不懂文字,只懂数字
人类理解:
"Python" 和 "编程语言" 意思相关
计算机理解(原始):
"Python" = [字母P, 字母y, 字母t...]
"编程语言" = [编, 程, 语, 言]
完全不同的表示!
Embedding转换后:
"Python" = [0.1, 0.5, -0.2, 0.8, ...] (384个数字)
"编程语言" = [0.15, 0.48, -0.18, 0.82, ...]
数字接近,表示意思相近!
想象一个三维空间:
^
/|
/ |
/ | "Python"
/ | /
/ | /
/_____|____/________>
| /
| / "Java"
| /
|/
相似的词在空间中距离近
"Python" 和 "Java" 距离近(都是编程语言)
"Python" 和 "苹果" 距离远(不相关)
实际上用的是384维空间(想象不了,但计算机能计算)
传统数据库:按关键字查
向量数据库:按意思查
存入数据:
"Python基础教程" → Embedding → [0.1, 0.5, -0.2, ...]
"Java入门" → Embedding → [0.2, 0.4, -0.1, ...]
"数据结构" → Embedding → [-0.3, 0.1, 0.8, ...]
查询:
输入:"Python学习"
Embedding → [0.12, 0.48, -0.19, ...]
计算相似度:
"Python学习" vs "Python基础教程" = 0.95 (很相似)✓
"Python学习" vs "Java入门" = 0.75 (有点相关)
"Python学习" vs "数据结构" = 0.2 (不相关)
返回最相似的:Python基础教程
| 场景 | 传统数据库 | 向量数据库 |
|---|---|---|
| 查”Python” | ✅ 精确匹配 | ✅ 精确匹配 |
| 查意思相近的 | ❌ 做不到 | ✅ 语义搜索 |
| 推荐相关内容 | ❌ 做不到 | ✅ 相似度推荐 |
Prompt = 给AI的指令/问题
Prompt工程 = 写好指令的技巧
Prompt就像"提问的艺术"
不好的提问:
"写代码"
→ AI:写什么代码?什么语言?什么功能?
好的提问:
"请用Python写一个函数,输入是一个列表,输出是列表去重后的结果,要求保持原有顺序"
→ AI:明确要求,能给出准确答案
# 面试官Agent的Prompt
INTERVIEWER_SYSTEM_PROMPT = """
你是一位专业的技术面试官。
你的目标:通过专业的技术面试,全面评估候选人的技术能力
你的背景:你是一位拥有10年以上经验的技术面试官...
请始终以专业、友好的态度完成任务。
"""
# 评估Agent的Prompt
EVALUATOR_PROMPT = """
【面试场景】{scenario}
【问题】{question}
【回答】{answer}
请评估以上回答,按以下格式输出:
- 分数(0-5分)
- 优点
- 改进建议
"""
| 技巧 | 说明 | 示例 |
|---|---|---|
| 角色设定 | 告诉AI它是谁 | “你是一位资深面试官…” |
| 明确格式 | 指定输出格式 | “按JSON格式输出…” |
| 示例说明 | 给例子 | “例如:好的回答应该包含…” |
| 约束条件 | 限制范围 | “评分范围0-5分…” |
流程编排 = 定义任务执行的顺序和规则
传统程序:固定流程
1. 买菜 → 2. 洗菜 → 3. 切菜 → 4. 炒菜 → 5. 上桌
问题:如果菜已经洗好了?还是要重新洗
流程编排:灵活流程
@start
async def 买菜():
return "买到菜了"
@listen(买菜)
async def 洗菜(prev_result):
if 菜已经洗过了:
return "跳过洗菜"
return "洗好了"
@listen(洗菜)
async def 炒菜(prev_result):
return "炒好了"
特点:可以根据情况调整流程
class InterviewFlow(Flow):
@start()
async def 自我介绍(self, context):
return "请做个自我介绍"
@listen(自我介绍)
async def 技术问答(self, prev_result, context):
return "技术问题..."
@router(技术问答)
async def 自适应下一环节(self, prev_result, context):
# 根据候选人水平决定下一环节
if 水平 == "专家":
return "系统设计"
else:
return "基础编程"
@parallel([技术评估, 沟通评估])
async def 综合评分(self, results, context):
return 合并评分结果
| 术语 | 大白话解释 |
|---|---|
| LLM | 大语言模型,如ChatGPT、通义千问,能理解和生成文字 |
| Token | 文字的基本单位,一个汉字≈1-2个token |
| Temperature | 温度,控制AI回答的随机性,0=保守,1=随机 |
| Embedding | 把文字变成数字向量 |
| Vector | 向量,一串数字,代表文字的语义 |
| Cosine Similarity | 余弦相似度,计算两个向量的相似程度 |
| RAG | 先查资料再回答 |
| Multi-Agent | 多个AI协作完成任务 |
| Prompt | 给AI的指令 |
| Fine-tuning | 微调,用特定数据训练模型 |
| Inference | 推理,模型生成回答的过程 |
agents/base.py 开始,理解Agent基类agents/interviewer.py,理解具体实现recommenders/rag_recommender.py,理解RAG流程