一些自己在网上搜刮的面经题目路过的牛爷爷可以试着答一答,附上自己的答案,如果有更好的答案也可以拷打我,如果有别的比较好的题目也可以评论里发一发。
Agent是什么?一个 Agent 系统一般由哪些模块组成?
Agent是具备规划、记忆、工具调用、自我执行能力的系统
Tool 是什么?什么样的功能应该做成 Tool?
tool是提供给Agent的函数,大语言模型不能独立完成的任务以及需要实时性的能力应该做成Tool
Memory 分几种?Short-term / Long-term memory 怎么实现?
最基本的记忆分为短期记忆记忆长期记忆,在此基础上又扩展出了指令记忆以及工作记忆
- 指令记忆:代码的书写格式等行为规范,一般写在静态文件里加载到系统提示词中。
- 短期记忆:会话的聊天记忆,通常会滑动上下文,可以结合摘要记忆。
- 工作记忆:任务的进度,偏移量等,一般也是静态文件。
- 长期记忆:用户画像,以及内部数据库等信息。
Agent 进行任务规划时什么时候选择ReAct,什么时候选择Plan-Execute?
简单、不确定性高的任务选择ReAct,可以边思考边执行效率高。
确定性强步骤多的任务选择Plan-Execut,可有效防止任务漂移,且可并行运行。
多 Agent 协作是怎么做的?
多Agent的核心是:分工,通信,协调。
- 分工:每个Agent负责一部分。
- 通信:通常是通过共享黑板,或者链式传输,去实现。
- 协调:主从、流水线、竞标,协作等。
- 主从:有个一master节点负责,把任务交给哪个节点去做。
- 流水线:多个节点按顺序执行任务。
- 竞标:在处理一个任务时让每个节点去自己给自己打分,选择分数最高的去执行这个任务。
- 协调:让节点之间自己分工自己合作通过共享黑板去一起解决。
RAG的流程
数据获取 -> 数据切割 -> 向量化 -> query改写 -> 检索 -> 重排 -> 生成
有哪些数据切割方式?
- 重叠切割:给相连的chunk之间保留一部分重叠区域一般在块大小的10~20
- 句子窗口切割:使用NLP工具将段落以句子切割,以句子为单位放进chunk中。
- 父子切割:将句子以大小两种方式切割,小的为子块用于检索,大的为父块用于生成。
Chunk大小怎么决定
- 看embedding模型的token上限。
- 看使用场景,用户的输入有多长,期望输出是多长。
- 实验验证:用不同的粒度去测试效果
向量召回不准怎么办?
首先确认是因为什么原因召回率低:
| 情况 | 原因 | 解决方法 |
|---|---|---|
| 语义相关性差、未召回关键信息 | embedding模型不够好、Query模糊等 | 换更好的模型、优化索引HNSW、做query优化 |
| 对于专有名词相关问题召回差 | 向量检索的不足 | 使用混合检索在向量检索基础上加入BM25,倒排索引等 |
全部评论
(2) 回帖