2026-01-130

背景

随着各种LLM的普及,ai agent的开发逐渐成为后端开发的必备,所以需要掌握相关的知识是后端所必须的 这里主要记录一些agent开发相关的基础知识学习

参考文章

技术架构

  • python 相关框架 langChain LangGraph
  • golang 相关框架 eino 是字节跳动开源的一款基于 Go 语言 的大模型(LLM)应用开发框架

RAG(Retrieval-Augmented Generation 检索增强生成)

  • 描述:一种结合了信息检索和文本生成的技术
  • 核心思想:
    • 在生成回答之前,先从外部知识库中检索相关信息,
    • 然后将检索到的信息作为上下文提供给大语言模型,
    • 从而生成更准确、更可靠的回答。
  • 工作流程
    • 首先在数据准备阶段,系统通过数据提取、文本分割和向量化,将外部知识构建成一个可检索的数据库。
    • 随后在应用阶段,系统会响应用户的提问,从数据库中检索相关信息,将其注入Prompt,并最终驱动大语言模型生成答案。

ai概念学习

对于程序员来说,掌握ai相关的知识是现在以及未来必须具备的能力,所以先要掌握ai的相关概念

什么是token :

token是大模型处理文本的基本单元

  • 简单来说,模型并不直接阅读“单词”或“句子”,而是将输入的文本切割成一个个片段,这些片段就是 Token。

什么是agent

Agent = LLM(大模型)+ Planning(规划)+ Memory(记忆)+ Tools(工具)

RAG

发音为软安哥

  • 概念:Retrieval-Augmented Generation(检索增强生成)
  • 什么是RAG:
    • 一种结合 检索(Retrieval) 和 生成(Generation) 的自然语言处理技术。
    • 先从知识库或文档库中检索相关信息,再基于这些信息生成回答或文本。
    • 解决纯生成模型可能“凭空编造”(hallucination)问题,提高回答准确度。
  • 解决什么问题
    • 用来解决:模型不知道 / 不准 / 不能瞎编

skills

  • 概念:可以理解为工具说明书
    • 更偏向语义层,通常包括:
      • 一个能力能做什么(例如:总结、翻译、写代码)
      • 什么时候用它
      • 输入/输出格式
      • 使用示例
      • 有时还包括提示词模板(prompt template)

GPM模型

在Go中,线程是运行goroutine的实体,调度器的功能是把可运行的goroutine分配到工作线程上 image.png

  1. 全局队列(Global Queue):存放等待运行的G。
  2. P的本地队列:同全局队列类似,存放的也是等待运行的G,存的数量有限,不超过256个。新建G'时,G'优先加入到P的本地队列,如果队列满了,则会把本地队列中一半的G移动到全局队列。
  3. P列表:所有的P都在程序启动时创建,并保存在数组中,最多有GOMAXPROCS(可配置)个。
  4. M:线程想运行任务就得获取P,从P的本地队列获取G,P队列为空时,M也会尝试从全局队列拿一批G放到P的本地队列,或从其他P的本地队列偷一半放到自己P的本地队列。M运行G,G执行之后,M会从P获取下一个G,不断重复下去。 image.png

面试总结

面试介绍总结:百度poi商业化数据清洗平台(架构级别描述)

项目描述 or 项目定位

主要负责地图 商业化POI 数据清洗,平台整体是一个多阶段的数据处理流水线。数据以文件形式在各个处理环节之间流转,每一步都会读取上一步的结果文件进行处理,并生成新的结果文件。整个流程包括数据请求、结构解析、diff判断、策略判重、人工审核以及数据上线等

架构设计

  • 系统采用“调度系统 + Celery + 文件流转”的架构:
    • 调度系统负责流程控制和状态管理
    • Celery 负责具体任务的异步执行
    • 文件作为各个阶段的数据载体
2026-04-220

LRU 算法实现

题目要求

golang 实现lru算法,要求在 O(1) 时间内完成get和put请求

最长连续序列实现

题目

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

js示例
输入: nums = [100,4,200,1,3,2] 输出: 4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 示例 2: 输入: nums = [0,3,7,2,5,8,4,6,0,1] 输出: 9 示例 3: 输入: nums = [1,0,1,2] 输出: 3
2026-04-160

这里eino 框架学习的相关总结,方便后续学习和记忆

组件

  • ChatModel‌:与大模型交互的核心组件,支持生成式对话(Generate)和流式输出(Stream),部分实现还支持工具调用(ToolCallingChatModel)
  • Tool‌:扩展大模型能力的工具,可调用外部 API、数据库、文件系统等,支持同步(Invoke)和流式(Stream)两种范式
  • Retriever‌:从向量库或文档库中检索与查询相关的文档片段,常用于 RAG 场景。
  • Embedding‌:将文本转换为向量表示,用于语义搜索和向量索引。
  • Indexer‌:负责存储和索引文档向量,支持 Redis、Milvus 等向量数据库。 ‌- Document Loader‌:加载并解析多种格式的原始文档(如 PDF、Markdown、TXT 等),统一为schema.Document 结构。
  • Document Transformer‌:对文档进行切分、过滤或格式转换,如按标题、递归或语义切分。
  • ChatTemplate‌:管理提示词模板,支持 FString、GoTemplate、Jinja2 等语法,便于动态构建系统提示

从头开始,每K个一组,翻转链表

js
func main() { head := buildList([]int{1, 2, 3, 4, 5, 6}) k := 3 fmt.Println("原链表:") printList(head) newHead := reverseKGroup(head, k) fmt.Println("每K个翻转后:") printList(newHead) }