工具 API¶
EvoToolkit 的实用工具和辅助功能,包括 LLM API 客户端。
HttpsApi¶
class HttpsApi:
def __init__(
self,
api_url: str,
key: str,
model: str,
timeout: int = 300,
temperature: float = 1.0
)
def get_response(self, messages: list) -> tuple[str, dict]
HttpsApi 类提供了一个简单的 HTTP(S) 客户端,用于与 LLM API(OpenAI、Claude 或兼容服务)交互。
用途:
- 连接到 LLM 聊天 API
- 发送提示并接收响应
- 自动处理身份验证和重试
使用示例:
from evotoolkit.tools import HttpsApi
import os
# 创建 LLM API 客户端
llm_api = HttpsApi(
api_url="https://api.openai.com/v1/chat/completions",
key=os.environ["OPENAI_API_KEY"],
model="gpt-4o",
temperature=1.0
)
# 发送提示
messages = [{"role": "user", "content": "写一个计算斐波那契数列的 Python 函数"}]
response, usage = llm_api.get_response(messages)
print(response)
print(f"使用的 token 数: {usage['total_tokens']}")
与 evotoolkit.solve() 一起使用:
import evotoolkit
from evotoolkit.task.python_task import ScientificRegressionTask, EvoEngineerPythonInterface
from evotoolkit.tools import HttpsApi
# 配置 LLM
llm_api = HttpsApi(
api_url="https://api.openai.com/v1/chat/completions",
key=os.environ["OPENAI_API_KEY"],
model="gpt-4o"
)
# 创建任务和接口
task = ScientificRegressionTask(dataset_name="bactgrow")
interface = EvoEngineerPythonInterface(task)
# 使用 LLM 求解
result = evotoolkit.solve(
interface=interface,
output_path='./results',
running_llm=llm_api,
max_generations=5
)
构造函数¶
参数:
- api_url (
str): API 端点 URL,支持多种格式: - 完整 URL:
"https://api.openai.com/v1/chat/completions" -
仅主机名:
"api.openai.com"(默认为/v1/chat/completions) -
key (
str): 用于身份验证的 API 密钥 - OpenAI:
"sk-..." - Anthropic Claude: 您的 API 密钥
-
自定义提供商: 查看提供商文档
-
model (
str): 要使用的模型名称 - OpenAI:
"gpt-4o","gpt-4o-mini","gpt-3.5-turbo" - Anthropic:
"claude-3-5-sonnet-20241022","claude-3-opus-20240229" - Deepseek:
"deepseek-chat" -
或任何兼容模型
-
embed_url (
str, 可选): 嵌入 API URL - 完整 URL:
"https://api.openai.com/v1/embeddings" - 仅路径:
"/v1/embeddings" -
如果未提供则自动推断
-
timeout (
int, 默认=60): 请求超时时间(秒) -
****kwargs**: 附加参数
temperature(float, 默认=1.0): 采样温度 (0.0 到 2.0)- 其他提供商特定参数
示例:
# OpenAI
llm_api = HttpsApi(
api_url="https://api.openai.com/v1/chat/completions",
key="sk-...",
model="gpt-4o"
)
# Anthropic Claude (通过代理)
llm_api = HttpsApi(
api_url="https://your-proxy.com/v1/chat/completions",
key="sk-ant-...",
model="claude-3-5-sonnet-20241022"
)
# 自定义提供商 (仅主机名)
llm_api = HttpsApi(
api_url="api.custom-provider.com",
key="your-key",
model="custom-model"
)
# 自定义温度
llm_api = HttpsApi(
api_url="https://api.openai.com/v1/chat/completions",
key="sk-...",
model="gpt-4o",
temperature=0.7
)
方法¶
get_response()¶
向 LLM 发送提示并获取响应。
参数:
- prompt (
str或list[dict]): 要发送的提示 - 字符串: 简单文本提示
- 字典列表: OpenAI 格式的聊天消息
返回:
tuple[str, dict]: 一个元组(response_text, usage_info)response_text(str): 模型的响应usage_info(dict): token 使用统计
用法:
# 简单字符串提示
response, usage = llm_api.get_response("写一个 hello world 函数")
# 聊天消息
messages = [
{"role": "system", "content": "你是一个有帮助的助手"},
{"role": "user", "content": "解释 Python 装饰器"}
]
response, usage = llm_api.get_response(messages)
print(response)
print(f"Tokens: {usage['total_tokens']}")
错误处理:
- 失败时自动重试(最多 10 次)
- 超过最大重试次数后抛出
RuntimeError
get_embedding()¶
获取文本字符串的嵌入向量。
参数:
- text (
str): 要嵌入的输入文本
返回:
list[float]: 嵌入向量
用法:
注意: 需要配置 embed_url(对于常见提供商会自动推断)。
环境变量¶
OPENAI_API_KEY¶
存储您的 OpenAI API 密钥:
然后在 Python 中使用:
import os
from evotoolkit.tools import HttpsApi
llm_api = HttpsApi(
api_url="https://api.openai.com/v1/chat/completions",
key=os.environ["OPENAI_API_KEY"],
model="gpt-4o"
)
LLM_API_URL / LLM_API_KEY¶
对于自定义配置:
export LLM_API_URL="https://your-api.com/v1/chat/completions"
export LLM_API_KEY="your-key"
export LLM_MODEL="gpt-4o"
最佳实践¶
应该做的 ✅¶
- 将 API 密钥存储在环境变量中(永远不要硬编码)
- 为您的用例使用适当的超时值
- 优雅地处理速率限制
- 监控 token 使用以控制成本
- 使用较低温度 (0.0-0.5) 获得确定性输出
- 使用较高温度 (0.7-1.5) 获得创造性输出
不应该做的 ❌¶
- 不要将 API 密钥提交到 git
- 不要使用过低的超时(< 30秒)
- 不要忽略 token 使用指标
- 不要在生产代码中禁用重试
提供商特定说明¶
OpenAI¶
llm_api = HttpsApi(
api_url="https://api.openai.com/v1/chat/completions",
key=os.environ["OPENAI_API_KEY"],
model="gpt-4o"
)
- 模型:
gpt-4o,gpt-4o-mini,gpt-3.5-turbo - 速率限制: 查看您的账户等级
- 文档: https://platform.openai.com/docs/api-reference
Anthropic Claude¶
需要兼容的代理或 API 网关:
llm_api = HttpsApi(
api_url="https://your-gateway.com/v1/chat/completions",
key=os.environ["ANTHROPIC_API_KEY"],
model="claude-3-5-sonnet-20241022"
)
- 模型:
claude-3-5-sonnet-20241022,claude-3-opus-20240229 - 注意: 需要 OpenAI 兼容的 API 格式
- 文档: https://docs.anthropic.com/
自定义提供商¶
许多 LLM 提供商提供 OpenAI 兼容的 API:
llm_api = HttpsApi(
api_url="api.custom-provider.com", # 仅主机名
key="your-key",
model="provider-model-name"
)
查看提供商文档了解: - API 端点 URL - 身份验证方法 - 支持的模型 - 请求/响应格式
故障排除¶
连接错误¶
问题: RuntimeError: Model Response Error!
解决方案: - 检查 API URL 是否正确 - 验证 API 密钥是否有效 - 确保网络连接 - 检查提供商状态页面
超时错误¶
问题: 请求超时
解决方案:
- 增加 timeout 参数
- 检查网络延迟
- 尝试较小的模型
- 降低提示复杂度
速率限制¶
问题: 请求过多
解决方案: - 在请求之间添加延迟 - 减少并行度 - 升级 API 等级 - 实现指数退避