Skip to content
Published on

AI 时代生存指南第 2 篇:从开发者转型为 LLM 工程师/AI 工程师

分享
Authors

引言:AI 编写代码的时代,你的价值是什么?

还记得第一次使用 Cursor 的那天吗?

「这个……比我还快啊」——这个念头浮现的瞬间,一种莫名的不安便涌上心头。GitHub Copilot 已经成为许多开发者的日常,Claude 和 GPT-4 只要给出规格文档,30 分钟内就能生成一个后端 API。像 Devin 这样的 AI 智能体甚至能独立处理 GitHub issue 并提交 PR。

「我现在应该站在哪里?」

我会诚实地回答这个问题。仅凭单纯的代码编写来实现差异化,正变得越来越难。但矛盾的是,深入理解 AI 技术本身、并打造 AI 产品的工程师,需求却在爆发式增长。

这正是 LLM 工程师(AI 工程师)。

他们不惧怕 AI。他们是打造、连接、优化 AI 的人。而拥有既有软件开发经验的人,恰恰是进入这个角色最有利的人选。

本文将为拥有后端、全栈,或任何软件开发经验的人,提供一份能在 12-18 个月内转型为 LLM 工程师的现实路线图。


1. LLM 工程师是什么?

几种相似职称的区别

先来梳理一下看起来相似的几个职称。

提示词工程师:设计能从 LLM 中引出更好回答的提示词的人。早期曾备受关注,但相比固化为独立职种,更多趋向于被整合进其他角色。

LLM 工程师 / AI 工程师:设计并实现 AI 应用的软件工程师。涵盖提示词设计,当然还有 RAG 系统、AI 智能体、微调、生产环境部署在内的综合性角色。目前需求最大的职种。

ML 工程师:研究并开发机器学习模型本身的人。通常需要 ML/统计背景,并要求较深的数学理解。进入门槛比 LLM 工程师更高。

MLOps 工程师:专注于 ML 模型的部署、运维、监控。是 DevOps 与 ML 的交叉领域。

对软件开发者来说,最现实的转型路径是 LLM 工程师/AI 工程师

LLM 工程师实际在做什么

分析招聘信息与实际工作内容,LLM 工程师的日常大致如下:

LLM API 集成与优化

  • 使用 OpenAI、Anthropic、Google Gemini API 实现功能
  • 成本优化:何时该用哪个模型、缓存策略、批处理
  • 最小化延迟:流式响应、并行处理

RAG 系统设计与实现

  • 构建让 LLM 能够利用企业文档、数据库的流水线
  • 分块策略、嵌入模型选型、向量数据库运维
  • 检索质量的测量与改进

AI 智能体 / 工作流构建

  • 开发能自主使用多种工具的 AI 智能体
  • 多智能体系统(CrewAI、LangGraph)
  • Human-in-the-loop 设计:何时需要人工介入

LLM 微调

  • 针对特定领域或风格,对既有模型进行追加训练
  • 数据集收集、清洗、训练流水线搭建
  • 评估指标设计

AI 产品的评估与监控

  • 幻觉检测
  • 回答质量测量(自动化 + 人工评估)
  • 成本与延迟仪表盘

2. 开发者经验是一大利器的原因

许多开发者会因为觉得「ML 很难,需要很多数学」而犹豫是否转型 LLM 工程师。但 LLM 工程师并不是 ML 研究者。你的软件开发经验反而是一种优势。

软件开发经验为何在 AI 产品开发中大放异彩

API 设计能力:要把 RAG 系统、AI 智能体做到生产级品质,需要设计良好的 API 与服务结构。纯粹的数据科学家在这方面往往较弱。

数据库知识:向量数据库虽是新技术,但索引、查询优化、事务这些概念,都能从既有的数据库知识自然延伸而来。

性能优化:LLM API 调用是昂贵的。缓存、批处理、异步处理——这些都是你在后端开发中早已掌握的技术。

系统思维:理解复杂 AI 流水线中各个组件如何互联、故障如何传播,这来自于系统设计的经验。

