使用cloudflare实现访问LLM-API

一直在找调用第三方 LLM-API 的方法,看到有人用 cloudflare 实现,就尝试了一下,果然成功了。 突然发现,cloudflare 的功能真是个好东西,功能远超于本文所述。

1 相关网站

  • 中文官网 - https://www.cloudflare-cn.com/
  • 注册 cloudflare 用户 - 注册

2 创建 worker

图1  创建 worker - 1

图1 创建 worker - 1

图2  创建 worker - 2

图2 创建 worker - 2

下面的命名是自动生成的,您可以根据自己的需要随意命名。
图3  命名 worker 并发布

图3 命名 worker 并发布

图4  worker 发布成功!全球发布!!

图4 worker 发布成功!全球发布!!

访问:https://worker-cold-bar-b423.tanbushi.workers.dev。成功!

下面测试自定义域名,确保能成功访问LLM的API。点击需要设定自定义域名的 worker,见下图:
图5  修改 worker 的自定义域名 - 1

图5 修改 worker 的自定义域名 - 1

图6  修改 worker 的自定义域名 - 2

图6 修改 worker 的自定义域名 - 2

图7  修改 worker 的自定义域名 - 3

图7 修改 worker 的自定义域名 - 3

点击上图 Add Custom Domain 按钮后,进入“初始化中”的提示…
图8  自定义域名初始化中

图8 自定义域名初始化中

可能要几分钟后,变成绿色 active 就可以了
图9  自定义域名添加成功!

图9 自定义域名添加成功!

访问:https://worker-cold-bar-b423.airs.ltd ,成功!

3 编写 worker 代码,实现LLM的API调用

在 Github 上找到一个开源项目,https://github.com/ultrasev/llmproxy,感谢!

打开 /api/llm_api_proxy.js,复制该文件所有代码,覆盖 worker.js 文件后,点击右上角的 deploy 按钮发布。

图10  参考 api 代理的代码

图10 参考 api 代理的代码

提示,点击“保持并发布”
图11  保存并发布

图11 保存并发布

4 本地调用 LLMAPI 的代码

参考上述代码仓库里的 /tests/test_cf_worker.py 文件,在本地编辑 test_gemini.py ,测试 谷歌的 gemini 模型。gemini 每天10万token,测试完全够用了。

图12  参考调用 API 的 python 代码

图12 参考调用 API 的 python 代码

本地目录结构如下图:
图13  本地测试代码文件目录结构

图13 本地测试代码文件目录结构

dotenv.py 文件内容如下:

import os
# 定义一个函数,用于读取环境变量
def load_dotenv():
    os.environ.setdefault("GEMINI_API_KEY", "your-gemini-api-key")

test-gemini.py 文件内容如下:

import asyncio
import os
from openai import AsyncOpenAI
from dotenv import load_dotenv
load_dotenv() # 加载环境变量

# 生成请求的函数
async def make_request(api_key: str,
                       model: str,
                       supplier: str):
    BASE_URL = "https://worker-cold-bar-b423.airs.ltd/"
    client = AsyncOpenAI(base_url=BASE_URL, api_key=api_key)
    response = await client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": "你是tanbushi的分身。"},
            {"role": "user", "content": "你是谁?"}
        ],
        extra_headers={"supplier": supplier},
    )
    return response.choices[0].message.content

# 发起测试的函数
async def test():
    response =  await make_request(
        api_key=os.environ["GEMINI_API_KEY"],
        model="gemini-1.5-pro-latest",
        supplier="gemini"
    )
    print(response)

# 注意下面的调用方式,用 asyncio.run(test())
asyncio.run(test())

5 测试调用

在本地的命令行窗口或终端窗口,进入 test-gemini 目录,运行:

python test-gemini.py

得到回复如下:
图14  gemini 回复了!

图14 gemini 回复了!

成功!

扩展:您可以将上面用到的 gemini-api-key,在本地的python文件里,换成其他的 LLM-API-KEY,如:chatgpt、千问等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3—项目创建

背景 初次学习vue3,需要从项目创建开始。 步骤 打开cmd命令行,进入项目存放目录下,执行创建命令: npm create vuelatest 这一指令将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 …

通过Samba实现Windows和Linux之间进行共享文件

关于Samba 在嵌入式系统开发应用平台中,我们会常使用比如tftp、nfs和samba等服务器,来进行文件的传输,其中tftp和nfs是在嵌入式Linux开发环境中经常使用的传输工具,而samba则是Linux和Windows之间的文件传输工具。samba是模仿Wind…

第三篇、利用潜空间生成超稳定动画

1、使用temporal-kit,生成拼接的图片 sides填写3,Height Resolution要填写原视频高度 * sides ,这里也就是三倍 因为原视频动作很快,frames per keyframe填写了2 发现在temp1目录的Input目录下生成了 3* 3的拼接图片 2、到图生图界面&#…

【动态规划】路径问题

1.不同路径 不同路径 思路&#xff1a; 状态表示 状态转移方程 class Solution { public:int uniquePaths(int m, int n) {// 创建dp表// 初始化// 填表// 返回值vector<vector<int>> dp(m 1, vector<int>(n 1));dp[0][1] 1;for(int i 1; i < m; i…

认识ansible 了解常用模块

ansible是什么&#xff1f; Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。是自动化运维工具&#xff0…

好惨啊!科研路上的经验教训…

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

知识图谱基础

