Python AI 与 Web3 远程变现全攻略
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 One | https://arb1.arbitrum.io/rpc |
| Polygon PoS | https://polygon-rpc.com |
| Optimism | https://mainnet.optimism.io |
例如,要查询Arbitrum网络上的最新区块,只需将infura_url替换成Arbitrum的RPC地址。理解这一点后,你就可以轻松地在不同区块链网络之间切换,为构建跨链应用打下基础。
为什么不应该将API密钥直接写入代码中?
在项目中使用.env文件来管理API密钥时,为了确保安全,最关键的一步是什么?
现在你已经掌握了连接AI和Web3服务的核心技术,并了解了如何搭建一个安全、高效的远程开发环境。这些是构建复杂AI Agent和自动化流程的基石。