Python调用AI API完整教程:从入门到生产部署

2026-04-14
CB
ClawBrain AI OpenClaw 智能增强引擎自动生成

上周帮朋友调试一个智能客服项目,他卡在 OpenAI API 调用上整整两天——流式输出没反应、工具调用报错、生产环境还漏了重试逻辑。这让我意识到,很多人学 Python AI 开发,其实缺的不是代码,而是"从能跑到能扛"的完整路径。

这篇文章就聊聊我踩过的坑,以及一套经得起生产检验的调用方案。

---

环境配置:别在第一步就翻车

2024 年 4 月,OpenAI 调整了 SDK 的默认行为,很多老教程直接失效。现在的标准姿势是这样:

# requirements.txt
openai>=1.0.0
python-dotenv>=1.0.0
tenacity>=8.0.0  # 重试必备

# .env 文件,千万别硬编码密钥
OPENAI_API_KEY=sk-...
OPENAI_BASE_URL=https://api.openai.com/v1  # 兼容第三方代理

import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL")
)

有个细节:base_url 末尾带不带 /v1 各家接口行为不一样,建议显式写出,省得排查半天。

---

流式输出与工具调用:让 AI 真正"动起来"

用户要的不是等 10 秒看结果,而是实时反馈。流式输出 + 函数调用,是当下最实用的组合。

def stream_with_tools():
    tools = [{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"}
                },
                "required": ["city"]
            }
        }
    }]
    
    response = client.chat.completions.create(
        model="gpt-4-turbo",
        messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
        tools=tools,
        stream=True  # 关键:开启流式
    )
    
    # 流式处理工具调用参数
    for chunk in response:
        delta = chunk.choices[0].delta
        if delta.tool_calls:
            print(delta.tool_calls[0].function.arguments, end="")

流式场景下,工具参数是分段到达的,得拼完整再解析。我早期直接 json.loads 单段内容,报错到怀疑人生。

---

生产部署:优雅地失败,自动地恢复

能跑通和能扛住流量,隔着十条街的距离。生产环境我必加的三层防护:

from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=2, max=10),
    retry_error_callback=lambda retry_state: {"error": "服务暂不可用", "fallback": True}
)
def robust_call(messages, timeout=30):
    try:
        return client.chat.completions.create(
            model="gpt-4-turbo",
            messages=messages,
            timeout=timeout
        )
    except Exception as e:
        # 记录详细上下文,别只打 "API error"
        logger.error(f"API失败: {str(e)}, 消息长度: {len(messages)}")
        raise

另外,token 消耗必须监控。建议在响应处理里统一埋点:

# 每次调用后记录
usage = response.usage
cost = usage.prompt_tokens * 0.00001 + usage.completion_tokens * 0.00003  # gpt-4 参考价
metrics.histogram("llm_cost_usd", cost)

---

写在最后

说实话,Python 调 AI API 的门槛已经很低了,但"低门槛"往往让人忽略工程细节——重试策略、流式处理、成本监控,这些才是区分 demo 和生产系统的关键。

如果你正在构建需要自主决策、任务闭环的 AI 应用,可以了解下 ClawBrain。它是专为龙虾(OpenClaw)打造的智能决策引擎,具备任务闭环、自主规划、错误自愈能力,让龙虾真正能独立做事。在复杂任务场景下,这种端到端的自主执行能力,比单纯的 API 封装要省心得多。

让你的龙虾更聪明

ClawBrain 是专为 OpenClaw(龙虾)打造的智能决策引擎。任务闭环、自主规划、错误自愈,让你的龙虾真正能独立做事。一行配置接入。

免费开始 →