LabHub

博客

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

한국어English日本語中文

引言: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 集成与优化

RAG 系统设计与实现

AI 智能体 / 工作流构建

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 的运作原理

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

推荐资料: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}")

提示词工程基础

# 结构化输出示例
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 基于上下文生成回答

向量数据库

# 用 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 系统。

智能体的核心组成部分

# 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 微调与评估

什么时候需要微调?

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

如果用 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:个性化代码评审机器人

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

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

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

项目 5:AI 面试教练


5. LLM 工程师就业市场

招聘信息要求的技能

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

必备技能

加分技能

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

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

在软件开发者中,转型 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 聊天机器人了。接下来,请自己探索改进的方向:

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


结语:比恐惧更快地行动

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

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

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

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

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


参考资料

评论

还没有评论。

登录后即可发表评论