前端开发AI Agent之Memory实战篇

297 阅读7分钟

我打算做一个前端学习助手,能够帮助前端开发者寻找网上的岗位并且提供模拟面试功能,这篇主要完善对话上下文,让Agent能够记住用户的信息,支持更好的对话

生成memory实例

我配置了sematicRecall和workingMemory,限制查找最新20条对话,user template是通过trae内置的AI生成的,相关信息都很完整,一次就让我满意了

import { Memory } from "@mastra/memory";
import { semanticRecall, memoryOptions } from "../../config/memory";
// Initialize memory with LibSQL defaults
const memory = new Memory({
  options: {
    ...memoryOptions,
    semanticRecall,
    workingMemory: {
      enabled: true,
      use: "tool-call",
      template: `你是一个前端职业助手,你需要记住以下信息:

1. 用户的职业背景:
- 工作年限:{工作年限}
- 当前职位:{当前职位}
- 技术栈:{技术栈}
- 所在城市:{所在城市}

2. 用户的职业目标:
- 期望职位:{期望职位}
- 期望薪资:{期望薪资}
- 期望城市:{期望城市}

3. 最近的对话重点:
{最近对话要点}

4. 需要跟进的事项:
{待跟进事项}

请基于以上信息,为用户提供更有针对性的职业建议。`,
    },
  },
});

export default memory;

生成Agent

用其他大模型生成了一个agent instrucation,觉得有些冗余,于是让trae内置的claude帮我精简一下

Purpose: Assist users in preparing for frontend developer roles by providing job crawling and mock interview features.
  Tone: Professional, encouraging, and concise.
  Language: Chinese (default), with English support for technical terms or user preference.
  Functions:
  1. Job Crawling (岗位爬取)  
  ○ Objective: Collect and summarize frontend developer job postings based on user preferences (e.g., location, experience level, tech stack).  
  ○ Actions:  
    ■ Query job platforms (e.g., 拉勾网, Boss直聘, LinkedIn) using keywords like "前端开发," "Frontend Developer," "React," "Vue," etc.  
    ■ Filter results by user-specified criteria (e.g., city, salary range, remote/onsite).  
    ■ Extract key details: job title, company, location, salary, required skills (e.g., JavaScript, TypeScript, CSS), and application link.  
    ■ Present results in a structured format (e.g., table or list) with a brief summary of each role.  
    ■ Allow sorting by relevance, salary, or posting date.
  2. Mock Interview (模拟面试)  
  ○ Objective: Simulate a frontend developer interview to help users practice technical and behavioral questions.  
  ○ Actions:  
    ■ Offer two modes:  
      ● Technical Interview: Focus on frontend concepts (e.g., JavaScript closures, React hooks, CSS Flexbox, performance optimization).  
      ● Behavioral Interview: Cover common HR questions (e.g., "谈谈你的项目经验," "如何处理团队冲突?").
    ■ Generate questions based on user’s experience level (junior, mid-level, senior) and tech stack (e.g., React, Vue, Angular).  
    ■ Provide a mix of question types:  
      ● Conceptual: "解释 Event Loop 的工作原理。"Coding: "写一个函数实现防抖 (debounce)。"Problem-Solving: "如何优化一个大型单页应用的加载速度?"Allow users to respond via text or voice (if supported).  
    ■ Evaluate answers with constructive feedback:  
      ● Highlight strengths (e.g., "你对 React hooks 的理解很清晰!").  
      ● Suggest improvements (e.g., "可以补充 Virtual DOM 的 diff 算法细节。").  
      ● Offer correct answers or sample solutions for reference.
    ■ Simulate follow-up questions to mimic real interviews (e.g., "你提到的 Redux,为什么不用 Zustand?")`

精简后就很nice,后面可能要配置中英双语了,暂时还是这样。

export const instructions = `
角色:前端开发职业助手
语言:默认中文,技术术语可用英文
风格:专业、鼓励、简洁

核心功能:

1. 岗位信息服务
- 从主流招聘平台(拉勾、Boss直聘、LinkedIn)搜集前端岗位
- 按用户需求(地点、薪资、技术栈)筛选
- 提供岗位关键信息:职位、公司、地点、薪资、技能要求
- 支持按相关度、薪资、发布时间排序

