您是否考虑从OpenAI的API迁移,但对其优势和劣势不确定?
OpenAI的API是开发人员在应用程序中使用大型语言模型(LLM)的流行选择。然而,值得探索像Llama2这样的替代选项,以获取更优越的解决方案。
Llama2是一个较新的LLM平台,相比OpenAI具有许多优势,包括更好的性能、更多的自定义选项、开源可用性和降低的隐私风险。
本文将讨论从OpenAI API迁移到自托管的Llama2 API的好处,并提供切换的指南。
为什么要从OpenAI API迁移到自托管的Llama2 API?
有几个原因使开发人员考虑从OpenAI API迁移到自托管的Llama2 API:
-
成本:在规模上,与OpenAI API相比,Llama2可以提供显著的成本节省。
-
控制:通过自托管,您可以完全控制LLM环境,包括硬件、软件和安全性。
-
自定义:您可以根据自己的需求自定义LLM环境,例如针对特定任务微调模型或使用不同的提示工程方法。
-
隐私:OpenAI收集了大量关于用户的数据,包括提示、输入和反馈。OpenAI还被知情共享其数据给第三方研究人员。通过自托管Llama2,您可以通过选择仅收集所需的数据并加密数据以防止未经授权访问来降低这些隐私风险。
迁移前需要准备什么
在迁移之前,确保获得Llama 2使用的API密钥。一种广泛采用的托管Llama 2和获取API密钥的方法是利用亚马逊网络服务(AWS)。
亚马逊网络服务
通过AWS,您将获得一个API URL。幸运的是,我们已经创建了一个全面的逐步指南,以帮助您实现这一目标。请参考下面的指南获取您的API URL,然后返回此处继续执行以下步骤。
如何从OpenAI迁移到Llama 2
在本指南中,我们将从依赖OpenAI API的聊天机器人迁移到使用Llama 2 API的聊天机器人。
这是我们将要迁移的OpenAI聊天机器人的代码:
import openai
openai.api_key = "OPENAI_API_KEY"
def chat(chat_history):
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=chat_history
)
return completion.choices[0]
chat_history = [{"role": "system", "content": "You are a helpful assistant."}]
while True:
print('\nPrompt: ')
query = input('')
if query == 'quit':
exit()
else:
chat_history.append({"role": "user", "content": query})
chat_message = chat(chat_history)
print(chat_message.message['content'])
chat_history.append(chat_message.message)
让我们开始吧!
1. 导入所需的库:
这行代码导入了requests
库,用于向外部API发出HTTP请求。
import requests
2. 定义聊天函数:
此函数接受一个参数chat_history
,它将是一个聊天消息列表,用于维护对话历史记录。
def chat(chat_history):
3. 设置API URL和JSON请求体:
此行定义了脚本将与之通信的亚马逊网络服务的外部API URL。
api_url = 'YOUR_API_URL_HERE'
接下来,json_body
是一个Python字典,将被转换为JSON并在POST请求中发送。它包括两个主要部分:
-
"inputs"
:包含chat_history
作为其唯一元素的列表。这是向API提供对话历史记录的地方。 -
"parameters"
:一个字典,指定聊天机器人的一些参数,包括要生成的最大新标记(单词)数(max_new_tokens
),控制随机性的top-p值(top_p
)和调整生成响应多样性的温度值(temperature
)。
json_body = {
"inputs": [chat_history],
"parameters": {"max_new_tokens":256, "top_p":0.9, "temperature":0.6}
}
4. 向API发出HTTP POST请求:
此行使用requests.post
方法向指定的API URL发送POST请求。它包括JSON请求体(json=json_body
)。
r = requests.post(api_url, json=json_body)
5. 提取聊天机器人的响应:
此行提取JSON响应中的第一项(index[0]
),然后检索与键'generation'
相关联的值。这是生成的聊天机器人响应。
return r.json()[0]['generation']
6. 初始化聊天历史记录:
chat_history
变量初始化为一个聊天消息,它是一个指定机器人角色和功能的系统消息。您可以根据需要更改机器人的角色和功能。
chat_history = [{"role": "system", "content": "You are a helpful assistant."}]
7. 进入循环以进行用户交互和收集用户输入:
第一行设置了一个循环以进行用户交互。接下来的几行提示用户输入,并将其输入存储在query
变量中。
while True:
print('\nPrompt: ')
query = input('')
此if
语句检查用户的输入是否等于"quit"。如果用户输入"quit",则调用exit()
函数,终止程序。
if query == 'quit':
exit()
8. 将用户输入添加到聊天历史记录中:
如果用户的输入不是"quit",则假定它是一条常规消息,因此将其作为用户消息以角色"用户"的形式附加到chat_history
列表中。这样可以跟踪对话历史记录。
else:
chat_history.append({"role": "user", "content": query})
9. 生成聊天机器人的响应:
使用更新后的chat_history
调用chat
函数,并将生成的聊天机器人响应存储在chat_message
变量中。
chat_message = chat(chat_history)
10. 打印聊天机器人的响应:
将生成的聊天机器人响应的内容打印到控制台,以便用户查看聊天机器人的回复。
print(chat_message['content'])
11. 将聊天机器人的响应添加到聊天历史记录中:
最后,将聊天机器人的响应添加到chat_history
列表中,确保对话历史记录更新为包含用户和聊天机器人消息。
chat_history.append(chat_message)
12. 最终结果
您现在已成功从OpenAI迁移到Llama 2!您的最终代码应该类似于以下内容。
import requests
def chat(chat_history):
api_url = 'YOUR_API_URL_HERE'
json_body = {
"inputs": [chat_history],
"parameters": {"max_new_tokens":256, "top_p":0.9, "temperature":0.6}
}
r = requests.post(api_url, json=json_body)
return r.json()[0]['generation']
chat_history = [{"role": "system", "content": "You are a helpful assistant."}]
while True:
print('\nPrompt: ')
query = input('')
if query == 'quit':
exit()
else:
chat_history.append({"role": "user", "content": query})
chat_message = chat(chat_history)
print(chat_message['content'])
chat_history.append(chat_message)
开始测试吧!
结论
自托管Llama 2是开发人员在应用程序中使用LLMs的可行选择。它相比使用OpenAI API具有许多优势,包括成本、更多的自定义选项、开源可用性和降低的隐私风险。
如果您正在考虑从OpenAI API迁移到自托管的Llama 2 API,我鼓励您仔细考虑所涉及的好处和风险。