元石科技Agent开发面经
前言
这也是一家小公司,但是规模感觉比深澜智远大一点点,因为有自己的模型,创立时间也长一点。
面试也是零八股,问项目+算法题
问项目十多分钟,算法题十多分钟
Agent 的Manager接口如何设计的
从结构体出发,两个策略实现Manager接口,抽象出Append, History, Clear方法;并在消息传递时深拷贝;在每次写入消息时刷新TTL
Clear 是什么场景下要用到
用户购买结束删除,防止占用空间;想买别的
上下文窗口如何处理
滑动窗口,还有其它方法比如摘要压缩
LLM能调用工具、MCP吗?
可以,react循环时自主调用
工具的返回结果存在哪里?历史会话中?
(我不知道)在session中,session是个结构体,里面存工具返回结果以及其它状态
(这里回答的很乱,我自己都没法说成闭环)
(中途还在某句话中问了是我自己开发的吗)
正确答案:
当用户在一个有历史聊天的对话中发新消息时,关注history、session、Message:
创建该轮问答的请求session、Message。首先把history加载进Message,history中存储的是原始的问答记录,LLM 看到的是Message;然后发起当前轮的工具调用,然后工具调用返回结果加入Message,供LLM进行下一步决策,同时也拷贝一份到session中,因为session要记录格式化的工具调用记录及返回结果,然后由assemble函数来根据session组装最终推荐结果(保证前端推荐卡片数据来源真实,防LLM编造)。然后LLM最终也会给出他的推荐理由,这一点写入前端推荐卡片的理由栏。最后该轮session、Message销毁,历史记录保留。
你对claude、codex的底层架构有了解吗
没有
你平时编码是哪种语言
我说我现在学的go,之前学过python,写的第二个项目
(估计不想管我第二个项目)
(然后让我用熟悉的语言写算法题)
求字符串数组的最长公共前缀
他说用暴力就行,我听了以为是一道很简单的题,实际上看着也很简单
但我被他盯着码贼不自然,脑子半天都是宕机的,无法冷静思考
也并不是简单到嵌套几层for循环就能做的,需要也需要好好思考一下的
我应该先想好思路,然后按照思路去码的,我上手就码导致思路很乱,然后码了又删,恶性循环让我更乱了
大概十分钟后我也没写出任何步骤,就让我等消息了
问了下佬们,说是g了
总结
最大的败笔应该就是这么简单的算法题没写出来:
一方面是紧张了,没冷静思考
另一方面是编码能力不足,得多写写

