你有没有想过,如果有一个专属的 AI 助手,能帮你读文件、搜网页、跑代码,而且完全由你控制?
不需要订阅任何服务,不用把数据交给别人。自己写一个,成本不到每月 5 块钱。
下面就是完整的搭建步骤。跟着做,半小时就能跑起来。
一、你需要准备什么
- 一台电脑(Mac/Windows/Linux 都行)
- Python 3.10+
- 一个 OpenAI API Key(注册送 $5 额度)
- 基础 Python 知识(会写 if/for 就行)
二、项目结构
先建好目录:
personal-ai-assistant/
├── main.py # 主程序入口
├── tools.py # 工具函数
├── config.py # 配置文件
└── requirements.txt # 依赖包
三、安装依赖
pip install openai python-dotenv requests beautifulsoup4
这些包的作用:
openai:调用 GPT APIpython-dotenv:管理 API Key,不写死在代码里requests+beautifulsoup4:实现联网搜索功能
四、核心代码
1. 配置文件 config.py
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
MODEL = "gpt-4o-mini" # 便宜又快,适合日常使用
MAX_TOKENS = 2000
TEMPERATURE = 0.7
gpt-4o-mini 是 2026 年性价比最高的模型。速度快,价格便宜(约 $0.15/百万 token),效果够用。
2. 工具函数 tools.py
这是助手的"手和脚"。它让 AI 不只是聊天,还能真正做事。
import subprocess
import requests
from bs4 import BeautifulSoup
import json
def run_code(code: str, language: str = "python") -> str:
"""执行代码并返回结果"""
try:
result = subprocess.run(
["python3", "-c", code],
capture_output=True,
text=True,
timeout=30
)
return result.stdout or result.stderr
except subprocess.TimeoutExpired:
return "错误:代码执行超时(超过30秒)"
except Exception as e:
return f"错误:{str(e)}"
def web_search(query: str, max_results: int = 5) -> list:
"""简单的网页搜索功能"""
url = f"https://html.duckduckgo.com/html/?q={requests.utils.quote(query)}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
results = []
for a in soup.select("a.result__a")[:max_results]:
title = a.text
link = a["href"]
results.append({"title": title, "link": link})
return results
def read_file(filepath: str) -> str:
"""读取本地文件内容"""
try:
with open(filepath, "r", encoding="utf-8") as f:
return f.read()
except FileNotFoundError:
return f"错误:找不到文件 {filepath}"
except Exception as e:
return f"错误:{str(e)}"
这里实现了三个工具:
- run_code:让 AI 能直接运行 Python 代码。比如让它算个数据、处理个文件。
- web_search:通过 DuckDuckGo 搜索网页。不需要额外的搜索 API Key。
- read_file:读取本地文件。适合让 AI 帮你分析代码或文档。
3. 主程序 main.py
from openai import OpenAI
from tools import run_code, web_search, read_file
from config import OPENAI_API_KEY, MODEL, MAX_TOKENS, TEMPERATURE
client = OpenAI(api_key=OPENAI_API_KEY)
# 定义系统提示词,告诉 AI 它能做什么
SYSTEM_PROMPT = """你是一个实用的个人AI助手。你可以使用以下工具帮助用户:
1. 执行代码 - 当用户需要计算、数据处理或脚本运行时
2. 搜索网页 - 当用户需要最新信息时
3. 读取文件 - 当用户需要分析本地文件时
请用简洁的语言回答问题。回答中适当使用 Markdown 格式。"""
# 初始消息列表
messages = [
{"role": "system", "content": SYSTEM_PROMPT}
]
print("=== 个人AI助手 ===")
print("输入 'quit' 退出")
print("可用命令:")
print(" @code <代码> - 执行代码")
print(" @search <关键词> - 搜索网页")
print(" @file <路径> - 读取文件")
print()
while True:
user_input = input("你: ").strip()
if not user_input:
continue
if user_input.lower() == "quit":
print("再见!")
break
# 检查特殊命令
if user_input.startswith("@code"):
code = user_input[5:].strip()
result = run_code(code)
print(f"\n助手: 代码执行结果:\n{result}")
continue
if user_input.startswith("@search"):
query = user_input[7:].strip()
results = web_search(query)
output = "搜索结果:\n"
for i, r in enumerate(results, 1):
output += f"{i}. {r['title']}\n {r['link']}\n"
print(f"\n助手: {output}")
continue
if user_input.startswith("@file"):
filepath = user_input[5:].strip()
content = read_file(filepath)
print(f"\n助手: {content}")
continue
# 正常对话
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model=MODEL,
messages=messages,
max_tokens=MAX_TOKENS,
temperature=TEMPERATURE
)
assistant_reply = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_reply})
print(f"\n助手: {assistant_reply}\n")
五、实际使用场景
场景 1:数据分析
你: @code import pandas as pd
data = {'姓名': ['张三', '李四', '王五'], '分数': [85, 92, 78]}
df = pd.DataFrame(data)
print(df.mean())
助手: 代码执行结果:
分数 85.0
dtype: float64
场景 2:实时信息查询
你: @search ChatGPT 最新功能更新
助手: 搜索结果:
1. OpenAI 发布 GPT-4.5 模型
https://example.com/...
2. ChatGPT 新增长上下文窗口支持
https://example.com/...
场景 3:代码审查
你: 帮我看看这段代码有没有问题
@file ./my_script.py
助手: 我读取了你的文件。发现以下几个问题:
1. 第 15 行没有处理空列表的情况
2. 变量命名不符合 PEP 8 规范
3. 建议添加类型注解...
六、进阶玩法
1. 接入更多工具
你可以继续往 tools.py 里加功能:
def send_email(to: str, subject: str, body: str):
"""发送邮件(需要配置 SMTP)"""
# 使用 smtplib 实现
pass
def generate_image(prompt: str):
"""生成图片(调用 DALL-E API)"""
response = client.images.generate(
model="dall-e-3",
prompt=prompt,
size="1024x1024"
)
return response.data[0].url
2. 持久化记忆
上面的版本每次对话都是新的。加上记忆功能:
import json
from datetime import datetime
MEMORY_FILE = "memory.json"
def save_memory(messages):
"""保存对话历史"""
with open(MEMORY_FILE, "w", encoding="utf-8") as f:
json.dump(messages, f, ensure_ascii=False)
def load_memory():
"""加载对话历史"""
try:
with open(MEMORY_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return [{"role": "system", "content": SYSTEM_PROMPT}]
3. 做成桌面应用
用 PyQt 或 tkinter 给这个助手加个图形界面。或者做成 Web 应用,用手机也能访问。
七、成本控制
按月估算:
| 使用场景 | 月请求量 | 月费用 |
|---|---|---|
| 轻度使用 | 1000 条对话 | ~$0.5 |
| 中度使用 | 5000 条对话 | ~$2.5 |
| 重度使用 | 20000 条对话 | ~$10 |
gpt-4o-mini 非常便宜。一般个人使用,每月花不了几块钱。
如果想更省钱,可以切换到开源模型(如 Llama 3),完全零成本运行在本机。但效果和响应速度会打折扣。
八、常见问题
Q:API Key 会不会泄露?
A:用 .env 文件存储,不要提交到 Git。在 .gitignore 里加上 .env。
Q:代码执行安全吗? A:加了 30 秒超时限制。如果需要更高安全性,建议在 Docker 容器里运行。
Q:能替换 ChatGPT 吗? A:不能。这只是个基础框架。ChatGPT 有更丰富的功能和更好的交互体验。但这个助手胜在可控和低成本。
九、总结
搭建一个个人 AI 助手,核心就三步:
- 调 API 实现对话
- 写工具函数扩展能力
- 加循环让它持续运行
代码量不到 100 行。但已经足够应对日常需求了。
下一步?给它加个图形界面,或者接入更多工具。发挥你的想象力。
有什么想让我帮你做的?直接说就行。