搭建个人专属的API中转站,解决本地OpenAI接口调用困扰

今天仅仅只是站在开发者学习交流的角度来介绍一下,我们在日常开发基于LLM的AI应用时遇到的各种瓶颈,毕竟开发出一个优质的应用,舒适的环境和体验还是比较重要的。话不多说,进入正题。

一、搭建OpenAI中转站

如何搭建个人专属的API中转站,这里就不过多赘述了,各位可以移步下面的地址进行查阅:

https://github.com/x-dr/chatgptProxyAPI/blob/main/docs/cloudflare_proxy_pages.md

部署完成后就可以通过你自己的域名来代替 OpenAI 的 API 地址了。比如在本文的例子中,想要请求 ChatGPT 的 API ,即是把官方 API 地址 https://api.openai.com/v1/chat/completions 换为我自己的域名 https://openai-proxy-api.pages.dev/api/v1/chat/completions ,其他参数均参照官方示例即可。

由于 Cloudflare 有每天免费 10 万次的请求额度,所以轻度使用基本是零成本的。

二、本地开发环境配置

2.1、基于 LangChain 开发

2.1.1、安装必要的依赖

!pip install openai langchain
!pip install python-dotenv

2.1.2、新建 .env 文件

OPENAI_API_BASE=your-openai-proxy-url
OPENAI_API_KEY=your-openai-api-key

2.1.3、方式一:通过在 .env 文件中设置 OPENAI_API_BASE 环境变量

LangChain 的源码 openai.py 文件中,可以找到 ChatOpenAI 模型实例里定义了 validateenvironment 函数用于从字典或者环境变量中加载 OPENAIAPI_BASE 的值。

 

我们只需要在 .env 配置 OPENAIAPIBASE 即可正常调用OpenAI API接口。

import os
from dotenv import load_dotenv
from langchain.schema import HumanMessage
from langchain.chat_models import ChatOpenAI# 加载.env文件中的环境变量
load_dotenv()# 创建OpenAI实例
llm = ChatOpenAI(model_name="gpt-3.5-turbo-0613",max_tokens=1024,verbose=True)
result = llm([HumanMessage(content="根据目前的就业形势,选什么专业比较稳妥?")])
print(result.content)# 输出模型的参数信息可以看到已成功加载环境变量中OPENAI_API_BASE的值
print(llm.json)

输出结果:

LLM是法学硕士(Master of Laws)的缩写。它是一个专业学位,主要面向已经获得法学学士学位或者相关学科学士学位的学生。LLM的学位课程通常涵盖法学的各个领域,如国际法、商法、民法、刑法等。这个学位旨在深入研究法学领域的专业知识和技能,提供更高水平的法律教育和培训。LLM学位在提升法律职业发展、进入法律界的国际化环境、深化法学研究等方面具有重要作用。
<bound method BaseModel.json of ChatOpenAI(cache=None, verbose=True, callbacks=None, callback_manager=None, tags=None, client=<class 'openai.api_resources.chat_completion.ChatCompletion'>, model_name='gpt-3.5-turbo-0613', temperature=0.7, model_kwargs={}, openai_api_key='xxxxxxxxxx', openai_api_base='https://your-proxy-domain/api/v1', openai_organization='', openai_proxy='', request_timeout=None, max_retries=6, streaming=False, n=1, max_tokens=1024)>

2.1.4、方式二:在初始化 ChatOpenAI 模型时指定 openai_api_base 参数

从 LangChain 的源码 openai.py 文件中,可以找到 ChatOpenAI 模型实例中又个 openaiapibase 参数可以设置URL前缀。

我们只需要在实例化 ChatOpenAI 的时候传入 openaiapibase 参数即可正常调用OpenAI API接口。

