别再为API整合头疼了!QuantumNous/new-api:一套代码搞定所有大模型调用的终极方案
为什么这个项目值得关注
在AI应用开发领域,你是否曾经遇到过这样的困境:项目需要同时调用多个大语言模型,却要在代码里写一堆重复的认证逻辑?或者切换不同的AI服务时,需要修改大量代码?今天要介绍的这个开源项目——QuantumNous/new-api,可能正是你在寻找的解决方案。
这个项目本质上是一个统一的大模型API管理平台,它的核心价值在于:
统一接口,简化调用复杂度
无论你想调用OpenAI的GPT系列、Anthropic的Claude、还是国内的通义千问、智谱AI,只需要在配置文件中定义好各个服务商的API密钥和端点,new-api就能为你提供一个统一的调用入口。这意味着你的应用代码只需要编写一次,就能轻松切换不同的AI模型服务商。
降低接入成本
传统的多服务商集成方式,每个服务都有自己独特的API格式、认证方式和错误处理逻辑。而new-api把这些差异全部封装起来,开发者只需要学习一种接口规范,就能玩转所有主流大模型。
灵活的配置管理
项目支持多种配置方式,包括环境变量、配置文件、甚至命令行参数。这种灵活性让你可以轻松实现本地开发环境和生产环境的切换,也方便在不同项目之间复用配置。
环境搭建:从零开始配置开发环境
系统要求
在开始之前,先确认你的开发环境满足以下要求:
- Python 3.8或更高版本
- pip包管理器
- Git版本控制工具
- 稳定的网络连接(用于访问各大AI服务商API)
安装步骤详解
第一步:克隆项目仓库
打开终端,执行以下命令将项目克隆到本地:
git clone https://github.com/QuantumNous/new-api.git
cd new-api
如果你不想使用git,也可以直接下载ZIP压缩包并解压。
第二步:创建虚拟环境(推荐)
为了避免依赖冲突,建议使用虚拟环境:
python -m venv venv
# Windows系统激活虚拟环境
venv\Scripts\activate
# macOS和Linux系统激活虚拟环境
source venv/bin/activate
激活成功后,你的终端提示符前面会显示(venv)标识。
第三步:安装依赖包
项目根目录下的requirements.txt文件包含了所有必需的依赖:
pip install -r requirements.txt
如果安装过程中遇到网络问题,可以尝试添加国内镜像源:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
第四步:配置文件初始化
项目通常会提供一个配置文件模板,你可以这样创建:
cp config.example.yaml config.yaml
接下来,打开config.yaml文件,配置你需要的AI服务商API密钥。
配置多个AI服务商
这是new-api最核心的功能之一。打开配置文件,你会看到类似以下的内容结构:
# AI服务商配置区域
providers:
# OpenAI配置
openai:
api_key: "sk-your-openai-key-here"
base_url: "https://api.openai.com/v1"
model: "gpt-4"
# Anthropic Claude配置
anthropic:
api_key: "sk-ant-your-claude-key-here"
base_url: "https://api.anthropic.com"
model: "claude-3-sonnet-20240229"
# 通义千问配置
qwen:
api_key: "your-qwen-api-key"
base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1"
model: "qwen-turbo"
# 智谱AI配置
zhipu:
api_key: "your-zhipu-api-key"
base_url: "https://open.bigmodel.cn/api/paas/v4"
model: "glm-4"
# 服务端口配置
server:
host: "0.0.0.0"
port: 8000
配置完成后,保存文件并退出编辑器。
核心功能详解:深入了解new-api的能力
统一请求转发
new-api的核心机制是一个轻量级的代理服务器。当你向new-api发送请求时,它会根据你指定的模型名称,自动将请求路由到对应的服务商。
这种设计的优势在于:你的应用代码不需要知道背后调用的是哪个AI服务商,只需要统一发送请求格式,new-api会负责处理后续的一切。
一个典型的请求流程是这样的:
你的应用
↓ 发送统一格式请求
new-api服务器
↓ 识别目标模型
↓ 转换请求格式
↓ 添加认证信息
对应的AI服务商API
↓ 返回响应
new-api服务器
↓ 统一响应格式
你的应用
多模型支持
项目支持的大模型范围非常广泛,涵盖了主流的国际和国内服务商:
国际主流模型
| 模型系列 | 支持的版本 | 特点 |
|---|---|---|
| OpenAI GPT | gpt-4, gpt-4-turbo, gpt-3.5-turbo | 通用能力强,生态完善 |
| Anthropic Claude | claude-3-opus, claude-3-sonnet, claude-3-haiku | 长文本理解优秀,安全性高 |
| Google Gemini | gemini-pro, gemini-pro-vision | 多模态能力强 |
| Meta Llama | llama-2, llama-3 | 开源可商用 |
国内优秀模型
| 模型系列 | 支持的版本 | 特点 |
|---|---|---|
| 通义千问 | qwen-turbo, qwen-plus, qwen-max | 阿里自研,中文优化 |
| 智谱GLM | glm-4, glm-3-turbo | 清华系,清华认知 |
| 讯飞星火 | spark-2.0, spark-3.0 | 语音交互优秀 |
| 百度文心 | ernie-4.0, ernie-3.5 | 百度知识增强 |
请求与响应格式化
不同AI服务商的API格式差异很大。new-api做了一个非常有价值的工作:它定义了一套自己的请求和响应格式,然后自动在各服务商格式之间做转换。
统一的请求格式示例:
{
"model": "gpt-4",
"messages": [
{
"role": "system",
"content": "你是一个专业的Python编程助手"
},
{
"role": "user",
"content": "请解释什么是装饰器模式"
}
],
"temperature": 0.7,
"max_tokens": 1000
}
这套格式模仿了OpenAI的设计风格,对于熟悉OpenAI API的开发者来说非常友好。同时,它也兼容Anthropic和其他服务商的特殊参数。
流式输出支持
对于需要实时展示AI生成内容的应用,流式输出(Streaming)是必不可少的功能。new-api完整支持这一特性:
import requests
import json
url = "http://localhost:8000/v1/chat/completions"
payload = {
"model": "gpt-4",
"messages": [{"role": "user", "content": "写一首关于春天的诗"}],
"stream": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(
url,
headers=headers,
json=payload,
stream=True
)
for line in response.iter_lines():
if line:
# 解析SSE格式的数据
decoded = line.decode('utf-8')
if decoded.startswith('data: '):
data = decoded[6:] # 去掉"data: "前缀
if data != '[DONE]':
chunk = json.loads(data)
content = chunk['choices'][0]['delta'].get('content', '')
print(content, end='', flush=True)
实战教程:一步步构建你的AI应用
实战一:构建一个命令行对话工具
让我们从最简单的应用开始,用new-api构建一个可以在终端里对话的AI助手。
第一步:创建项目结构
ai-chat/
├── main.py # 主程序入口
├── config.yaml # 配置文件
└── requirements.txt # 依赖列表
第二步:编写主程序
"""
AI命令行对话工具
支持切换不同的AI模型进行对话
"""
import requests
import json
import sys
# 配置信息
API_BASE = "http://localhost:8000/v1/chat/completions"
DEFAULT_MODEL = "gpt-4"
def chat(model, message, history=None):
"""
发送对话请求到new-api
参数:
model: 要使用的模型名称
message: 用户输入的消息
history: 对话历史记录列表
返回:
AI的回复内容
"""
# 构建消息历史
messages = []
# 添加系统提示
messages.append({
"role": "system",
"content": "你是一个有帮助的AI助手,请用简洁清晰的语言回答问题。"
})
# 添加历史对话
if history:
messages.extend(history)
# 添加当前用户消息
messages.append({
"role": "user",
"content": message
})
# 构造请求
payload = {
"model": model,
"messages": messages,
"temperature": 0.7,
"max_tokens": 2000
}
headers = {
"Content-Type": "application/json"
}
try:
response = requests.post(API_BASE, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
assistant_message = result['choices'][0]['message']['content']
return assistant_message, messages + [{"role": "assistant", "content": assistant_message}]
except requests.exceptions.Timeout:
return "请求超时,请检查网络连接或API配置。", history
except requests.exceptions.RequestException as e:
return f"请求失败: {str(e)}", history
except json.JSONDecodeError:
return "解析响应失败,请检查API返回格式。", history
def print_welcome():
"""打印欢迎信息"""
print("=" * 50)
print(" AI 命令行对话工具")
print("=" * 50)
print("支持的模型: gpt-4, claude-3-sonnet, qwen-plus, glm-4")
print("输入消息开始对话,输入 'quit' 退出")
print("输入 'model <名称>' 切换模型")
print("=" * 50)
print()
def main():
"""主程序入口"""
print_welcome()
current_model = DEFAULT_MODEL
history = None
while True:
try:
user_input = input(f"[{current_model}] 你: ").strip()
except KeyboardInterrupt:
print("\n\n再见!")
break
if not user_input:
continue
# 处理特殊命令
if user_input.lower() in ['quit', 'exit', 'q']:
print("再见!")
break
if user_input.lower().startswith('model '):
new_model = user_input[6:].strip()
current_model = new_model
print(f"已切换到模型: {current_model}")
continue
if user_input.lower() == 'clear':
history = None
print("对话历史已清除")
continue
# 发送对话请求
print(f"[{current_model}] AI: ", end='', flush=True)
response, history = chat(current_model, user_input, history)
print(response)
print()
if __name__ == "__main__":
main()
第三步:运行程序
首先确保new-api服务正在运行:
# 在项目目录下启动服务
python -m new_api.server
然后新开一个终端,运行我们的对话工具:
python main.py
你应该能看到类似这样的输出:
==================================================
AI 命令行对话工具
==================================================
支持的模型: gpt-4, claude-3-sonnet, qwen-plus, glm-4
输入消息开始对话,输入 'quit' 退出
输入 'model <名称>' 切换模型
==================================================
[gpt-4] 你: 你好,请用一句话介绍Python
[gpt-4] AI: Python是一门简洁优雅、极易上手的高级编程语言,特别适合初学者入门和快速开发各种应用。
[gpt-4] 你: model glm-4
已切换到模型: glm-4
[glm-4] 你: 解释一下什么是闭包
[glm-4] AI: 闭包(Closure)是Python中一种特殊的函数对象,它能够记住创建时的环境上下文...
实战二:构建支持多模态的聊天机器人
接下来,让我们构建一个更高级的应用——支持图片理解的多模态聊天机器人。这个机器人不仅能处理文字对话,还能分析用户上传的图片内容。
完整代码实现:
"""
多模态AI聊天机器人
支持文字和图片输入
"""
import base64
import requests
from pathlib import Path
from datetime import datetime
class MultimodalChatBot:
"""
多模态聊天机器人类
支持文字和图片的混合输入
"""
def __init__(self, api_base="http://localhost:8000/v1"):
self.api_base = api_base
self.conversation_history = [
{
"role": "system",
"content": """你是一个智能助手,能够分析用户发送的图片并回答相关问题。
请用详细但简洁的语言描述图片内容,并准确回答用户的问题。"""
}
]
def encode_image_to_base64(self, image_path):
"""
将图片文件转换为base64编码
参数:
image_path: 图片文件的路径
返回:
base64编码的字符串
"""
path = Path(image_path)
if not path.exists():
raise FileNotFoundError(f"图片文件不存在: {image_path}")
# 支持多种图片格式
allowed_formats = {'.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'}
if path.suffix.lower() not in allowed_formats:
raise ValueError(f"不支持的图片格式: {path.suffix}")
with open(path, 'rb') as image_file:
encoded = base64.b64encode(image_file.read()).decode('utf-8')
return encoded
def build_message_content(self, text, image_paths=None):
"""
构建消息内容,支持文字和图片的混合
参数:
text: 文字内容
image_paths: 图片路径列表(可选)
返回:
格式化的消息内容
"""
content = []
# 添加图片(如果有)
if image_paths:
for path in image_paths:
base64_image = self.encode_image_to_base64(path)
content.append({
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
})
# 添加文字
content.append({
"type": "text",
"text": text
})
return content
def chat(self, text, image_paths=None):
"""
发送对话请求
参数:
text: 用户输入的文字
image_paths: 要分析的图片路径列表
返回:
AI的回复
"""
# 构建当前用户消息
user_message = {
"role": "user",
"content": self.build_message_content(text, image_paths)
}
# 添加到对话历史
self.conversation_history.append(user_message)
# 构造API请求
payload = {
"model": "gpt-4-vision-preview", # 使用支持视觉的模型
"messages": self.conversation_history,
"max_tokens": 2000
}
headers = {
"Content-Type": "application/json"
}
try:
response = requests.post(
f"{self.api_base}/chat/completions",
headers=headers,
json=payload,
timeout=120
)
response.raise_for_status()
result = response.json()
assistant_message = result['choices'][0]['message']
# 将AI回复添加到历史
self.conversation_history.append(assistant_message)
return assistant_message['content']
except requests.exceptions.RequestException as e:
return f"请求出错: {str(e)}"
def clear_history(self):
"""清除对话历史"""
self.conversation_history = [
{
"role": "system",
"content": """你是一个智能助手,能够分析用户发送的图片并回答相关问题。
请用详细但简洁的语言描述图片内容,并准确回答用户的问题。"""
}
]
print("对话历史已清除")
def show_history(self):
"""显示对话历史"""
print("\n" + "=" * 60)
print("对话历史:")
print("=" * 60)
for i, msg in enumerate(self.conversation_history):
role = msg['role']
content = msg['content']
if isinstance(content, list):
# 多模态消息
texts = [c['text'] for c in content if c['type'] == 'text']
images = [c['image_url']['url'][:50] + '...'
for c in content if c['type'] == 'image_url']
content = texts[0] if texts else "[含图片]"
if images:
content += f"\n[含 {len(images)} 张图片]"
print(f"\n[{role.upper()}]")
print(content[:500] + "..." if len(str(content)) > 500 else content)
print("\n" + "=" * 60)
def interactive_demo():
"""
交互式演示函数
展示机器人的各种功能
"""
bot = MultimodalChatBot()
print("=" * 60)
print("多模态AI聊天机器人")
print("=" * 60)
print("功能说明:")
print(" - 直接输入文字进行对话")
print(" - 输入 'image:图片路径' 可以同时发送图片")
print(" - 输入 'clear' 清除对话历史")
print(" - 输入 'history' 查看对话历史")
print(" - 输入 'quit' 退出程序")
print("=" * 60)
print()
while True:
try:
user_input = input("你: ").strip()
except KeyboardInterrupt:
print("\n\n再见!")
break
if not user_input:
continue
# 处理特殊命令
if user_input.lower() in ['quit', 'exit']:
print("再见!")
break
if user_input.lower() == 'clear':
bot.clear_history()
continue
if user_input.lower() == 'history':
bot.show_history()
continue
# 解析图片指令
text = user_input
image_paths = None
if user_input.lower().startswith('image:'):
parts = user_input.split(':', 1)
image_paths = [parts[1].strip()]
text = "请分析这张图片"
# 发送请求并获取回复
print("AI: ", end='', flush=True)
response = bot.chat(text, image_paths)
print(response)
print()
def demo_with_sample_image():
"""
使用示例图片进行演示
这个函数展示了如何用代码直接调用图片分析功能
"""
bot = MultimodalChatBot()
# 假设我们有一张图片
sample_image = "sample_image.jpg"
# 检查图片是否存在
if not Path(sample_image).exists():
print(f"示例图片不存在: {sample_image}")
print("跳过图片分析演示")
return
questions = [
"这张图片里有什么?",
"描述一下图片的主要内容",
"图片中的文字内容是什么?"
]
for question in questions:
print(f"\n问题: {question}")
response = bot.chat(question, [sample_image])
print(f"回答: {response}")
if __name__ == "__main__":
import sys
if len(sys.argv) > 1 and sys.argv[1] == '--demo':
# 运行演示模式
demo_with_sample_image()
else:
# 运行交互模式
interactive_demo()
使用说明:
# 交互模式
python multimodal_bot.py
# 演示模式(需要准备示例图片)
python multimodal_bot.py --demo
实战三:构建企业级知识库问答系统
最后一个实战案例,我们来构建一个基于私有知识库的智能问答系统。这个系统可以读取本地文档,构建索引,然后根据用户问题检索相关内容进行回答。
"""
企业知识库问答系统
基于new-api构建,支持文档检索和智能问答
"""
import os
import json
import requests
from pathlib import Path
from typing import List, Dict, Tuple
from collections import defaultdict
class DocumentChunker:
"""
文档分块处理器
将长文档分割成适合处理的较小块
"""
def __init__(self, chunk_size=500, overlap=50):
"""
初始化分块器
参数:
chunk_size: 每个块的理想大小(字符数)
overlap: 相邻块之间的重叠字符数
"""
self.chunk_size = chunk_size
self.overlap = overlap
def chunk_text(self, text: str, source: str = "") -> List[Dict]:
"""
将文本分割成块
参数:
text: 要分割的文本
source: 文本来源(文件名或URL)
返回:
包含文本块的字典列表
"""
chunks = []
start = 0
text_length = len(text)
while start < text_length:
end = start + self.chunk_size
# 确保在句子边界分割
if end < text_length:
# 向前查找最近的句号或换行符
for i in range(end, max(start, end - 100), -1):
if text[i] in '。!?.!?\n':
end = i + 1
break
chunk_text = text[start:end].strip()
if chunk_text:
chunks.append({
"content": chunk_text,
"source": source,
"start_pos": start,
"end_pos": end
})
start = end - self.overlap
return chunks
def chunk_file(self, file_path: str) -> List[Dict]:
"""
读取文件并分块
参数:
file_path: 文件路径
返回:
分块后的字典列表
"""
path = Path(file_path)
if not path.exists():
raise FileNotFoundError(f"文件不存在: {file_path}")
# 根据文件类型选择读取方式
if path.suffix == '.txt':
with open(path, 'r', encoding='utf-8') as f:
text = f.read()
elif path.suffix == '.md':
with open(path, 'r', encoding='utf-8') as f:
text = f.read()
else:
raise ValueError(f"不支持的文件类型: {path.suffix}")
return self.chunk_text(text, source=str(path))
class SimpleVectorStore:
"""
简化的向量存储(基于关键词匹配)
注意:生产环境中建议使用真正的向量数据库
如Milvus、Pinecone或ChromaDB
"""
def __init__(self):
"""初始化向量存储"""
self.chunks = []
self.index = defaultdict(list)
def add_chunks(self, chunks: List[Dict]):
"""
添加文档块到存储
参数:
chunks: 文档块列表
"""
for i, chunk in enumerate(chunks):
# 为每个chunk分配ID
chunk['id'] = len(self.chunks) + i
self.chunks.append(chunk)
# 建立简单的关键词索引
words = self._extract_keywords(chunk['content'])
for word in words:
self.index[word].append(chunk['id'])
def _extract_keywords(self, text: str) -> List[str]:
"""
从文本中提取关键词
参数:
text: 输入文本
返回:
关键词列表
"""
# 简单的中英文分词
# 实际应用中应使用更专业的分词库
import re
# 提取英文单词
english_words = re.findall(r'[a-zA-Z]+', text.lower())
# 提取中文词语(简单实现)
chinese_chars = re.findall(r'[\u4e00-\u9fff]+', text)
# 过滤停用词
stop_words = {'的', '了', '在', '是', '我', '有', '和', '就', '不', '人',
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been'}
keywords = []
keywords.extend([w for w in english_words if len(w) > 2 and w not in stop_words])
keywords.extend([w for w in chinese_chars if len(w) > 1])
return keywords
def search(self, query: str, top_k: int = 5) -> List[Dict]:
"""
搜索最相关的文档块
参数:
query: 查询文本
top_k: 返回的结果数量
返回:
相关文档块列表
"""
# 计算每个chunk的得分
query_keywords = set(self._extract_keywords(query))
scores = defaultdict(float)
for keyword in query_keywords:
matching_ids = self.index.get(keyword, [])
for chunk_id in matching_ids:
# 精确匹配的关键词得分更高
if keyword in self.chunks[chunk_id]['content']:
scores[chunk_id] += 2.0
else:
scores[chunk_id] += 1.0
# 按得分排序
sorted_ids = sorted(scores.items(), key=lambda x: x[1], reverse=True)
# 返回top_k个结果
results = []
for chunk_id, score in sorted_ids[:top_k]:
result = self.chunks[chunk_id].copy()
result['score'] = score
results.append(result)
return results
class KnowledgeBaseQA:
"""
知识库问答系统
整合文档处理、检索和AI问答功能
"""
def __init__(self, api_base="http://localhost:8000/v1"):
"""
初始化问答系统
参数:
api_base: new-api服务地址
"""
self.api_base = api_base
self.chunker = DocumentChunker(chunk_size=500)
self.vector_store = SimpleVectorStore()
self.conversation_history = []
def load_documents(self, folder_path: str):
"""
加载文件夹中的所有文档
参数:
folder_path: 文档文件夹路径
"""
path = Path(folder_path)
if not path.exists():
raise FileNotFoundError(f"文件夹不存在: {folder_path}")
all_chunks = []
supported_formats = {'.txt', '.md'}
for file_path in path.rglob('*'):
if file_path.suffix in supported_formats:
try:
chunks = self.chunker.chunk_file(str(file_path))
all_chunks.extend(chunks)
print(f"已加载: {file_path} ({len(chunks)} 个块)")
except Exception as e:
print(f"加载失败 {file_path}: {e}")
if all_chunks:
self.vector_store.add_chunks(all_chunks)
print(f"\n总计加载了 {len(all_chunks)} 个文档块")
else:
print("未找到任何文档")
def answer(self, question: str, use_context: bool = True) -> str:
"""
基于知识库回答问题
参数:
question: 用户问题
use_context: 是否使用检索到的上下文
返回:
AI的回答
"""
# 检索相关文档
relevant_chunks = self.vector_store.search(question, top_k=3)
# 构建系统提示
if use_context and relevant_chunks:
context_text = "\n\n---\n\n".join([
f"[来源: {chunk['source']}]\n{chunk['content']}"
for chunk in relevant_chunks
])
system_prompt = f"""你是一个基于企业知识库的专业助手。
请根据以下参考资料回答用户的问题。如果参考资料中没有相关信息,
请说明你无法从知识库中找到答案。
参考资料:
{context_text}
回答要求:
1. 引用答案的来源
2. 用清晰简洁的语言表达
3. 如果资料不足,如实说明"""
else:
system_prompt = "你是一个专业的AI助手,请回答用户的问题。"
# 构建消息
messages = [
{"role": "system", "content": system_prompt}
]
# 添加对话历史(最近3轮)
messages.extend(self.conversation_history[-6:])
# 添加当前问题
messages.append({"role": "user", "content": question})
# 调用API
payload = {
"model": "gpt-4",
"messages": messages,
"temperature": 0.3, # 较低的temperature以获得更稳定的回答
"max_tokens": 1500
}
headers = {"Content-Type": "application/json"}
try:
response = requests.post(
f"{self.api_base}/chat/completions",
headers=headers,
json=payload,
timeout=60
)
response.raise_for_status()
result = response.json()
answer = result['choices'][0]['message']['content']
# 更新对话历史
self.conversation_history.append(
{"role": "user", "content": question}
)
self.conversation_history.append(
{"role": "assistant", "content": answer}
)
return answer, relevant_chunks
except requests.exceptions.RequestException as e:
return f"查询失败: {str(e)}", []
def interactive_mode(self):
"""
交互式问答模式
"""
print("=" * 60)
print("企业知识库问答系统")
print("=" * 60)
print("输入问题进行查询,输入 'quit' 退出")
print("=" * 60)
print()
while True:
try:
question = input("问题: ").strip()
except KeyboardInterrupt:
print("\n\n再见!")
break
if not question:
continue
if question.lower() in ['quit', 'exit']:
print("再见!")
break
print("\n正在查询知识库...")
answer, sources = self.answer(question)
print("\n回答:")
print("-" * 40)
print(answer)
if sources:
print("\n参考来源:")
for i, source in enumerate(sources, 1):
print(f" {i}. {source['source']}")
print()
def setup_demo_knowledge_base(qa_system):
"""
设置演示用的知识库
创建一些示例文档用于演示
"""
demo_folder = Path("demo_knowledge_base")
demo_folder.mkdir(exist_ok=True)
# 创建示例文档
documents = [
("公司介绍.md", """
# 公司介绍
我们是一家专注于人工智能技术的科技公司。
## 公司愿景
成为全球领先的AI解决方案提供商。
## 核心价值观
1. 创新:持续探索前沿技术
2. 客户至上:以为客户创造价值为核心
3. 开放协作:与合作伙伴共同成长
## 发展历程
- 2018年:公司成立
- 2020年:完成A轮融资
- 2022年:发布核心产品
- 2024年:用户突破100万
"""),
("产品手册.txt", """
产品技术规格
产品名称:AI智能助手
版本:3.0
主要功能:
1. 智能问答:支持多轮对话和上下文理解
2. 文档分析:支持PDF、Word等格式文档解析
3. 代码生成:支持多种编程语言的代码生成
4. 数据可视化:自动生成图表和数据报告
技术指标:
- 响应时间:< 1秒
- 准确率:95%以上
- 支持语言:中文、英文、日文等20种语言
联系方式:
电话:400-123-4567
邮箱:support@example.com
"""),
("常见问题.txt", """
常见问题解答
Q: 如何注册账号?
A: 访问官网www.example.com,点击注册按钮,填写手机号和验证码即可完成注册。
Q: 免费额度用完了怎么办?
A: 可以升级到付费套餐,也可以等待下个月额度重置。详细价格请查看官网定价页面。
Q: 支持私有化部署吗?
A: 支持。我们提供标准版和企业版两种部署方案,企业版支持完全私有化部署。
Q: API调用有频率限制吗?
A: 标准版每秒最多10次请求,企业版无限制。
Q: 如何获取技术支持?
A: 可以提交工单,也可以加入官方技术交流群。
""")
]
# 写入文档
for filename, content in documents:
file_path = demo_folder / filename
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content.strip())
print("演示知识库创建完成!")
print(f"文档位置: {demo_folder.absolute()}")
print()
# 加载文档
qa_system.load_documents(str(demo_folder))
if __name__ == "__main__":
import sys
qa = KnowledgeBaseQA()
if len(sys.argv) > 1 and sys.argv[1] == '--demo':
# 演示模式
setup_demo_knowledge_base(qa)
print("\n开始演示问答...\n")
demo_questions = [
"你们公司是做什么的?",
"产品支持哪些语言?",
"怎么注册账号?",
"支持私有化部署吗?"
]
for question in demo_questions:
print(f"问题: {question}")
answer, sources = qa.answer(question)
print(f"回答: {answer}")
if sources:
print(f"来源: {sources[0]['source']}")
print()
else:
# 交互模式
if Path("demo_knowledge_base").exists():
qa.load_documents("demo_knowledge_base")
else:
print("未找到知识库文件夹,正在创建演示数据...")
setup_demo_knowledge_base(qa)
qa.interactive_mode()
常见使用场景与案例
场景一:AI聚合应用
很多开发者希望为自己的应用接入多个AI模型,让用户自由选择。通过new-api,你可以轻松实现这个需求:
"""
AI模型选择器示例
用户可以自由切换不同的AI模型
"""
import requests
import json
API_BASE = "http://localhost:8000/v1"
# 可用的模型列表
AVAILABLE_MODELS = {
"1": ("gpt-4", "OpenAI GPT-4", "通用能力最强"),
"2": ("claude-3-sonnet", "Anthropic Claude-3", "长文本理解好"),
"3": ("qwen-plus", "通义千问Plus", "中文优化"),
"4": ("glm-4", "智谱GLM-4", "国产优秀模型"),
}
def display_model_menu():
"""显示模型选择菜单"""
print("\n可用的AI模型:")
print("-" * 40)
for key, (model_id, name, desc) in AVAILABLE_MODELS.items():
print(f" {key}. {name} - {desc}")
print("-" * 40)
def chat_with_model(model_id, message):
"""使用指定模型进行对话"""
payload = {
"model": model_id,
"messages": [{"role": "user", "content": message}],
"temperature": 0.7
}
response = requests.post(
f"{API_BASE}/chat/completions",
json=payload,
timeout=60
)
result = response.json()
return result['choices'][0]['message']['content']
def main():
"""主程序"""
current_model_key = "1"
print("=" * 50)
print("AI 模型选择器")
print("=" * 50)
while True:
display_model_menu()
print(f"\n当前模型: {AVAILABLE_MODELS[current_model_key][1]}")
print("\n输入数字切换模型,输入消息进行对话,输入 quit 退出\n")
user_input = input("请输入: ").strip()
if user_input.lower() in ['quit', 'exit']:
break
if user_input in AVAILABLE_MODELS:
current_model_key = user_input
print(f"已切换到: {AVAILABLE_MODELS[current_model_key][1]}")
continue
# 发送对话请求
model_id = AVAILABLE_MODELS[current_model_key][0]
print(f"\n正在使用 {AVAILABLE_MODELS[current_model_key][1]} 处理...")
try:
response = chat_with_model(model_id, user_input)
print(f"\n回复:\n{response}")
except Exception as e:
print(f"出错: {e}")
if __name__ == "__main__":
main()
场景二:模型对比测试
在开发AI应用时,你可能需要比较不同模型在特定任务上的表现。new-api让这件事变得非常简单:
"""
模型性能对比工具
对同一问题测试多个模型的回答
"""
import requests
import json
import time
from datetime import datetime
API_BASE = "http://localhost:8000/v1"
# 要对比的模型列表
MODELS_TO_TEST = [
"gpt-4",
"gpt-3.5-turbo",
"claude-3-sonnet",
"qwen-plus",
"glm-4"
]
def test_model(model_id, prompt, timeout=60):
"""
测试单个模型的响应
返回: (响应内容, 响应时间, 是否成功)
"""
payload = {
"model": model_id,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.7,
"max_tokens": 1000
}
start_time = time.time()
try:
response = requests.post(
f"{API_BASE}/chat/completions",
json=payload,
timeout=timeout
)
elapsed = time.time() - start_time
if response.status_code == 200:
result = response.json()
content = result['choices'][0]['message']['content']
return content, elapsed, True
else:
return f"错误码: {response.status_code}", elapsed, False
except Exception as e:
elapsed = time.time() - start_time
return f"异常: {str(e)}", elapsed, False
def compare_models(test_prompt, models=None):
"""
对比多个模型的响应
参数:
test_prompt: 测试用的提示词
models: 要测试的模型列表(None表示使用默认列表)
返回: 测试结果列表
"""
if models is None:
models = MODELS_TO_TEST
print("=" * 70)
print("模型对比测试")
print("=" * 70)
print(f"\n测试问题: {test_prompt}\n")
results = []
for model in models:
print(f"测试 {model}...", end=" ", flush=True)
response, elapsed, success = test_model(model, test_prompt)
results.append({
"model": model,
"response": response,
"elapsed": elapsed,
"success": success
})
status = "成功" if success else "失败"
print(f"[{status}] {elapsed:.2f}秒")
# 添加延迟避免API限流
time.sleep(1)
return results
def display_comparison(results):
"""显示对比结果"""
print("\n" + "=" * 70)
print("对比结果汇总")
print("=" * 70)
for i, result in enumerate(results, 1):
status = "✓" if result['success'] else "✗"
print(f"\n{status} 模型 {i}: {result['model']}")
print(f" 耗时: {result['elapsed']:.2f} 秒")
if result['success']:
# 显示响应的前500个字符
preview = result['response'][:500]
if len(result['response']) > 500:
preview += "..."
print(f" 响应:\n {preview}")
else:
print(f" 错误: {result['response']}")
def main():
"""主程序"""
print("模型性能对比工具")
print("输入要测试的问题,多个问题用|分隔")
print("输入 quit 退出\n")
test_prompts = [
"解释一下什么是机器学习",
"用Python写一个快速排序算法",
"推荐5本科适合初学者的编程书籍"
]
for prompt in test_prompts:
results = compare_models(prompt)
display_comparison(results)
print()
if __name__ == "__main__":
main()
场景三:批量内容生成
对于需要大量生成内容的场景(如内容营销、产品描述生成等),new-api可以显著提高效率:
"""
批量内容生成工具
使用AI批量生成各类内容
"""
import requests
import json
import time
from typing import List, Dict
from concurrent.futures import ThreadPoolExecutor, as_completed
API_BASE = "http://localhost:8000/v1"
class BatchContentGenerator:
"""
批量内容生成器
支持多种内容类型的批量生成
"""
def __init__(self, model="gpt-4"):
self.model = model
self.api_base = API_BASE
def generate_single(self, prompt: str, system_prompt: str = None) -> Dict:
"""
生成单个内容
参数:
prompt: 用户提示
system_prompt: 系统提示(可选)
返回:
包含成功状态和内容的字典
"""
messages = []
if system_prompt:
messages.append({"role": "system", "content": system_prompt})
messages.append({"role": "user", "content": prompt})
payload = {
"model": self.model,
"messages": messages,
"temperature": 0.8,
"max_tokens": 1500
}
try:
response = requests.post(
f"{self.api_base}/chat/completions",
json=payload,
timeout=120
)
response.raise_for_status()
result = response.json()
content = result['choices'][0]['message']['content']
return {
"success": True,
"content": content,
"prompt": prompt
}
except Exception as e:
return {
"success": False,
"error": str(e),
"prompt": prompt
}
def batch_generate(self, prompts: List[str],
system_prompt: str = None,
max_workers: int = 3,
delay: float = 1.0) -> List[Dict]:
"""
批量生成内容
参数:
prompts: 提示词列表
system_prompt: 系统提示
max_workers: 最大并发数
delay: 请求间隔(秒)
返回:
生成结果列表
"""
results = []
total = len(prompts)
print(f"开始批量生成,共 {total} 个任务")
print("-" * 40)
for i, prompt in enumerate(prompts, 1):
print(f"[{i}/{total}] 正在生成...", end=" ")
result = self.generate_single(prompt, system_prompt)
results.append(result)
if result['success']:
print("成功")
else:
print(f"失败: {result['error']}")
# 控制请求频率
if i < total:
time.sleep(delay)
# 统计结果
success_count = sum(1 for r in results if r['success'])
print("-" * 40)
print(f"完成!成功: {success_count}/{total}")
return results
def export_results(self, results: List[Dict], filename: str):
"""
导出结果到JSON文件
参数:
results: 生成结果
filename: 输出文件名
"""
with open(filename, 'w', encoding='utf-8') as f:
json.dump(results, f, ensure_ascii=False, indent=2)
print(f"结果已保存到: {filename}")
def demo_product_description_generator():
"""演示:产品描述生成器"""
generator = BatchContentGenerator(model="gpt-4")
# 产品信息列表
products = [
"智能手表 - 防水50米,支持心率监测,续航7天",
"无线耳机 - 主动降噪,30小时续航,支持无线充电",
"便携音箱 - 360度环绕音效,IPX7防水,12小时续航",
"机械键盘 - 青轴手感,RGB灯效,支持宏编程",
"蓝牙鼠标 - 静音设计,可调DPI,续航6个月"
]
# 生成提示词模板
def make_prompt(product_info):
return f"""请为以下产品生成一段营销文案,
要求:语言吸引人,突出产品卖点,适合电商平台展示,
字数控制在100-150字之间。
产品信息:{product_info}"""
prompts = [make_prompt(p) for p in products]
# 批量生成
results = generator.batch_generate(prompts, delay=2)
# 显示结果
print("\n生成的产品描述:")
print("=" * 60)
for i, result in enumerate(results, 1):
print(f"\n产品 {i}:")
print("-" * 40)
print(result.get('content', f"生成失败: {result.get('error')}"))
# 导出结果
generator.export_results(results, "product_descriptions.json")
def demo_article_outline_generator():
"""演示:文章大纲生成器"""
generator = BatchContentGenerator(model="gpt-4")
topics = [
"如何在2024年学习编程",
"远程工作的最佳实践",
"人工智能对就业市场的影响",
"可持续发展的生活方式",
"数字时代的隐私保护"
]
# 大纲生成提示模板
def make_prompt(topic):
return f"""请为以下主题生成一篇文章的大纲,
要求:结构清晰,包含引言、3-5个主要章节、结论,
每个章节包含2-3个子主题。
主题:{topic}"""
prompts = [make_prompt(t) for t in topics]
# 批量生成
results = generator.batch_generate(prompts, delay=2)
# 显示结果
print("\n生成的文章大纲:")
print("=" * 60)
for i, result in enumerate(results, 1):
print(f"\n{topics[i-1]}:")
print("-" * 40)
print(result.get('content', f"生成失败: {result.get('error')}"))
# 导出结果
generator.export_results(
[
{"topic": t, **r}
for t, r in zip(topics, results)
],
"article_outlines.json"
)
if __name__ == "__main__":
print("批量内容生成工具演示")
print("=" * 60)
print("\n1. 产品描述生成")
print("-" * 40)
demo_product_description_generator()
print("\n\n2. 文章大纲生成")
print("-" * 40)
demo_article_outline_generator()
使用技巧与最佳实践
技巧一:优化API调用成本
大模型API的调用成本是开发者需要重点关注的问题。以下是一些成本优化的建议:
"""
成本优化策略示例
展示如何有效控制API调用成本
"""
# 策略一:使用更便宜的模型处理简单任务
def route_request(question: str, use_cheap_model: bool = True):
"""
根据问题复杂度选择合适的模型
简单问题使用便宜的模型,复杂问题使用强大模型
"""
# 简单问题的特征
simple_patterns = [
"今天天气怎么样",
"帮我查一下",
"定义是什么",
"翻译成英文"
]
is_simple = any(pattern in question for pattern in simple_patterns)
if is_simple and use_cheap_model:
# 使用便宜的模型
model = "gpt-3.5-turbo"
else:
# 使用更强大的模型
model = "gpt-4"
return model
# 策略二:减少不必要的token
def optimize_prompt(original_prompt: str, max_length: int = 2000) -> str:
"""
优化提示词长度,避免发送过多token
"""
if len(original_prompt) <= max_length:
return original_prompt
# 截断到最大长度
return original_prompt[:max_length] + "\n\n[内容已截断]"
# 策略三:实现响应缓存
class ResponseCache:
"""
简单的响应缓存
减少重复请求
"""
def __init__(self):
self.cache = {}
self.hits = 0
self.misses = 0
def get_cache_key(self, model: str, prompt: str) -> str:
"""生成缓存键"""
return f"{model}:{hash(prompt)}"
def get(self, model: str, prompt: str):
"""获取缓存的响应"""
key = self.get_cache_key(model, prompt)
result = self.cache.get(key)
if result:
self.hits += 1
else:
self.misses += 1
return result
def set(self, model: str, prompt: str, response: str):
"""设置缓存"""
key = self.get_cache_key(model, prompt)
self.cache[key] = response
def stats(self):
"""返回缓存统计"""
total = self.hits + self.misses
hit_rate = (self.hits / total * 100) if total > 0 else 0
return {
"hits": self.hits,
"misses": self.misses,
"hit_rate": f"{hit_rate:.1f}%"
}
技巧二:提高响应质量的实践
"""
提高AI响应质量的技巧
"""
# 技巧一:清晰的系统提示
GOOD_SYSTEM_PROMPT = """
你是一位资深的Python软件工程师,有10年的开发经验。
回答规范:
1. 代码示例要完整可运行,包含必要的导入
2. 解释时使用简单的语言,避免过度技术化
3. 如果有多种解决方案,展示最优的那个
4. 重要概念用例子说明
格式规范:
- 使用Markdown格式化代码
- 适当使用emoji增加可读性
- 关键点用列表展示
"""
# 技巧二:few-shot示例
FEW_SHOT_EXAMPLES = """
用户:帮我写一个计算器
AI:当然可以!这是用Python写的简单计算器:
```python
def calculator():
print("简易计算器")
a = float(input("输入第一个数字: "))
op = input("选择运算(+-*/): ")
b = float(input("输入第二个数字: "))
if op == '+': result = a + b
elif op == '-': result = a - b
elif op == '*': result = a * b
elif op == '/': result = a / b if b != 0 else "错误"
print(f"结果: {result}")
calculator()
用户:写一个待办事项应用
“””
技巧三:结构化输出
def request_structured_output(api_base: str, prompt: str):
“””
请求结构化输出
让AI返回JSON格式的数据
“””
structured_prompt = f”””{prompt}
请以JSON格式返回结果,字段如下:
– summary: 简短摘要
– key_points: 关键点列表
– recommendation: 建议(如果有)
JSON格式:
{{
"summary": "...",
"key_points": ["...", "..."],
"recommendation": "..."
}}
```"""
payload = {
"model": "gpt-4",
"messages": [{"role": "user", "content": structured_prompt}],
"temperature": 0.3 # 降低随机性以获得更一致的JSON
}
response = requests.post(f"{api_base}/chat/completions", json=payload)
result = response.json()
content = result['choices'][0]['message']['content']
# 提取JSON部分
import re
json_match = re.search(r'\{.*\}', content, re.DOTALL)
if json_match:
return json.loads(json_match.group())
return {"error": "无法解析JSON响应"}
技巧三:错误处理与重试机制
"""
健壮的API调用实现
包含完整的错误处理和重试逻辑
"""
import time
import logging
from functools import wraps
from typing import Callable, Any
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def retry_on_failure(max_retries: int = 3, delay: float = 1.0):
"""
装饰器:失败时自动重试
参数:
max_retries: 最大重试次数
delay: 重试间隔(秒)
"""
def decorator(func: Callable) -> Callable:
@wraps(func)
def wrapper(*args, **kwargs) -> Any:
last_exception = None
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except requests.exceptions.Timeout:
last_exception = Exception("请求超时")
logger.warning(f"第 {attempt + 1} 次尝试超时")
except requests.exceptions.ConnectionError:
last_exception = Exception("连接错误")
logger.warning(f"第 {attempt + 1} 次尝试连接失败")
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
# 速率限制,等待更长时间
wait_time = delay * (2 ** attempt) * 5
logger.warning(f"速率限制,等待 {wait_time:.1f} 秒")
time.sleep(wait_time)
last_exception = e
elif e.response.status_code >= 500:
last_exception = e
logger.warning(f"服务器错误: {e.response.status_code}")
else:
raise
if attempt < max_retries - 1:
wait_time = delay * (2 ** attempt)
logger.info(f"等待 {wait_time:.1f} 秒后重试...")
time.sleep(wait_time)
logger.error(f"达到最大重试次数 {max_retries}")
raise last_exception
return wrapper
return decorator
class RobustAPIClient:
"""
健壮的API客户端
提供可靠的大模型调用接口
"""
def __init__(self, api_base: str, default_model: str = "gpt-4"):
self.api_base = api_base
self.default_model = default_model
@retry_on_failure(max_retries=3, delay=2.0)
def chat(self, prompt: str, model: str = None, **kwargs) -> str:
"""
发送聊天请求
参数:
prompt: 用户输入
model: 模型名称(可选)
**kwargs: 其他参数
返回:
AI的回复内容
"""
model = model or self.default_model
payload = {
"model": model,
"messages": [{"role": "user", "content": prompt}],
**kwargs
}
response = requests.post(
f"{self.api_base}/chat/completions",
json=payload,
timeout=120
)
# 检查HTTP错误
if response.status_code == 400:
error_detail = response.json().get('error', {})
raise ValueError(f"请求格式错误: {error_detail}")
response.raise_for_status()
result = response.json()
return result['choices'][0]['message']['content']
def health_check(self) -> bool:
"""
健康检查
返回:
API是否可用
"""
try:
# 发送一个简单的测试请求
test_payload = {
"model": self.default_model,
"messages": [{"role": "user", "content": "hi"}],
"max_tokens": 5
}
response = requests.post(
f"{self.api_base}/chat/completions",
json=test_payload,
timeout=10
)
return response.status_code == 200
except Exception:
return False
# 使用示例
if __name__ == "__main__":
client = RobustAPIClient(
api_base="http://localhost:8000/v1",
default_model="gpt-4"
)
# 健康检查
if client.health_check():
print("API连接正常")
try:
response = client.chat(
"用一句话介绍Python",
temperature=0.7
)
print(f"AI回复: {response}")
except Exception as e:
print(f"请求失败: {e}")
else:
print("API连接失败,请检查服务是否运行")
进阶配置与部署
部署为生产服务
对于生产环境,你需要考虑更多的配置选项:
# config.production.yaml
# 生产环境配置文件
server:
# 服务绑定地址
host: "0.0.0.0"
port: 8000
# 超时设置
timeout:
request: 120
keepalive: 300
# CORS设置(如果需要从浏览器调用)
cors:
enabled: true
allowed_origins:
- "https://your-domain.com"
- "http://localhost:3000"
allowed_methods:
- "GET"
- "POST"
allowed_headers:
- "*"
# 日志配置
logging:
level: "INFO"
format: "json"
output: "/var/log/new-api/app.log"
rotation:
max_size: "100MB"
backup_count: 10
# 速率限制
rate_limit:
enabled: true
default_rpm: 60 # 每分钟请求数
per_model:
gpt-4: 30
gpt-3.5-turbo: 120
# AI服务商配置
providers:
openai:
api_key: "${OPENAI_API_KEY}"
base_url: "https://api.openai.com/v1"
models:
- "gpt-4"
- "gpt-3.5-turbo"
anthropic:
api_key: "${ANTHROPIC_API_KEY}"
models:
- "claude-3-opus"
- "claude-3-sonnet"
qwen:
api_key: "${DASHSCOPE_API_KEY}"
base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1"
models:
- "qwen-turbo"
- "qwen-plus"
使用Docker部署
# Dockerfile
FROM python:3.11-slim
WORKDIR /app
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 创建非root用户
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser
# 暴露端口
EXPOSE 8000
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -c "import requests; requests.get('http://localhost:8000/health').raise_for_status()"
# 启动命令
CMD ["python", "-m", "new_api.server", "--config", "config.production.yaml"]
# docker-compose.yml
version: '3.8'
services:
new-api:
build: .
ports:
- "8000:8000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}
volumes:
- ./config.yaml:/app/config.yaml:ro
- ./logs:/app/logs
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# 可选:添加Nginx反向代理
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
depends_on:
- new-api
总结与资源链接
项目核心价值回顾
通过这篇教程,我们详细介绍了QuantumNous/new-api这个统一API管理平台的各种功能和用法。总结起来,这个项目为开发者提供了以下核心价值:
统一接口,降低学习成本
无论你需要调用多少个AI服务商,只需要学习一套API规范,大大减少了集成工作量和维护成本。
灵活配置,轻松切换
通过简单的配置文件修改,就能切换不同的AI模型或调整服务商,无需改动业务代码。
丰富的功能支持
从基础的对话功能到复杂的多模态交互、流式输出、批量处理,new-api都提供了良好的支持。
适合多种应用场景
无论是个人项目、企业应用还是大规模AI服务集成,new-api都能提供合适的解决方案。
延伸学习资源
如果你对AI API集成和大模型应用开发感兴趣,以下列资源可以帮助你进一步学习:
开源项目推荐
QuantumNous/new-api - 本教程的主角,统一API管理平台
langchain-ai/langchain - 强大的AI应用开发框架
hwchase17/langchain - LangChain中文社区版本
chroma-core/chroma - 向量数据库,用于AI知识库
学习资料推荐
- OpenAI官方API文档 – 学习GPT系列模型的最佳起点
- Anthropic Claude文档 – 了解Claude模型的特性和最佳实践
- 阿里云灵积API文档 – 通义千问等国产模型的使用指南
- 智谱AI开放平台 – GLM系列模型的技术文档
社区与交流
- GitHub Issues – 项目问题反馈和新功能建议
- Reddit r/MachineLearning – 机器学习最新进展
- AI开发者社区 – 中文AI开发者交流平台
下一步建议
对于想要深入学习AI应用开发的读者,建议从以下几个方向继续探索:
第一,扩展项目功能
可以在new-api基础上添加更多功能,比如支持更多的AI服务商、添加认证和权限管理、实现更复杂的负载均衡策略等。
第二,学习AI应用框架
建议学习LangChain、LlamaIndex等AI应用开发框架,它们与new-api配合使用可以实现更强大的功能。
第三,构建实际项目
最好的学习方式是实践。尝试用new-api构建一些实际的应用,比如AI助手、知识库问答系统、代码生成工具等。
第四,关注最新发展
AI领域发展迅速,新的模型和能力不断涌现。保持关注可以让你及时了解和掌握最新的技术。
希望这篇教程对你学习使用QuantumNous/new-api有所帮助。如果你有任何问题或建议,欢迎在评论区留言交流。祝你在AI应用开发的道路上越走越远!
评论区