用一个小型 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