代码质量:很多 AI 开发代码的质量低得惊人,甚至有不经测试就直接从 notebook 搬进生产环境的情况。软件开发者写测试、做代码评审、坚持 CI/CD 的习惯,在这里大放异彩。


3. LLM 工程师转型路线图(12 个月)

第 1-2 个月:LLM 基础

理解 LLM 的运作原理

不需要掌握全部深度学习数学,但基本概念必须理解:

  • Transformer 架构:为什么 Attention 机制如此重要,Self-attention 如何理解上下文
  • 分词(Tokenization):文本是如何被切分成 token 的,为什么英语和韩语的 token 数量不同
  • 上下文窗口:模型一次能处理的文本长度限制
  • Temperature、Top-p:调节输出多样性的参数
  • Few-shot、Zero-shot:在提示词中给出示例的几种方式

推荐资料:Andrej Karpathy 的 YouTube 系列「Neural Networks: Zero to Hero」——比起数学公式,更先建立直觉的最佳资料。

ChatGPT、Claude、Gemini API 实操

创建账号,亲自调用一下 API。

# OpenAI API 基本用法
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一名有帮助的代码评审员。"},
        {"role": "user", "content": "请评审这个 Python 函数:def add(a, b): return a + b"}
    ],
    temperature=0.7,
    max_tokens=500
)

print(response.choices[0].message.content)
print(f"使用的 token 数: {response.usage.total_tokens}")
print(f"成本 (按 gpt-4o 计费): ${response.usage.total_tokens * 0.000005:.6f}")

提示词工程基础

  • Zero-shot:不给示例直接提问
  • Few-shot:先给 2-3 个示例再提问
  • Chain-of-Thought (CoT):要求「一步一步思考」,能提升复杂推理的质量
  • System prompt:定义模型的角色与行为方式
  • Structured Output:强制以 JSON 格式返回答案
# 结构化输出示例
from openai import OpenAI
from pydantic import BaseModel
from typing import List

class CodeReview(BaseModel):
    issues: List[str]
    suggestions: List[str]
    severity: str  # "low", "medium", "high"
    score: int     # 1-10

client = OpenAI()

response = client.beta.chat.completions.parse(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一名资深开发者。请评审代码并以 JSON 格式返回结果。"},
        {"role": "user", "content": "请评审以下代码:[代码内容]"}
    ],
    response_format=CodeReview
)

review = response.choices[0].message.parsed
print(f"严重程度: {review.severity}")
print(f"评分: {review.score}/10")

第 3-4 个月:RAG 系统

RAG(Retrieval-Augmented Generation,检索增强生成)是 LLM 工程师的核心技术。它能让 LLM 利用自己原本不知道的企业内部文档、最新数据。

RAG 的运作原理

  1. 将文档切分成小的分块
  2. 把每个分块转换为向量(数字数组),即嵌入
  3. 存入向量数据库
  4. 收到问题后,检索与该问题相似的分块
  5. 把检索到的分块与问题一起提供给 LLM
  6. LLM 基于上下文生成回答

向量数据库

  • Chroma:非常适合本地开发,只需一个 Python 包即可立即上手
  • Pinecone:云端托管型,生产环境中广泛使用
  • pgvector:为既有 PostgreSQL 添加向量功能,如果已经在用 Postgres,会很有吸引力
# 用 LangChain 构建 RAG 系统
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 1. 加载文档
loader = PyPDFLoader("company_docs.pdf")
documents = loader.load()

# 2. 分块
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)

# 3. 嵌入并存入向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db"
)

# 4. 创建 RAG 链
llm = ChatOpenAI(model="gpt-4o", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(search_kwargs={"k": 5})
)

# 5. 提问
result = qa_chain.invoke({"query": "我们公司的年假政策是什么?"})
print(result["result"])

实战项目:用公司内部文档(人事制度、技术文档、FAQ)制作一个 QA 聊天机器人。这是最现实的第一个 RAG 项目。


第 5-6 个月:AI 智能体

