第02章:技术栈准备——你需要会什么才能接单

第02章:技术栈准备——你需要会什么才能接单

你不需要是AI科学家。你需要的是:能把现有的开源工具组装成一个能跑的系统,然后教会客户的人用它。这是工程能力,不是研究能力。


FDE的最小技术栈

必须精通(不会就接不了单):
├── Python(后端开发主力)
├── LLM API调用(OpenAI / 通义 / 文心 / DeepSeek)
├── RAG基础(Embedding + 向量搜索 + Prompt Engineering)
├── 一种向量数据库(ChromaDB / Milvus / Qdrant)
├── PostgreSQL(结构化数据)
└── Linux基础(部署在客户服务器上)

应该了解(不会也能接单,但做不好):
├── Docker(容器化部署)
├── FastAPI(构建API服务)
├── 文档处理(PDF/Word/Excel解析)
├── 监控告警(Prometheus/Grafana)
└── 基本网络知识(防火墙、反向代理)

加分项(有就更容易接到单):
├── 特定行业知识(制造/金融/医疗/法律)
├── Agent框架(Hermes / LangChain / CrewAI)
├── 前端(React/Vue,做管理界面)
└── MCP(Model Context Protocol)

核心技术详解

1. Python——你的主力武器

# 你不需要会高级Python。
# 你需要的是"能快速把东西拼起来"的能力。

# 必须会的:
import asyncio          # 异步编程(LLM调用很慢,不能同步等)
import httpx            # HTTP客户端
from fastapi import FastAPI  # Web框架
from pydantic import BaseModel  # 数据验证
import sqlalchemy       # 数据库ORM

# 不需要会的:
# - 机器学习框架(PyTorch/TensorFlow)
# - 数据科学(Pandas/NumPy的高级用法)
# - Python C扩展

2. LLM API——会调用就行

# 你不需要训练模型,你只需要会调用API。

# 最简单的LLM调用
import openai

client = openai.OpenAI(
    api_key="sk-xxx",
    base_url="https://api.deepseek.com"  # 国产模型通常兼容OpenAI格式
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一个专业的客服助手。"},
        {"role": "user", "content": "退货流程是什么?"}
    ]
)

# 你需要掌握的LLM知识:
# 1. System Prompt怎么写(决定AI的行为)
# 2. Temperature怎么调(0=确定性,1=创造性)
# 3. Token是什么(影响成本和速度)
# 4. Streaming怎么用(让用户不用等太久)
# 5. 不同模型的特点(GPT-4o贵但强,DeepSeek便宜但够用)

3. RAG——核心交付能力

# RAG = Retrieval Augmented Generation
# = 先搜索相关文档,再让LLM基于文档回答

# 最简单的RAG流程
class SimpleRAG:
    def __init__(self):
        self.vector_db = chromadb.Client()
        self.collection = self.vector_db.get_or_create_collection("docs")
    
    def add_document(self, text: str, metadata: dict):
        """入库"""
        self.collection.add(
            documents=[text],
            metadatas=[metadata],
            ids=[str(uuid4())]
        )
    
    def query(self, question: str) -> str:
        """查询"""
        # 1. 搜索相关文档
        results = self.collection.query(
            query_texts=[question],
            n_results=5
        )
        
        # 2. 拼接上下文
        context = "\n".join(results["documents"][0])
        
        # 3. 让LLM基于上下文回答
        response = self.llm.chat(
            system="基于以下文档回答用户问题。如果文档中没有相关信息,说'抱歉,我没有找到相关信息'。",
            user=f"文档:\n{context}\n\n问题:{question}"
        )
        
        return response

# 你需要掌握的RAG知识:
# 1. 文档怎么分块(分块策略)
# 2. Embedding模型怎么选
# 3. 检索参数怎么调
# 4. Prompt怎么写才能减少幻觉
# 5. 怎么评估效果

4. 文档处理——最脏但最重要的活

# 企业给你的文档是什么样的?
# 
# ├── 100个Word文件(有些是doc不是docx)
# ├── 50个PDF(有些是扫描件)
# ├── 30个Excel(每个结构都不一样)
# ├── 20个PPT
# └── 10个手机拍的照片

# 你需要会用的工具:
from docx import Document           # Word文件
import pdfplumber                     # PDF(文本型)
from pdf2image import convert_from_path  # PDF(扫描件→图片)
import openpyxl                       # Excel
from pptx import Presentation         # PPT