import os
from dotenv import load_dotenv
from langchain.schema import HumanMessage
from langchain.chat_models import ChatOpenAI# 加载.env文件中的环境变量
load_dotenv()# 创建OpenAI实例
llm = ChatOpenAI(model_name="gpt-3.5-turbo-0613",max_tokens=1024,verbose=True,openai_api_base=os.getenv("OPENAI_API_BASE"))
result = llm([HumanMessage(content="什么是LLM?")])
print(result.content)

相比较第一种方式来说,配置环境变量属于全局生效,项目中所有OpenAI请求都会统一走代理转发,第二种就是局部针对部分有需要的请求走代理了,按需选择即可。

2.2、基于OpenAI原生API开发

2.2.1、基于Python SDK开发

OpenAI Python SDK 源码包中,init.py 文件中明确定义了从环境变量中加载 OPENAPIBASE 属性,所以在调用官方SDK时,跟2.1.3节一样,只需要在 .env 文件中配置 OPENAPIBASE 即可。

下面的代码演示了直接通过OpenAI原生Python SDK调用GPT模型。 

import os
import openai
from dotenv import load_dotenv# 加载.env文件中的环境变量
load_dotenv()openai.api_key = os.getenv("OPENAI_API_KEY")
openai.api_base = os.getenv("OPENAI_API_BASE")completion = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613", messages=[{"role": "user", "content": "请介绍下Google的PaLM模型!"}])
print(completion.choices[0].message.content)

2.2.2、基于HTTP请求转发

在部署完 API 网关后,可以直接在 Shell 中通过直接通过 curl 调用 OpenAI 接口。替换其中代理地址和 OPENAIAPIKEY

curl --location 'https://openai-proxy-api.pages.dev/api/v1/chat/completions' \
--header 'Authorization: Bearer sk-xxxxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data '{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "介绍下Cohere!"}]}'

输出结果:

也可以不走Python SDK直接调用API请求,只需要替换API_BASE即可,以下代码为Python发送Http请求调用GPT的示例。

import requestsurl = "https://openai.1rmb.tk/v1/chat/completions"
api_key = 'sk-xxxxxxxxxxxxxxxxxxxx'headers = {'Authorization': f'Bearer {api_key}','Content-Type': 'application/json'
}payload = {"model": "gpt-3.5-turbo","messages": [{"role": "user","content": "对于向量数据库,Chroma和Pinecone的区别是什么?"}]
}try:response = requests.post(url, headers=headers, json=payload)response.raise_for_status() # 抛出异常,如果响应码不是200data = response.json()print(data)
except requests.exceptions.RequestException as e:print(f"请求错误: {e}")

输出结果:

Jupyter Notebook 的完整代码

https://github.com/Crossme0809/langchain-tutorials/blob/main/LangChainWithOpenAIProxyInvoke.ipynb

三、总结

今天介绍了如何在本地环境中使用 LangChain 调用 OpenAI 接口。首先,我们需要搭建个人专属的 OpenAI 中转站。接下来,我们就基于 LangChain 开发和基于 OpenAI 原生 API 开发两种模式的环境及代码进行了介绍。

四、资源推荐

  • OpenAI中文文档:https://openai.xiniushu.com/

  • OpenAI中文文档:https://www.openaidoc.com.cn/

  • LangChain中文文档教程:https://www.langchain.asia/

  • OpenAI在线接口调试平台:https://openai.apifox.cn/

  • Pinecone向量库中文文档:https://www.pinecone-io.com/

  • Milvus向量库中文文档https://www.milvus-io.com/overview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62727.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哈佛医学院退出US News排名,此前已有耶鲁哈佛等顶尖法学院「退群」

詹士 发自 凹非寺量子位 | 公众号 QbitAI 哈佛医学院也宣布退出U.S. News排名了&#xff01; 在最新发布的声明中&#xff0c;学院院长对外表示&#xff0c;他们将不再向评选机构USNWR提交数据&#xff0c;以支持他们“最佳医学院”的调研排名。 事实上&#xff0c;哈佛医学院在…

港联证券|科技股热度扩散 6G概念受追捧