三元组的定义 定义&#xff1a;在知识图谱中&#xff0c;三元组是由三个元素组成的有序集合&#xff0c;分别是主体&#xff08;subject&#xff09;、谓词&#xff08;predicate&#xff09;和客体&#xff08;object&#xff09;。例如&#xff0c;“苹果是水果”的三元组可…

深入了解C/C++的内存区域划分

&#x1f525;个人主页&#xff1a;北辰水墨 &#x1f525;专栏&#xff1a;C学习仓 本节我们来讲解C/C的内存区域划分&#xff0c;文末会附加一道题目来检验成果&#xff08;有参考答案&#xff09; 一、大体有哪些区域&#xff1f;分别存放什么变量开辟的空间&#xff1f; …

ROS 2边学边练(43)-- 利用GTest写一个基本测试(C++)

前言 在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;gtest&#xff08;Google Test&#xff09;是一个广泛使用的C测试框架&#xff0c;用于编写和执行单元测试。这些测试可以验证ROS节点、服务和消息等的正确性和性能。 如果我们需要在写的包中添加测试&…

红黑树

一、红黑树用在哪里 HashMap。Linux 进程调度 CFS。Epoll 事件块的管理。Nginx Timer 事件管理。&#xff08;key&#xff0c;value&#xff09;的形式&#xff0c;并且中序遍历是顺序的&#xff0c;红黑树是二叉排序树。 二、红黑树性质 每个节点是红色或者黑色。根节点是黑…

Mybatis进阶3--注解开发

先看&#xff1a; Mybatis进阶1-CSDN博客 Mybatis进阶2-CSDN博客 mybatis注解开发 前置&#xff1a;不需要xxxMapper..xml文件&#xff08;映射文件&#xff09; 在核心配置文件中&#xff1a;<mappers>标签只能使用&#xff1a;<package name"扫描的包&quo…

open-webui+ollama本地部署Llama3

前言 Meta Llama 3 是由 Meta 公司发布的下一代大型语言模型&#xff0c;拥有 80 亿和 700 亿参数两种版本&#xff0c;号称是最强大的开源语言模型。它在多个基准测试中超越了谷歌的 Gemma 7B 和 Mistral 7B Instruct 模型。 安装 1.gpt4all https://github.com/nomic-ai/…

记一次动态规划的采坑之旅, 741摘樱桃 https://leetcode.cn/problems/cherry-pickup/description/

首次看题目时&#xff0c;发现是困难。立马想到了&#xff0c;动态规划。 再看题目&#xff0c; 摘樱桃&#xff0c;还要返回摘两次&#xff0c;求摘最多的樱桃。 大脑第一反应就是&#xff1a; 先使用动态规划&#xff0c;找到 0 0 到 n-1 n-1处走过的最大樱桃&#xff0c; 并…

【码银送书第十九期】《图算法:行业应用与实践》

作者&#xff1a;嬴图团队 01 前言 在当今工业领域&#xff0c;图思维方式与图数据技术的应用日益广泛&#xff0c;成为图数据探索、挖掘与应用的坚实基础。本文旨在分享嬴图团队在算法实践应用中的宝贵经验与深刻思考&#xff0c;不仅促进业界爱好者之间的交流&#xff0c;…

AI不只是技术,更是一种思维方式

一、AI思维 1.个人&#xff1a;提升自己的综合能力&#xff0c;成为一名懂技术、懂设计、懂硬件、懂市场运营等知识的综合型人才 2.数据&#xff1a;从全局视角看数据流向&#xff0c;挖掘数据价值 3.产品&#xff1a;运用新技术&#xff0c;发掘新需求点&#xff0c;探索产…

AI智体的分级:从基于规则到基于LLM

摘要&#xff1a; AI智体被定义为感知环境、做出决策和采取行动的人工实体。受SAE&#xff08;汽车工程师学会&#xff09;自动驾驶6个级别的启发&#xff0c;AI智体也根据效用和强度进行分类&#xff0c;分为以下几个级别&#xff1a;L0——无AI&#xff0c;有工具&#xff0…

马常旭新歌《如愿》:音乐界的“旭日”再现

在这个春暖花开的季节&#xff0c;音乐界又迎来了一股清新的“旭日”气息。是的&#xff0c;就在2024年4月17日&#xff0c;马常旭的新歌《如愿》&#xff08;旭日版&#xff09;在网易云音乐上线了&#xff01;一年的等待&#xff0c;终于迎来了他的音乐回归&#xff0c;给我们…

C语言知识点补充——ASCLL码表

1、ASCLL码表 ASCII码表&#xff08;American Standard Code for Information Interchange&#xff09;是一种用于将字符编码为数字的标准。它定义了128个字符的编码方式&#xff0c;包括数字、字母、标点符号和控制字符等。每个字符都对应一个唯一的7位或8位二进制数 2、Ascl…

贪吃蛇项目(小白保姆级教程)

游戏介绍 游戏背景&#xff1a; 贪吃蛇游戏是经典的游戏项目之一&#xff0c;也是很简单的小游戏 实现背景&#xff1a; 这里我们是基于32位的Win32_API进行实现的 需要的知识点&#xff1a; C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32_API等 适合人群&a…

java中的字符串(String)常量池理解

下面创建String对象的方式一样吗&#xff1f; 上述程序创建对象类似&#xff0c;为什么s1和s2引用对象一样&#xff0c;但是s3和s4不一样呢&#xff1f; 在java程序中&#xff0c;许多基本类型的字面常量会经常用到&#xff0c;例如2,3.11&#xff0c;“hyy”等。为了提升程序…