# 扫描件PDF的处理(需要OCR)
# 方案1:Tesseract(免费,效果一般)
# 方案2:PaddleOCR(免费,中文效果好)
# 方案3:云端OCR API(付费,效果最好)

# 真实的文档处理代码示例
class DocumentProcessor:
    async def process_file(self, file_path: str) -> list:
        ext = file_path.split(".")[-1].lower()
        
        if ext == "pdf":
            return await self.process_pdf(file_path)
        elif ext in ("doc", "docx"):
            return await self.process_word(file_path)
        elif ext in ("xls", "xlsx"):
            return await self.process_excel(file_path)
        elif ext in ("ppt", "pptx"):
            return await self.process_ppt(file_path)
        elif ext in ("jpg", "png"):
            return await self.process_image(file_path)
        else:
            raise ValueError(f"不支持的文件格式:{ext}")

5. 部署——从你的电脑到客户的服务器

# 最简部署:Docker Compose
# 你不需要会Kubernetes。

# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8000:8000"
    environment:
      - LLM_API_KEY=${LLM_API_KEY}
      - DB_URL=postgresql://user:pass@db:5432/rag
    depends_on:
      - db
      - chromadb

  chromadb:
    image: chromadb/chroma:latest
    ports:
      - "8001:8000"
    volumes:
      - chroma_data:/chroma/chroma

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data

volumes:
  chroma_data:
  pg_data:

# 部署步骤:
# 1. ssh到客户服务器
# 2. 安装Docker
# 3. 复制代码
# 4. docker-compose up -d
# 5. 测试
# 6. 配置Nginx反向代理(如果需要域名访问)

技术学习路线图

第1个月:基础
├── Python异步编程
├── LLM API调用
├── ChromaDB基本使用
├── 写一个最简单的RAG Demo
└── 里程碑:能跑通一个问答Demo

第2个月:深入
├── 文档处理(PDF/Word/Excel)
├── 分块策略
├── Embedding模型选择
├── FastAPI构建服务
└── 里程碑:能处理真实文档并构建问答系统

第3个月:部署
├── Docker基础
├── Linux基本操作
├── PostgreSQL
├── 基本的日志和监控
└── 里程碑:能在云服务器上部署完整系统

第4个月:实战
├── 找一个真实场景练手(帮朋友/小公司免费做一个)
├── 完善你的部署脚本
├── 积累行业知识
├── 写技术博客
└── 里程碑:有一个可展示的案例

你不需要会的东西(别浪费时间)

❌ 不需要:
- 训练大模型(你调API就行)
- 写CUDA内核(你不做推理优化)
- 前沿论文复现(你做工程不做研究)
- Kubernetes(Docker Compose够用)
- 微服务架构(单体够用)
- 前端框架(除非客户要管理界面)

把时间花在:
- 文档处理(这是最脏最花时间但最有价值的技能)
- Prompt Engineering(直接决定AI回答质量)
- 客户沟通(技术只占50%,沟通占50%)

准备你的"武器库"

在接第一个单之前,你应该有:

1. 一个RAG模板项目(GitHub仓库)
   → 包含基本的文档处理、向量入库、搜索、LLM回答
   → 能在30分钟内跑起来一个Demo

2. 一套部署脚本
   → Docker Compose配置
   → 初始化脚本
   → 备份脚本

3. 一份评估工具
   → 自动测试检索质量
   → 自动测试回答质量
   → 生成评估报告

4. 一个Demo
   → 用公开数据做的RAG系统
   → 能给客户演示"这就是你们的系统大概的样子"

5. 一份方案模板
   → 项目概述
   → 技术方案
   → 时间计划
   → 报价

本章核心结论

  1. FDE的技术门槛不高——你需要的是工程能力(组装),不是研究能力(发明)。
  2. 核心技能:Python + LLM API + RAG + 文档处理 + Linux部署。
  3. 不需要会训练模型、不需要会K8s、不需要懂前沿论文。
  4. 准备一个可复用的模板项目是你的核心竞争力——每个新项目只是"换数据"。
  5. 学习路线4个月:基础→深入→部署→实战。

下一章:定价策略——你的技术值多少钱?怎么报价不亏也不吓跑客户?