CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
AI 工程师进阶/课时/模型 API 实战
RawBlame
课时目录12 节

AI 工程师进阶

  1. 01AI 工程师地图
  2. 02LLM 原理与 Token
  3. 03提示词工程
  4. 04嵌入与向量库
  5. 05RAG 管线
  6. 06Agent 架构
  7. 07MCP 与工具集成
  8. 08模型 API 实战
  9. 09安全与伦理
  10. 10评测与可观测
  11. 11部署与成本
  12. 12综合练习

模型 API 实战

OpenAI、Gemini、Hugging Face Inference。

30 分钟

模型 API 实战

生产里 LLM 多通过 HTTP API 调用:鉴权、流式、重试、计费都落在你的客户端封装。本课覆盖 OpenAI、Gemini、Hugging Face Inference 的常见模式——对应 ai-engineer 的 model APIs 区域。

学习目标

  • 统一封装 chat/completions、embeddings、streaming
  • 处理 rate limit、超时、幂等与错误分类
  • 不在仓库提交 API key;对齐团队密钥管理

通用客户端骨架

class LlmClient:
    def __init__(self, base_url, api_key_env="OPENAI_API_KEY"):
        self.key = os.environ[api_key_env]  # 勿硬编码
        self.base_url = base_url

    def chat(self, messages, model, temperature=0.2, tools=None, stream=False):
        payload = {"model": model, "messages": messages, "temperature": temperature}
        if tools:
            payload["tools"] = tools
        return self._post("/v1/chat/completions", payload, stream=stream)

    def embed(self, texts: list[str], model: str):
        return self._post("/v1/embeddings", {"model": model, "input": texts})

密钥走环境变量或密钥管理服务;PR 与日志 脱敏——ai-engineering-essentials 红线。

厂商差异速览

厂商典型用途注意
OpenAIGPT 系列、embedding、function callingorg 级 quota;response_format JSON
Gemini长上下文、多模态safety settings;JSON mode
Hugging Face Inference开源模型托管、embed冷启动;模型 id 与 task 匹配

抽象层建议:messages + tools + stream 统一接口,厂商适配在 thin adapter。

Streaming

for chunk in client.chat(messages, model="gpt-4o", stream=True):
    delta = chunk.choices[0].delta.content
    if delta:
        yield delta  # SSE 推前端;Agent 可边读边展示

流式改善 首 token 延迟;仍需在服务端聚合完整输出做日志与评测。中断连接时要 cancel 上游(若 API 支持)。

重试与限流

RETRYABLE = {429, 500, 502, 503}

def with_retry(fn, max_attempts=3):
    for i in range(max_attempts):
        try:
            return fn()
        except ApiError as e:
            if e.status not in RETRYABLE or i == max_attempts - 1:
                raise
            time.sleep(2 ** i + random.random())

429 尊重 Retry-After;embedding 批处理注意 batch size 上限。成本监控见 aen-deploy。

练习

  • 写 adapter:chat() 同时支持 OpenAI 与 Gemini 消息格式差异
  • 实现 streaming 聚合:最终字符串 + token 用量
  • 列出日志中必须脱敏的字段(key、email、prompt 中的 PII)

小结

API 层要统一、可观测、密钥外置;streaming 与重试是生产标配。 下一课安全:注入、偏见与内容审核。

加载本节练习…
← 上一课MCP 与工具集成下一课 →安全与伦理