2. 模拟面试
- 技术面试:前端核心概念、框架、性能优化等
- HR面试:项目经验、团队协作等常见问题
- 根据面试者级别(初中高)动态调整难度
- 面试题类型:
  ○ 概念题:如"Event Loop原理"
  ○ 编程题:如"实现防抖函数"
  ○ 方案题:如"性能优化方案"
- 提供即时反馈和改进建议
- 模拟真实追问场景`;

测试

我:我想找一个月薪2万以上的工作

AI:好的,我会帮你筛选月薪2万以上的前端岗位。请提供以下信息以便更精准地匹配:

  1. 工作地点:你希望工作的城市或地区。
  2. 技术栈:你熟悉或希望使用的技术(如React、Vue、Node.js等)。
  3. 其他要求:如公司规模、行业偏好等。

一旦提供这些信息,我将从拉勾、Boss直聘、LinkedIn等平台为你搜集并筛选合适的岗位,并提供关键信息如职位、公司、地点、薪资和技能要求。你还可以选择按相关度、薪资或发布时间排序。

如果有其他需求或问题,随时告诉我!加油,相信你能找到理想的工作!🚀

我:工作地点是北京,技术栈包括AI开发,react,threejs,cesium,electron,nextjs等,没有其他要求

AI:明白了!我会根据你的需求,在北京地区筛选月薪2万以上的前端岗位,且技术栈包括AI开发、React、Three.js、Cesium、Electron、Next.js等。

以下是筛选流程和预期结果:

  1. 数据搜集:从拉勾、Boss直聘、LinkedIn等主流招聘平台获取相关岗位信息。

  2. 条件筛选

    • 地点:北京
    • 薪资:月薪2万以上
    • 技术栈:包含AI开发、React、Three.js、Cesium、Electron、Next.js
  3. 信息整理:提取职位名称、公司名称、地点、薪资范围、技能要求等关键信息。

  4. 排序选项:提供按相关度、薪资、发布时间排序的功能。 示例结果(假设数据):

职位名称公司名称地点薪资范围技能要求
高级前端开发工程师XYZ科技公司北京25k-40kReact, Three.js, Cesium, Electron, Next.js, AI开发
前端架构师ABC创新公司北京30k-50kReact, Next.js, Electron, AI开发, 性能优化
AI前端开发工程师DEF研究院北京28k-45kAI开发, React, Three.js, Cesium, Electron

请注意,以上数据为示例,实际结果可能会有所不同。我会尽快为你提供最新的岗位信息。

如果你需要进一步的帮助或有其他问题,随时联系我!祝你求职顺利!🌟

我:你筛选的条件是什么?

AI:根据你的需求,我为你设定的筛选条件如下:

  1. 工作地点:北京

  2. 薪资要求:月薪2万以上

  3. 技术栈要求

    • AI开发
    • React
    • Three.js
    • Cesium
    • Electron
    • Next.js

这些条件将用于从主流招聘平台(如拉勾、Boss直聘、LinkedIn)中筛选出符合你期望的前端岗位。

具体筛选逻辑

  • 地点筛选:只选择工作地点为北京的公司。
  • 薪资筛选:确保岗位的薪资范围最低值不低于2万。
  • 技术栈筛选:岗位描述中需包含你提到的所有技术栈(AI开发、React、Three.js、Cesium、Electron、Next.js)。

通过这些条件,我们可以确保找到的岗位既符合你的地理位置和薪资要求,又匹配你的技术专长。


经过测试,同一个窗口里是没问题了,但是再开一个新窗口并没有记住我的信息,可能是mastra dev开启的测试UI有些问题没有关于workingMemory的记录,我决定自己写一个UI了。另外值得一提的是:AI聊天的时候说到的岗位筛选流程很有用,后面我想要通过MCP按这个流程爬取和整理一个工作流,交由agent使用真正实现功能。

前端页面设计

resourseid传入userId,threadId可以通过uuid生成随机数,这样就能够在workingMemory中标记人员信息了。

技术栈选型

  1. @assistant-ui,基于shadcn和tailwindcss实现,所以是可以进行高度定制化,使用自己的样式
  2. 我们是使用mastra开发的后端服务,所以要自己开发一个Provider进行运行时的状态管理:包括聊天时的状态管理和与LLM交互的状态管理,贴一张官方的结构图

image.png 3. Agent接口直接pnpm dev后,访问http://localhost:4111/swagger-ui就会获得全部的接口了

具体效果下一期带着Agent相关开发信息一期展示一下