智能体不只是回答问题,而是能使用工具达成目标的 AI 系统。

智能体的核心组成部分

  • 工具(Tools):代码执行器、网页搜索、数据库查询、API 调用等
  • 记忆:对话记录、长期记忆
  • 规划(Planning):为达成目标制定分步计划
# LangChain Agent 示例:代码评审智能体
from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
from langchain_community.utilities import SerpAPIWrapper

# 定义工具
def analyze_code_complexity(code: str) -> str:
    """分析代码的复杂度。"""
    # 实际实现中会使用 radon 等库
    lines = code.count('\n')
    functions = code.count('def ')
    return f"代码行数: {lines}, 函数数量: {functions}, 复杂度得分: {lines // 10}"

def check_security_issues(code: str) -> str:
    """检查基本的安全漏洞。"""
    issues = []
    if 'eval(' in code:
        issues.append("检测到 eval() 用法 - 安全风险")
    if 'shell=True' in code:
        issues.append("检测到 shell=True 用法 - 命令注入风险")
    if not issues:
        return "未发现明显的安全漏洞"
    return "\n".join(issues)

tools = [
    Tool(
        name="代码复杂度分析",
        func=analyze_code_complexity,
        description="分析 Python 代码的复杂度。输入: 代码字符串"
    ),
    Tool(
        name="安全漏洞检查",
        func=check_security_issues,
        description="检查代码中的安全漏洞。输入: 代码字符串"
    )
]

llm = ChatOpenAI(model="gpt-4o", temperature=0)
prompt = hub.pull("hwchase17/react")

agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

result = agent_executor.invoke({
    "input": "请对以下代码进行综合评审: [代码内容]"
})

用 LangGraph 构建复杂的智能体工作流

LangGraph 把智能体的状态机定义为图,适合复杂的分支、循环、多智能体协作。

CrewAI 多智能体

多个专业化智能体协作的系统:

from crewai import Agent, Task, Crew

# 定义智能体
researcher = Agent(
    role="技术调研员",
    goal="调研给定主题的最新技术趋势",
    backstory="拥有 10 年经验的技术分析师",
    verbose=True
)

writer = Agent(
    role="技术博客作者",
    goal="把调研结果写成通俗易懂的博客文章",
    backstory="专注于开发者内容的技术博客专业作者",
    verbose=True
)

# 定义任务
research_task = Task(
    description="调研 LLM 工程领域的最新趋势",
    agent=researcher
)

writing_task = Task(
    description="基于调研结果撰写博客文章",
    agent=writer
)

# 执行 crew
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task]
)
result = crew.kickoff()

第 7-9 个月:LLM 微调与评估

什么时候需要微调?

微调不是万能的,只在以下情况才考虑:

  • 需要特定领域的术语/风格时(法律、医疗、金融)
  • 想稳定获得特定格式的输出时
  • 无论怎么修改提示词都得不到想要的结果时
  • 微调成本比 API 成本更低时

如果用 RAG 或提示词工程就能解决,那应该优先选择它们。

用 LoRA/QLoRA 实现高效微调

完整微调(Full fine-tuning)需要极大量的 GPU。LoRA(Low-Rank Adaptation)只训练模型的一部分,从而大幅降低成本。

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer
from datasets import load_dataset

# 加载基础模型
model_name = "beomi/Llama-3-Open-Ko-8B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    load_in_4bit=True,  # QLoRA: 4 位量化
    device_map="auto"
)