昨日&#xff0c;科技股热度继续分散&#xff0c;6G概念股高开高走。截至收盘&#xff0c;Choice的6G概念指数全体大涨3.64%。A股方面&#xff0c;信科移动20%起伏涨停&#xff0c;股价创前史新高&#xff1b;本川智能上涨近15%&#xff0c;中兴通讯、创远信科、金信诺等涨超4%…

chatgpt赋能python:Python主窗口名字怎么修改?

Python主窗口名字怎么修改&#xff1f; Python是一种解释型的编程语言&#xff0c;广泛应用于Web开发、数据科学、人工智能等领域。在Python编写的GUI程序中&#xff0c;窗口名字是非常重要的一个元素&#xff0c;因为它可以直观地让用户知道当前的应用程序是什么。在这篇文章…

HTTP劫持是什么?如何防止网站被劫持呢?

HTTP劫持&#xff08;HTTP hijacking&#xff09;是一种网络攻击技术&#xff0c;攻击者通过各种手段截取用户的HTTP请求或响应&#xff0c;篡改其内容或重定向到恶意服务器&#xff0c;从而实施恶意活动。这种攻击可能导致用户信息泄露、身份盗窃、篡改网页内容或植入恶意代码…

前端如何破解 CRUD 的循环

据说&#xff0c;西西弗斯是一个非常聪明的国王&#xff0c;但他也非常自负和狂妄。他甚至敢欺骗神灵&#xff0c;并把死者带回人间。为此&#xff0c;他被宙斯&#xff08;Zeus&#xff09;惩罚&#xff0c;被迫每天推着一块巨石上山&#xff0c;但在接近山顶时&#xff0c;巨…

IDEA技巧汇总:这30个强大的功能,总有一个你能用上!

程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 6 分钟。 来自&#xff1a;blog.csdn.net/qq_36268103/article/details/109216520 查看代码历史版本调整idea的虚拟内存&#xff1a;idea设置成eclipse的快捷键设置提示词忽略大小写关闭代码检查设置文档…

ChatGPT | 修改RetrievalQA推荐答案的数量

知识库经常遇到一个问题会在一个文件的多处或者多个文件出现&#xff0c;这时候如果只回答一个结果就欠佳&#xff0c;最理想的做法是模仿推荐功能&#xff0c;把合适的多个答案及其出处汇总给用户。 如图&#xff0c;一个接口文档里面提到多处“http请求URL”&#xff1a; 使…

chatgpt赋能python:Python数据分析:如何输出图表

Python数据分析&#xff1a;如何输出图表 作为一名有10年python编程经验的工程师&#xff0c;我认为要想进行数据分析&#xff0c;可视化是非常重要的一个环节。Python作为一门强大的语言&#xff0c;除了进行数据处理、文本处理等编程任务&#xff0c;也可以进行数据可视化。…

集装箱港口布局

集装箱港口布局 根据不同港口的地理位置特征&#xff0c;集装箱码头相应的布局特点也会稍有不同&#xff0c;集装箱港口作业区一般由以下几部分构成&#xff1a;泊位、码头前沿、堆场、维修车间、控制塔等。图2-1&#xff0c;2-2是一个比较常见的港口作业区布局图。 图2-1集装…

中国港口年鉴(2000-2020年)

1、数据来源&#xff1a;自身 2、时间跨度&#xff1a;2000-2020年&#xff08;部分年份为nh格式&#xff09; 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 《中国港口年鉴》版,全面准确地记述和反映了中国大陆江、海、河港口上年度在深化改革、调整结构、整合资…

全球10大智慧港口介绍

智慧港口&#xff0c;包括数字化和利益相关者深切关注的港口&#xff0c;正在改变海运和航运业的未来。商业活动不断变化&#xff0c;人工智慧、物联网、大数据、区块链和 5G 等智慧技术正在推动全球港口创新。 为了举例说明是什么让港口变得「聪明」&#xff0c;我们决定寻找…

一些关于船舶撞桥的数据

