ChatGPT 和 Claude3 调用 API key 时代理问题总结

ChatGPT 和 Claude3 调用 API key 时代理问题总结

1、情况1

当打开代理的情况下,请求 API key

**问题描述:**httpcore.ConnectError: EOF occurred in violation of protocol (_ssl.c:1123)

问题截图:

image-20240313230227514

2、情况2

当关闭代理的时候(不用多说,肯定请求不到 key,但是上面的问题当时遇到的时候有一种方案就是关闭代理😅)
尝试之后情况如下:

问题描述: httpx.ConnectTimeout: timed out

问题截图:

image-20240313230708277

3、解决方法

下面给出最终的解决方法,网上参考的其他方法没有成功😵,在自己查看了部分底层的代码异常点,并结合 ChatGPT 给出的解决方式之后,找到了如下的方法:

1、代码示例-ChatGPT 版本:
# coding=utf-8
import httpx
from openai import OpenAI

# 设置代理地址和端口
proxy_url = "http://127.0.0.1:7890"

# 创建一个 httpx 客户端,并设置代理 (注意这里 http: 和 https: 后面一定要有两个 “//”)
httpx_client = httpx.Client(proxies={"http://": proxy_url, "https://": proxy_url})

# 将 httpx 客户端传递给 OpenAI 客户端
openai_client = OpenAI(http_client=httpx_client)

def get_gpt_answer_with_key(user_prompt):
    """
    说明:通过 GPT key 调用 GPT 进行问答
    :param: user_prompt 提示词
    :return:
    """

    if user_prompt is None:
        print("请输入提示信息!")
        return

    response = openai_client.chat.completions.create(
        model="gpt-4-turbo-preview",
        messages=[
            {"role": "system", "content": "You are a helpful assistant designed to output JSON. And Answer with "
                                          "chinese."},
            {"role": "user", "content": user_prompt}
        ]
    )

    return response.choices[0].message.content

if __name__ == '__main__':
    prompt = str(input("请输入要提示的信息:"))
    print(get_gpt_answer_with_key(prompt))

测试案例截图:

image-20240313231453316

2、代码示例-Claude3 版本:
import anthropic

import httpx

# 设置代理地址和端口
proxy_url = "http://127.0.0.1:7890"

# 创建一个 httpx 客户端,并设置代理
httpx_client = httpx.Client(proxies={"http://": proxy_url, "https://": proxy_url})

client = anthropic.Anthropic(http_client=httpx_client)


def get_claude_answer_with_key(user_prompt):
    """
    说明:通过 Claude key 调用 Claude 进行问答
    :param: user_prompt 提示词
    :return:
    """

    if user_prompt is None:
        print("请输入提示信息!")
        return

    message = client.messages.create(
        model="claude-3-opus-20240229",
        max_tokens=1024,
        messages=[
            {"role": "system", "content": "You are a helpful assistant designed to output JSON. And Answer with "
                                          "chinese."},
            {"role": "user", "content": user_prompt}
        ]
    )

    print(message.content)


if __name__ == '__main__':
    prompt = str(input("请输入要提示的信息:"))
    print(get_claude_answer_with_key(prompt))

测试案例截图:

image-20240313232332920

答案文本:

[ContentBlock(text='B+树是一种常用的数据结构,特别适用于文件系统和数据库系统中的索引。下面我来介绍一下B+树的基本概念、原理和常见使用场景:\n\n1. 基本概念\nB+树是B树的一种变体。B+树中的节点可以分为内部节点和叶子节点两类。内部节点只存储索引键信息,不存储真实数据;叶子节点存储索引键信息和真实数据,并且叶子节点之间用指针相连形成一个有序链表。另外,B+树中每个节点能包含的索引键数量有一个范围[M/2, M],其中M为节点的度。\n\n2. 原理\nB+树通过"多叉平衡搜索树"的结构,实现了高效的插入、删除和查找操作。\n\n插入时,若叶子节点未满,可直接插入。若叶子节点已满,则分裂叶子节点,同时更新其父节点的索引键。这个过程可能会递归向上进行,直到根节点。\n\n删除时,删除目标索引键及其对应数据。若删除后节点填充度过低,则需要重新平衡,可能会引发节点的合并或重分配等操作。\n\n查找时,从根节点开始,根据索引键比较结果,确定下一步搜索的子树,直到找到目标叶子节点为止。B+树的所有叶子节点构成一个有序链表,故可以方便地支持范围查询。\n\n3. 使用场景\n- 数据库索引:如MySQL的InnoDB存储引擎就使用B+树实现索引,大大提高了数据检索效率。\n- 文件系统:如Linux的Ext3、Ext4等文件系统使用B+树组织目录和文件索引。\n- 内存数据缓存:如磁盘高速缓存,使用B+树组织索引block。\n\n总的来说,B+树凭借其优异的插入、删除和查找性能,成为众多存储系统和数据库系统首选的索引数据结构。特别是在大规模数据存储和查询方面,B+树展现出了其卓越的性能优势。', type='text')]

好了,这次分享就到此结束了,祝大家玩得愉快😉

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值