从零到一:用AI快速搭建你的专属小工具
引言
在日常工作和学习中,我们经常遇到一些重复性高、规则明确但又消耗大量精力的任务,比如:阅读长文档后写摘要、批量回复邮件、翻译专业术语、整理会议纪要等。传统的做法是手动处理,或者写一段死板的脚本。如今,得益于大型语言模型(LLM)的普及,我们只需几十行代码,就能“教会”AI按照我们的需求工作,从而搭建一个专属的智能小工具。
本文将带你从零开始,使用 Python、OpenAI API 和 LangChain 框架,搭建一个“智能文本摘要与关键词提取工具”。通过这个实战案例,你将掌握用 AI 构建小工具的核心流程、代码实现以及部署技巧。
第一步:明确需求与技术选型
在动手写代码前,先想清楚我们的工具要解决什么问题。
需求定义:用户输入一段长文本(如文章、报告),工具自动输出:
- 一段 100-200 字的摘要。
- 提取 3-5 个关键词。
- 支持多语言输入(中英文)。
技术选型:
- 语言与框架:Python 3.9+,配合 LangChain(简化 LLM 调用流程)。
- 大模型:OpenAI GPT-3.5-turbo(性价比高,适合文本生成)。
- 环境管理:使用
python-dotenv管理 API Key,保证安全。 - 交互方式:命令行界面(CLI),简单直接,后续可快速扩展为 Web 服务。
第二步:开发环境准备
首先,创建项目目录并安装依赖。
mkdir ai-text-summarizer
cd ai-text-summarizer
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
安装必要库:
pip install langchain openai python-dotenv
在项目根目录创建 .env 文件,填入你的 OpenAI API Key:
OPENAI_API_KEY=sk-your-api-key-here
第三步:核心代码实现
我们的核心逻辑是:接收文本 → 构建 Prompt → 调用 LLM → 解析输出。
3.1 基础调用封装
首先,创建一个 utils.py 文件,用于加载环境变量并初始化 LLM。
# utils.py
import os
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
load_dotenv()
def get_llm():
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise ValueError("请设置 OPENAI_API_KEY 环境变量")
# 使用 GPT-3.5-turbo,温度设为0.3以保持输出稳定性
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.3,
openai_api_key=api_key
)
return llm
3.2 构建 Prompt 模板
Prompt 设计是 AI 工具的灵魂。我们需要清晰地告诉模型任务、格式和输出要求。
创建 prompts.py:
# prompts.py
from langchain.prompts import ChatPromptTemplate
# 摘要生成模板
summary_template = ChatPromptTemplate.from_messages([
("system", "你是一个专业的文本分析助手。请根据用户提供的文本,生成一段简洁的摘要,并提取3-5个关键词。"),
("user", "文本:{text}\n\n请输出以下格式:\n摘要:...\n关键词:...")
])
# 也可以设计更复杂的模板,例如指定摘要长度
summary_template_v2 = ChatPromptTemplate.from_messages([
("system", "你是一个专业的文本分析助手。请根据用户提供的文本,生成一段不超过200字的摘要,并提取出3-5个最相关的关键词。"),
("user", "文本:{text}")
])
3.3 构建处理链
使用 LangChain 的 LLMChain 将 Prompt 和 LLM 串联起来。
创建 summarizer.py:
# summarizer.py
from langchain.chains import LLMChain
from utils import get_llm
from prompts import summary_template
def summarize_text(text: str) -> str:
llm = get_llm()
chain = LLMChain(llm=llm, prompt=summary_template)
result = chain.run(text=text)
return result
if __name__ == "__main__":
# 测试文本
sample_text = """
人工智能(AI)是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。自从20世纪50年代诞生以来,AI经历了多次起伏,如今随着大数据和计算能力的提升,深度学习技术取得了突破性进展,AI应用已经渗透到医疗、金融、制造等各行各业。
"""
output = summarize_text(sample_text)
print(output)
运行 python summarizer.py,你将看到类似输出:
摘要:人工智能是计算机科学的分支,旨在模拟人类智能。其研究涵盖机器人、语言识别等领域。随着大数据和算力提升,深度学习取得突破,AI已广泛应用于医疗、金融等行业。
关键词:人工智能, 深度学习, 机器人, 自然语言处理, 大数据
3.4 增加输出解析(结构化结果)
为了后续更方便地处理结果(比如存入数据库或展示在前端),我们可以使用 LangChain 的 PydanticOutputParser 将输出解析为结构化数据。
安装额外依赖:
pip install pydantic
修改代码,定义输出模型:
# schemas.py
from pydantic import BaseModel, Field
from typing import List
class SummaryOutput(BaseModel):
summary: str = Field(description="文本摘要")
keywords: List[str] = Field(description="关键词列表")
更新 summarizer.py,加入输出解析:
# summarizer.py (增强版)
from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import PromptTemplate
from utils import get_llm
from schemas import SummaryOutput
def summarize_structured(text: str) -> SummaryOutput:
parser = PydanticOutputParser(pydantic_object=SummaryOutput)
prompt = PromptTemplate(
template="根据用户输入的文本,生成摘要和关键词。\n{format_instructions}\n文本:{text}",
input_variables=["text"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
llm = get_llm()
chain = prompt | llm | parser # LangChain 的管道操作符
result = chain.invoke({"text": text})
return result
# 测试
if __name__ == "__main__":
sample_text = "人工智能正在改变世界..."
output = summarize_structured(sample_text)
print(f"摘要:{output.summary}")
print(f"关键词:{', '.join(output.keywords)}")
第四步:构建命令行交互界面
为了更友好的用户体验,我们构建一个简单的 CLI 工具。
创建 cli.py:
# cli.py
import sys
from summarizer import summarize_text
def main():
print("=== AI 文本摘要与关键词提取工具 ===")
print("请输入文本(输入 'quit' 退出):")
while True:
print("\n> ", end="")
text = sys.stdin.readline().strip()
if text.lower() == "quit":
break
if not text:
continue
try:
result = summarize_text(text)
print("\n结果:")
print(result)
except Exception as e:
print(f"错误:{e}")
if __name__ == "__main__":
main()
运行 python cli.py,即可在终端中交互使用。
第五步:扩展与优化
一个能用的工具只是开始,我们可以从以下几个方向继续优化:
5.1 增加文件读取功能
支持从 .txt 或 .md 文件读取内容,处理长文档。
def read_file(filepath: str) -> str:
with open(filepath, 'r', encoding='utf-8') as f:
return f.read()
5.2 缓存与成本控制
对于重复输入的文本,可以使用本地缓存(如 diskcache)避免重复调用 API,节省费用。
from diskcache import Cache
cache = Cache("llm_cache")
if text in cache:
result = cache[text]
else:
result = chain.run(text=text)
cache[text] = result
5.3 部署为 Web API
使用 FastAPI 快速包装成 RESTful 接口。
# api.py
from fastapi import FastAPI
from pydantic import BaseModel
from summarizer import summarize_structured
app = FastAPI()
class TextRequest(BaseModel):
content: str
@app.post("/summarize")
def summarize(request: TextRequest):
result = summarize_structured(request.content)
return {"summary": result.summary, "keywords": result.keywords}
# 启动:uvicorn api:app --reload
第六步:实际应用场景
这个工具可以直接应用到以下场景:
- 学术研究:快速阅读论文摘要,提取关键概念。
- 内容运营:批量处理文章,生成 SEO 描述和标签。
- 商务沟通:将冗长的邮件或会议记录浓缩为要点。
- 学习辅助:整理笔记,生成复习提纲。
总结
本文展示了如何利用 AI(特别是 LLM)在短短几十分钟内搭建一个实用的文本处理工具。核心要点包括:
- Prompt 工程:清晰、具体的指令是得到高质量输出的关键。
- 框架选型:LangChain 极大地简化了与 LLM 的交互、输出解析和链式调用。
- 渐进式开发:从 CLI 到 Web API,从简单输出到结构化数据,逐步完善。
AI 工具开发的魅力在于,你不再需要处理复杂的规则或训练自己的模型,而是通过“语言”直接与智能体协作。现在,打开你的编辑器,开始搭建属于你的第一个 AI 小工具吧!