用一个小型 AI 助手把“整理需求→生成计划→输出代码骨架”串起来(含示例代码)
用一个小型 AI 助手把“整理需求→生成计划→输出代码骨架”串起来(含示例代码)
很多人用 AI 的方式是“问一句、回一句”,效率提升有限。我更喜欢把 AI 当成一个可嵌入流程的组件:它负责结构化、归纳、生成草稿,而我负责确认关键决策与最终落地。下面我用一个可复用的小例子,演示如何做一个“AI 工作助手”——输入一段杂乱需求文字,它会自动整理成结构化字段,并生成一个可执行的行动清单。代码不追求花哨,重点是可落地、可扩展。
目标场景:把混乱需求变成“可执行任务单”
假设你收到这样一段需求:
> “最近注册机器人很多,邮箱乱七八糟。想拦截一下,但不能影响正常用户注册。最好还能统计拦截量,给我一个排查建议。”
人类处理通常要:提炼需求、找约束、列步骤、再写方案。我们让 AI 做前半段:结构化 + 生成任务单。
示例代码(Python)
> 说明:下面代码以“可替换的 AI 调用函数”为核心结构。你可以把 call_llm() 换成你自己的模型接口(OpenAI / Gemini / 本地模型都行)。示例里用“伪返回”保证代码能跑通,便于你直接改造。
# -- coding: utf-8 --
"""
Mini AI Ops Assistant
- 输入:一段混乱的需求/报错/想法
- 输出:结构化信息 + 可执行行动清单
"""
from dataclasses import dataclass
from typing import Dict, Any, List
import json
import re
@dataclass
class TaskItem:
title: str
rationale: str
steps: List[str]
risk: str
def normalize_text(text: str) -> str:
"""简单清洗:去多余空白、统一换行"""
text = text.strip()
text = re.sub(r"\n{3,}", "\n\n", text)
return text
def call_llm(prompt: str) -> str:
"""
你自己的 LLM 调用接口放这里:
- OpenAI API / Gemini API / 本地模型
这里先用“伪返回”示例,让代码可运行。
"""
fake = {
"background": "网站出现大量机器人注册,邮箱随机,影响数据质量与运营。",
"goal": "在不影响正常用户注册的前提下,显著降低机器人注册。",
"constraints": [
"不能禁止注册",
"不能误伤正常用户(尽量低误杀)",
"希望有统计数据(拦截量、误判可能性)"
],
"risks": [
"拦截策略过严会影响转化",
"仅靠单一规则容易被绕过"
],
"action_plan": [
{
"title": "先做“低干扰”分层拦截",
"rationale": "先用成本最低、误伤最小的手段过滤大部分机器人。",
"steps": [
"启用注册表单的基础反垃圾(隐藏字段/蜜罐、速率限制)",
"对可疑IP/UA做轻度限流(同IP短时间多次注册直接阻断)",
"对邮箱域名做最小黑名单(明显一次性域名)并记录日志"
],
"risk": "需要持续维护黑名单,避免误伤企业邮箱"
},
{
"title": "建立可观测性:记录与报表",
"rationale": "没有数据就无法迭代策略,容易越拦越乱。",
"steps": [
"记录被拦截的IP、UA、邮箱域、触发规则、时间",
"每日报表输出:拦截量、Top IP、Top 域名、规则命中率",
"抽样复核:随机检查被拦截样本,评估误杀"
],
"risk": "日志需注意隐私合规与存储成本"
},
{
"title": "再上“更强”验证:按风险启用",
"rationale": "对高风险流量启用更强验证,保持正常用户体验。",
"steps": [
"对命中多条可疑规则的请求要求二次验证",
"对来自异常地区/异常时段的注册提高验证强度",
"逐步灰度上线,观察注册转化变化"
],
"risk": "验证过重可能导致注册下降"
}
]
}
return json.dumps(fake, ensure_ascii=False)
def build_prompt(user_text: str) -> str:
"""构造提示词:要求输出严格 JSON,便于程序解析"""
return f"""
你是一个冷静理性的站长助手,请把用户输入整理成严格 JSON(不要多余文字)。
字段:
- background: 背景
- goal: 目标
- constraints: 约束数组
- risks: 风险数组
- action_plan: 任务数组,每个任务包含 title, rationale, steps(数组), risk
用户输入:
{user_text}
""".strip()
def parse_llm_json(llm_output: str) -> Dict[str, Any]:
"""解析 LLM 输出(假设为 JSON)"""
try:
return json.loads(llm_output)
except json.JSONDecodeError as e:
raise ValueError(f"LLM output is not valid JSON: {e}")
def to_task_items(plan: List[Dict[str, Any]]) -> List[TaskItem]:
items: List[TaskItem] = []
for p in plan:
items.append(TaskItem(
title=p.get("title", "").strip(),
rationale=p.get("rationale", "").strip(),
steps=[s.strip() for s in p.get("steps", []) if str(s).strip()],
risk=p.get("risk", "").strip()
))
return items
def run_assistant(user_text: str) -> None:
user_text = normalize_text(user_text)
prompt = build_prompt(user_text)
llm_output = call_llm(prompt)
data = parse_llm_json(llm_output)
print("=== Structured Summary ===")
print(f"Background: {data.get('background')}")
print(f"Goal: {data.get('goal')}\n")
print("Constraints:")
for c in data.get("constraints", []):
print(f"- {c}")
print("\nRisks:")
for r in data.get("risks", []):
print(f"- {r}")
tasks = to_task_items(data.get("action_plan", []))
print("\n=== Action Plan ===")
for i, t in enumerate(tasks, 1):
print(f"\n{i}. {t.title}")
print(f" Why: {t.rationale}")
print(" Steps:")
for s in t.steps:
print(f" - {s}")
print(f" Risk: {t.risk}")
if name == "main":
sample = "最近注册机器人很多,邮箱乱七八糟。想拦截一下,但不能影响正常用户注册。最好还能统计拦截量,给我一个排查建议。"
run_assistant(sample)
这段代码怎么扩展成“真正能用”的版本?
你只需要把 call_llm() 换成真实模型调用即可,然后在输出 JSON 后把行动清单写入工单系统、Notion、或数据库。更进一步,你可以加入:
- 规则化模板库:针对“性能问题 / 注册垃圾 / 支付失败 / CDN异常”等建立不同 Prompt;
- 验证闭环:让 AI 每次输出都附带“验证步骤”,你跑完验证后把结果回填,再让 AI 调整策略;
- 安全护栏:遇到高风险动作(改配置、删数据)必须人工确认,避免自动化越权。
评论 0