# LoRA 配置
lora_config = LoraConfig(
    r=16,           # 秩(rank),越低参数量越少
    lora_alpha=32,  # 缩放参数
    target_modules=["q_proj", "v_proj"],  # 仅应用于 attention 层
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 输出示例: trainable params: 3,407,872 (占全体的 0.04%)

LLM 评估:RAGAS

衡量 RAG 系统质量的框架:

from ragas import evaluate
from ragas.metrics import (
    faithfulness,        # 答案是否忠实于上下文
    answer_relevancy,    # 答案是否与问题相关
    context_precision,   # 检索到的上下文是否准确
    context_recall       # 是否检索到了全部所需的上下文
)

# 评估数据集
from datasets import Dataset

data = {
    "question": ["公司的年假政策是什么?", "工资什么时候发放?"],
    "answer": ["提供 15 天年假。", "每月 25 日发放。"],
    "contexts": [
        ["每年提供 15 天年假,剩余年假不可结转..."],
        ["工资发放日为每月 25 日,如遇节假日则提前一天发放..."]
    ],
    "ground_truth": ["每年 15 天", "每月 25 日"]
}

dataset = Dataset.from_dict(data)
result = evaluate(dataset, metrics=[faithfulness, answer_relevancy])
print(result)

第 10-12 个月:生产环境 AI 系统

用 vLLM 部署开源模型

出于成本节约或数据隐私需要直接部署开源模型时:

# 安装 vLLM 并部署模型
pip install vllm

# 启动 API 服务器
python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3-8B-Instruct \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.9

vLLM 提供与 OpenAI API 兼容的服务器,因此只需修改 URL,就能沿用既有的 OpenAI SDK 代码。

成本优化策略

# 成本监控包装器示例
import time
from functools import wraps
from dataclasses import dataclass

COST_PER_TOKEN = {
    "gpt-4o": {"input": 0.000005, "output": 0.000015},
    "gpt-4o-mini": {"input": 0.00000015, "output": 0.0000006},
    "claude-3-5-sonnet": {"input": 0.000003, "output": 0.000015},
}

@dataclass
class APICall:
    model: str
    input_tokens: int
    output_tokens: int
    latency_ms: float
    cost_usd: float

def track_llm_cost(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        elapsed = (time.time() - start) * 1000

        # 使用量追踪 (实际实现中会存入数据库)
        print(f"延迟: {elapsed:.0f}ms")
        return result
    return wrapper

用 LangSmith 监控

LangSmith 是 LangChain 生态系统的监控/调试工具。可以追踪生产环境中哪个提示词是如何执行的、又是在哪里失败的。

import os
from langchain_core.tracers import LangChainTracer

# 设置环境变量
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-langsmith-api-key"

# 此后所有 LangChain 调用都会被自动追踪

4. 实际项目创意(用于作品集)

求职时,「我学了这个」远不如「我做出了这个」更有说服力。以下项目是在实际招聘面试中能吸引注意力的项目。

项目 1:个性化代码评审机器人

  • 在 GitHub PR 上自动附上 AI 代码评审评论
  • 学习代码库的风格指南,给出一致的评审
  • 技术栈:GitHub Actions + Claude API + GitHub API
  • 差异化:不是简单的评审,而是运用学习「这个团队专属惯例」的 RAG

项目 2:企业知识库 QA 聊天机器人

  • 检索 Confluence、Notion、Slack 等内部文档的聊天机器人
  • 多模态:处理包含 PDF、图片的文档
  • 技术栈:FastAPI + LangChain + pgvector + React
  • 差异化:来源引用功能、置信度评分显示

项目 3:韩语专项新闻分析智能体

  • 每日收集、摘要、分类主要新闻
  • 对特定公司/关键词进行情感分析
  • 技术栈:CrewAI + SerpAPI + Anthropic Claude + Cron
  • 差异化:韩语优化(运用韩语 LLM 微调)

项目 4:SQL 自动生成器(Text-to-SQL)

  • 用自然语言查询数据库的系统
  • 「告诉我上个月购买最多的前 10 名客户」
  • 技术栈:LangChain SQL Agent + Streamlit + DuckDB
  • 差异化:能处理复杂 JOIN、子查询的高阶实现

项目 5:AI 面试教练

  • 分析 JD(Job Description,职位描述)与简历,生成预期面试问题
  • 听取回答并提供反馈(含语音输入)
  • 技术栈:OpenAI Whisper + GPT-4o + FastAPI + Next.js
  • 差异化:用真实面试数据微调过的评估模型

5. LLM 工程师就业市场

招聘信息要求的技能

分析实际的 LLM 工程师招聘信息:

必备技能

  • 熟练掌握 Python(自不必说)
  • LLM API 使用经验(OpenAI、Anthropic、Google)
  • RAG 系统实现经验
  • 向量数据库(Pinecone、Weaviate、pgvector 等)
  • LangChain 或 LlamaIndex 经验

加分技能

  • 微调经验(LoRA、PEFT)
  • 模型部署经验(vLLM、TGI)
  • MLOps(MLflow、W&B)
  • 云平台经验(AWS Bedrock、GCP Vertex AI、Azure AI)

核心:比起理论,他们更想看到你实际做出来的东西。作品集就是一切。

薪资现状(以 2026 年为基准的估算)

  • 初级 LLM 工程师(1-2 年):5,000-7,000 万韩元
  • 中级(3-5 年):7,000 万-1 亿韩元
  • 高级(5 年以上):1 亿-1 亿 5,000 万韩元
  • 大厂/AI 创业公司:1 亿 5,000 万韩元以上 + 股票期权

在软件开发者中,转型 LLM 工程师是目前薪资涨幅最大的职业转换之一。

韩国 vs 海外

韩国市场对 LLM 工程师的需求同样爆发式增长。Naver、Kakao、三星、LG 以及无数创业公司都在打造 AI 产品。

海外远程工作也值得考虑。在 LinkedIn、Glassdoor 上搜索「LLM Engineer remote」,能找到身居韩国、却在美国创业公司工作的职位。如果英语能力足够,薪资可能相差 2-3 倍。


6. 现在就能开始的第一个项目

理论已经足够了。下面介绍一个现在立刻就能做、最简单却也最令人印象深刻的项目。

打造「专属图书推荐聊天机器人」(2-3 小时)

这个项目能让你体验 RAG 的核心,同时做出真正实用的成果。

事前准备

pip install openai langchain chromadb tiktoken

Step 1:准备数据

把你喜欢的 10-20 本书的信息整理成文本文件:书名、作者、剧情简介、主要主题、推荐读者。

Step 2:构建向量数据库

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_community.document_loaders import TextLoader
import os

os.environ["OPENAI_API_KEY"] = "your-api-key"

# 加载图书信息
loader = TextLoader("books.txt", encoding="utf-8")
documents = loader.load()

# 分块
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
chunks = splitter.split_documents(documents)

# 创建向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="books_db"
)
print(f"已存储的分块数: {len(chunks)}")

Step 3:实现聊天机器人

from langchain_openai import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory

# LLM 配置
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)

