Appearance
Python 工程基础
这页不是 Python 语法入门。它默认你已经会写代码,只是还没用 Python 跑过 AI SDK,或者之前主要写前端、Node.js、Java、Go,现在需要先把 AI 应用开发里最常见的一套 Python 起步流程跑通。
目标很简单:本地有一个独立环境,API Key 不写进代码,能用脚本拿到模型回复,再把同样的能力包成一个最小 HTTP 接口。
建立 Python 虚拟环境
我更推荐用 uv,它安装依赖快,后面做项目时也方便管理环境。如果你暂时不想多装工具,用 Python 自带的 venv 也够用。
用 uv:
bash
uv venv
source .venv/bin/activate用内置 venv:
bash
python -m venv venv
source venv/bin/activateWindows PowerShell 对应是:
powershell
.\venv\Scripts\Activate.ps1确认当前环境已经切换成功:
bash
python --version
which python如果 which python 指向项目目录里的 .venv 或 venv,说明后面的依赖会装在这个项目环境里,不会污染系统 Python。
安装依赖
先装最小依赖:
bash
pip install openai fastapi uvicorn python-dotenv如果你想把依赖固定下来,可以新建 requirements.txt:
txt
openai
fastapi
uvicorn
python-dotenv以后换一台机器时,直接执行:
bash
pip install -r requirements.txt这里先不用 LangChain。刚开始学习 AI 应用开发时,最好先看清楚“你的代码如何直接调用模型 API”,等这个闭环稳定了,再去理解框架帮你封装了什么。
配置 API Key
在项目根目录新建 .env:
txt
OPENAI_API_KEY=sk-your-api-key.env 不应该提交到 Git。它放的是本地密钥,仓库里通常只保留 .env.example 这种示例文件。
读取环境变量时,用 python-dotenv 把 .env 加载进当前进程,再从 os.environ 里取值:
python
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("请先在 .env 中配置 OPENAI_API_KEY")如果你用的是兼容 OpenAI SDK 的其他服务,通常还会有 base_url 之类的配置。先别急着抽象,等你确实接了第二个模型服务再整理配置层。
第一个 API 调用
新建 chat_once.py:
python
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("请先在 .env 中配置 OPENAI_API_KEY")
model = "gpt-4o-mini" # 可以替换成任何兼容当前 API 的模型名
client = OpenAI(api_key=api_key)
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "用一句话解释什么是 RAG"}],
)
print(response.choices[0].message.content)运行:
bash
python chat_once.py如果能看到模型回复,说明最小调用链已经通了:本地 Python 代码读取 API Key,发起 HTTP 请求,拿到模型返回。
第一个流式调用
非流式调用会等完整回复生成完再一次性返回。聊天产品里更常见的是流式输出:模型生成一点,你的程序就先拿到一点。
新建 chat_stream.py:
python
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("请先在 .env 中配置 OPENAI_API_KEY")
model = "gpt-4o-mini" # 可以替换成任何兼容当前 API 的模型名
client = OpenAI(api_key=api_key)
stream = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "给我一个学习 Tool Calling 的小练习"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print()这个例子只是在终端里逐段打印。真正接到前端时,后端通常会把这些片段转成 SSE 格式,再让浏览器逐段消费。后面可以继续看 流式输出与 SSE。
用 FastAPI 封装接口
脚本能跑通之后,就可以把模型调用包成一个最小 API。新建 main.py:
python
import os
from dotenv import load_dotenv
from fastapi import FastAPI
from openai import OpenAI
from pydantic import BaseModel
load_dotenv()
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("请先在 .env 中配置 OPENAI_API_KEY")
model = "gpt-4o-mini" # 可以替换成任何兼容当前 API 的模型名
client = OpenAI(api_key=api_key)
app = FastAPI()
class ChatRequest(BaseModel):
message: str
@app.post("/chat")
def chat(request: ChatRequest):
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": request.message}],
)
return {"reply": response.choices[0].message.content}这个接口只处理单轮对话,没有会话历史,也没有错误重试。它的价值是帮你看清楚最小后端结构:请求进来,校验字段,调用模型,返回结果。
本地验证
启动服务:
bash
uvicorn main:app --reload再开一个终端,用 curl 调用:
bash
curl -X POST http://127.0.0.1:8000/chat \
-H "Content-Type: application/json" \
-d '{"message":"给我一个适合新手的 RAG 项目点子"}'你应该会看到类似这样的 JSON:
json
{
"reply": "可以做一个个人知识库问答应用..."
}到这里,第一条 AI 应用开发链路已经跑通。下一步先把 Prompt 写稳,再进入结构化输出和工具调用:Prompt 工程。