- 引言:AI 编写代码的时代,你的价值是什么?
- 1. LLM 工程师是什么?
- 2. 开发者经验是一大利器的原因
- 3. LLM 工程师转型路线图(12 个月)
- 4. 实际项目创意(用于作品集)
- 5. LLM 工程师就业市场
- 6. 现在就能开始的第一个项目
- 结语:比恐惧更快地行动
- 参考资料
引言: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 的运作原理
- 将文档切分成小的分块
- 把每个分块转换为向量(数字数组),即嵌入
- 存入向量数据库
- 收到问题后,检索与该问题相似的分块
- 把检索到的分块与问题一起提供给 LLM
- 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 个月后的模样,就会一点点浮现出来。
参考资料
현재 단락 (1/402)
还记得第一次使用 Cursor 的那天吗?