根据各种有关资料文献的介绍, 船撞桥事故在世界各地一直在不断地发生, 船撞桥事故的频率远比我们想象的更经常。由船撞桥事故所导致的人员伤亡、财产损失以及环境破坏是惊人的。很多船撞桥事故轻则损失数万元, 重则人员伤亡、损失以数百万、数千万甚至数十亿美元计, 大量的间接…

造船厂事故/风险(背景+官方统计数据)

造船厂事故/风险&#xff08;背景官方统计数据&#xff09; 船厂工地常见事故船厂事故:发人深省的伤害统计船厂工地常见的风险有哪些? 造船业是周期性的、资本密集型的行业。更严格的环境法规于2020年初生效&#xff0c;引发了对抑制船舶废气硫排放技术的需求。与此同时&#…

【大数据】 全球LNG船、LPG船、油轮、集装箱船航行轨迹统计

2018对全球航运业来说是极不平凡的一年&#xff0c;从年初桑吉轮的燃爆沉没&#xff0c;到中美来回拉锯&#xff1b;从首艘无人船试航成功&#xff0c;到限硫令的生效实施&#xff0c;这一年的航运有喜悦也有哀愁。船队在线 HiFleet 推出了2018年度数据报告&#xff0c;用最全面…

三万字长文让你彻底掌握 FastAPI

楔子 随着 Python 的发展&#xff0c;与协程相关的 Web 框架也层出不穷&#xff0c;其中最受欢迎的莫过于 FastAPI。相比其它的协程框架&#xff0c;FastAPI 要更加的成熟&#xff0c;社区也更加的活跃。 那么 FastAPI 都有哪些特点呢&#xff1f; 快速&#xff1a;拥有非常高的…

马云回国/ 文心一言员工跳槽工资翻倍/ 马斯克退出OpenAI内幕曝光…今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是3月27日&#xff0c;再上五天班就跟三月say byebye。 今日科技圈还有有哪些新鲜事儿&#xff0c;一起来看。 马云回国 近日有网友在杭州文一路隧道中目击阿里巴巴集团创始人马云 《科创板日报》根据科创板日…

2021高考会同三中成绩查询,会同三中:高三班主任任劳任怨为学生护航

和老师合个影 2019届高考&#xff0c;会同三中高三12位班主任任劳任怨&#xff0c;做学生的护航者。 可爱的老师们 高209班班主任杨荣汉老师常驻学校&#xff0c;家只是他晚上休息的地方。他把自己的时间都交给了学生&#xff1a;或辅导学生&#xff0c;或研究试题&#xff0c;…

湖南邵东三中2021年高考成绩查询,励精图治、奋勇争先——邵东三中2020年学考再传喜报...

近日&#xff0c;邵东三中继今年高考喜获丰收后再次传来令人振奋的喜报。在全省高中学业水平考试中&#xff0c;学校高二年级1461人参考&#xff0c;1460人合格&#xff0c;仅一人未合格&#xff0c;合格率达99.93%。成绩列省市前茅&#xff0c;打破了学校历年学考记录&#xf…

HTML: 网页摇奖机(抽号机)

HTML: 网页摇奖机&#xff08;抽号机&#xff09; 背景一、需求分析二、网页设计1、界面设计a. 取色b.标题和背景c.按钮与输入框 2、随机数逻辑设计3、完整代码 三、效果展示总结 背景 前两天回了趟高中&#xff0c;当年的英语老师正在教高三。高三嘛&#xff0c;过来人都懂&a…

2021郴州市三中喜报高考成绩查询,2021郴州高中排名一览表

2021郴州高中排名一览表2021-04-19 14:50:17文/董玉莹 学校是影响学生成绩很重要的因素&#xff0c;好的学校能够给学生提供优良的学习环境。本文整理了郴州高中排名&#xff0c;来看看都有哪些重点高中。 高中排名 1、临武县第一中学 2、湖南省资兴市立中学 3、宜章县第一中学…