No history yet

AI自动化与Web3开发环境

密钥与环境变量管理

在与AI和区块链服务交互时,你的API密钥就是身份凭证。直接将密钥写入代码,如同将家门钥匙贴在门上一样危险。一旦代码被分享或上传到公共仓库(如GitHub),密钥就可能被恶意行为者获取,导致不必要的开销甚至服务滥用。

为了安全地管理这些敏感信息,我们使用环境变量。在本地开发中,最直接的方法是使用.env文件。这个文件位于项目根目录,专门用来存放密钥和配置信息,并且必须被添加到.gitignore文件中,以防止被提交到版本控制系统。

# .env 文件示例
# 将此文件添加到 .gitignore 中!
OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxx"
INFURA_MAINNET_URL="https://mainnet.infura.io/v3/your-infura-project-id"

要在Python脚本中访问这些变量,我们需要一个库来读取.env文件。python-dotenv是一个轻量级的选择,它能自动将文件中的键值对加载到操作系统的环境变量中。

首先,通过pip安装它:

pip install python-dotenv

然后在代码的开头加载这些变量。这样,你就可以通过os.environ.get()方法在程序的任何地方安全地调用它们了。

import os
from dotenv import load_dotenv

# 从.env文件加载环境变量
load_dotenv()

# 安全地获取API密钥
openai_api_key = os.environ.get("OPENAI_API_KEY")

# 检查密钥是否存在
if not openai_api_key:
    raise ValueError("OpenAI API key not found in .env file")

对于生产环境,应使用更专业的密钥管理服务,如AWS Secrets Manager或Google Secret Manager。这些服务为密钥提供了更高级别的加密、访问控制和轮换策略。

实战调用大语言模型

配置好环境后,我们就可以开始与大语言模型(LLM)进行交互了。每个模型提供商都有自己的Python软件开发工具包(SDK),它们封装了复杂的API请求,让调用变得简单。我们将以OpenAI和Anthropic为例。

首先,安装它们的Python库:

pip install openai anthropic

下面是一个调用OpenAI API的简单脚本。它会加载密钥,创建一个客户端实例,然后发送一个请求,让模型将一段非结构化的文本转换成结构化的JSON格式。这是构建自动化工作流的关键一步。

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

# 初始化OpenAI客户端
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

raw_data = "用户张三,邮箱是 zhangsan@email.com,订单号 #12345。"

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "system",
            "content": "你是一个数据提取助手。请将用户提供的文本转换为JSON格式。"
        },
        {
            "role": "user",
            "content": raw_data
        }
    ]
)

# 打印模型的结构化输出
print(response.choices[0].message.content)

调用Anthropic的Claude模型过程类似,只是SDK的用法略有不同。熟悉这种模式后,你会发现集成不同AI服务变得轻而易举。

import os
from dotenv import load_dotenv
import anthropic

load_dotenv()

# 初始化Anthropic客户端
client = anthropic.Anthropic(
    api_key=os.environ.get("ANTHROPIC_API_KEY"),
)

message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": "解释一下什么是AI Agent,用三句话概括。"
        }
    ]
)

print(message.content[0].text)

连接Web3世界

要与以太坊等区块链网络交互,我们需要一个“节点提供商”。你可以把节点看作是进入区块链网络的网关。Infura和Alchemy是两个主流的节点服务商,它们提供了可靠的API端点,免去了我们自己运行和维护一个全节点的麻烦。当然,对于有特殊需求的高级用户,也可以连接到本地运行的节点。

web3.py是Python生态中与以太坊交互的标准库。我们先安装它:

pip install web3

连接过程非常直接:将你的节点提供商URL(存放在.env文件中)传递给Web3的构造函数,然后检查连接状态。下面是一个连接到以太坊主网并获取最新区块号的例子。

import os
from dotenv import load_dotenv
from web3 import Web3

load_dotenv()

# 从环境变量获取Infura URL
infura_url = os.environ.get("INFURA_MAINNET_URL")

# 创建Web3实例
w3 = Web3(Web3.HTTPProvider(infura_url))

# 检查连接状态
if w3.is_connected():
    print("成功连接到以太坊主网!")
    # 获取最新的区块号
    latest_block = w3.eth.block_number
    print(f"最新区块号: {latest_block}")
else:
    print("连接失败。")

深入Layer 2网络

以太坊主网(Layer 1)有时会因拥堵而导致交易费用(Gas Fee)高昂。为了解决这个问题,Layer 2(L2)扩容方案应运而生。Arbitrum和Polygon等L2网络将大量交易在链下处理,然后将结果打包压缩后提交回主网,从而大幅降低了单笔交易的成本并提升了速度。

使用web3.py连接到L2网络的方法与连接主网完全相同,只需更换为对应L2网络的节点URL即可。

网络示例节点URL (RPC)
Arbitrum Onehttps://arb1.arbitrum.io/rpc
Polygon PoShttps://polygon-rpc.com
Optimismhttps://mainnet.optimism.io

例如,要查询Arbitrum网络上的最新区块,只需将infura_url替换成Arbitrum的RPC地址。理解这一点后,你就可以轻松地在不同区块链网络之间切换,为构建跨链应用打下基础。

Quiz Questions 1/5

为什么不应该将API密钥直接写入代码中?

Quiz Questions 2/5

在项目中使用.env文件来管理API密钥时,为了确保安全,最关键的一步是什么?

现在你已经掌握了连接AI和Web3服务的核心技术,并了解了如何搭建一个安全、高效的远程开发环境。这些是构建复杂AI Agent和自动化流程的基石。