# 对话记忆
memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True
)

# RAG 链
qa_chain = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    memory=memory,
    verbose=True
)

# 对话循环
print("这是图书推荐聊天机器人。您在寻找什么类型的书?")
while True:
    query = input("You: ")
    if query.lower() in ["quit", "exit", "退出"]:
        break

    response = qa_chain.invoke({"question": query})
    print(f"Bot: {response['answer']}\n")

Step 4:改进

仅凭这些,已经是一个可以运行的 RAG 聊天机器人了。接下来,请自己探索改进的方向:

  • 添加更多图书数据
  • 在检索结果中显示来源
  • 用 Streamlit 制作网页界面
  • 添加记住读者喜好的长期记忆

把这个项目上传到 GitHub,在 README 中说明使用方法,再加上截图,就是一份出色的作品集条目。


结语:比恐惧更快地行动

AI 取代开发者的速度,与善用 AI 的开发者创造新价值的速度——哪一个更快?

我相信是后者更快,而 LLM 工程师正处在后者的中心。

已经了解软件开发,本身就是一个巨大的起点。如果你会用 Python、能对接 API、有过系统设计的经验——那么成为 LLM 工程师所需的基础体能,你其实已经具备了。

剩下的,就是理解 LLM 的特性,并练习用它做出实用的东西。

今天就去申请一个 OpenAI API key,运行上面的第一段代码吧。当 AI 第一次回应你的输入的那一刻起,12 个月后的模样,就会一点点浮现出来。


参考资料