在开始构建基于大语言模型的Agent之前,做好充分的前置准备工作至关重要。这就像盖房子前需要打好地基一样,前期准备工作的质量直接决定了后续开发的效率和系统的稳定性。
我见过太多开发者因为前期准备不足而踩坑:有的因为API密钥泄露导致账户被盗用,产生高额费用;有的因为环境配置不当导致代码在不同机器上运行结果不一致;还有的因为模型选择不当导致性能瓶颈。这些本可以避免的问题,往往源于对前期准备工作的忽视。
目前主流的大模型API平台包括阿里云百炼、OpenAI等。以阿里云百炼为例:
重要提示:API密钥一旦生成,平台通常只显示一次,请立即妥善保存。如果丢失,需要重新生成。
直接将API密钥硬编码在代码中是极其危险的做法。我曾经接手过一个项目,开发者将密钥提交到了GitHub公开仓库,导致密钥泄露,产生了数万元的API调用费用。
更安全的做法是使用环境变量:
bash复制# Linux/MacOS
export DASHSCOPE_API_KEY='your_api_key_here'
export OPENAI_API_KEY='your_api_key_here'
# Windows PowerShell
$env:DASHSCOPE_API_KEY = 'your_api_key_here'
$env:OPENAI_API_KEY = 'your_api_key_here'
对于需要长期保存的环境变量,可以通过系统设置配置:
使用清华镜像源可以显著提高国内下载速度:
bash复制pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple
我建议创建一个专门的虚拟环境来管理Agent开发所需的依赖:
bash复制python -m venv agent-env
source agent-env/bin/activate # Linux/MacOS
# 或者 agent-env\Scripts\activate # Windows
pip install openai python-dotenv
以下是一个完整的API调用示例:
python复制import os
from openai import OpenAI
# 从环境变量加载API密钥
client = OpenAI(
api_key=os.getenv('OPENAI_API_KEY'),
base_url='https://api.openai.com/v1'
)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个有帮助的助手"},
{"role": "user", "content": "你好!"}
]
)
print(response.choices[0].message.content)
虽然云API方便,但在以下场景本地部署更有优势:
Ollama是一个优秀的本地大模型管理工具,支持多种开源模型:
bash复制ollama pull llama2
bash复制ollama serve
调用本地模型只需稍作修改:
python复制client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # 本地部署通常不需要真实API密钥
)
response = client.chat.completions.create(
model="llama2", # 与下载的模型名称一致
messages=[...]
)
一个规范的Agent项目目录应该包含:
code复制/project-root
│── /venv # Python虚拟环境
│── /models # 本地模型文件
│── /tests # 测试代码
│── .env # 环境变量配置
│── .gitignore # 忽略敏感文件
│── requirements.txt # 依赖清单
│── agent.py # 主程序
│── README.md # 项目说明
code复制.env
*.key
/venv/
症状:收到401或403错误
症状:连接超时
症状:响应速度慢
症状:内存不足
在实际项目中,我们可能需要根据场景切换不同模型:
python复制def get_client(model_type):
if model_type == "cloud":
return OpenAI(api_key=os.getenv('OPENAI_API_KEY'))
elif model_type == "local":
return OpenAI(base_url="http://localhost:11434/v1")
else:
raise ValueError("不支持的模型类型")
# 使用示例
cloud_client = get_client("cloud")
local_client = get_client("local")
网络请求应该添加合理的超时和重试逻辑:
python复制from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def safe_completion(client, messages):
try:
return client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
timeout=10 # 10秒超时
)
except Exception as e:
print(f"请求失败: {str(e)}")
raise
在实际开发中,我发现做好这些前期准备工作可以节省后期大量的调试时间。特别是在团队协作项目中,规范的环境配置和安全的密钥管理更是必不可少。