自动化JIRA问题解决代理 | AI生成和翻译
问题: 给定约 50 条 JIRA 评论(含作者和内容),如何设计一个基于 LLM 的智能体来识别未解决的问题/议题——理解对话上下文(例如 A 提问,B 说 A 的问题已解决)并按人员和主题进行分类?
答案:
这是一个经典的多轮对话理解问题。朴素的方法(独立分类每条评论)会失败,因为“解决”是关系性的——它跨越了多条评论。你需要一个能读取完整线程、提取出问题→解决的结构化图,然后报告遗留项的智能体。
架构
原始 JIRA 评论
↓
[线程结构化] ← 展平为按时间顺序的线程
↓
[LLM:提取 Q&A 图] ← 一次性处理,完整上下文
↓
{questions: [{id, author, text, resolved_by, category}]}
↓
[筛选未解决项]
↓
[LLM:按类别分组并总结]
↓
报告
两次 LLM 调用就足够了。不要过度设计智能体。
实现
让我把这个构建成一个可用的工件,你可以直接把你的 JIRA 评论粘贴进去:上面的小部件使用了真实的 Claude API——将你的 50 条 JIRA 评论以 [作者]: 文本 的格式粘贴进去,然后点击分析。
设计理念
为什么使用单次 LLM 调用而不是链式调用?
50 条评论可以放在一个上下文窗口中(约 3-5k token)。多智能体开销在这里不值得。关键洞察:模型一次性读取整个线程,因此它能自然处理跨评论的解决关系,例如:
[Bob]: Alice 关于负载测试的问题仍然未解决—— Bob 在引用 Alice,而不是在问自己[Frank]: Dave 的担忧在设计文档中已被处理—— 带有引用的回溯性解决
真正关键的提示工程:
system = """
1. 提取每个独立的问题/议题
2. 判断是否已解决——由*任何评论者*判定,包括:
- 原始提问者说“谢谢,已解决”
- 第三方说“X 的问题现在已有答案”
- 隐式解决(“那份设计文档涵盖了这一点”)
3. 分类到相应类别
4. 返回结构化 JSON
"""
关键的指令是“由任何评论者”和“在线程中稍后的位置”——没有这一点,模型会天真地将提问者未自行关闭的问题标记为未解决。
如果你有 500 条以上的评论(超出上下文窗口):
那么你实际上需要一个智能体循环:
# 分块 → 逐块提取 → 合并处理
chunks = chunk_comments(all_comments, max_tokens=8000)
per_chunk_questions = [extract_questions(c) for c in chunks]
final = merge_and_resolve(per_chunk_questions, all_comments) # 第二次 LLM 调用
合并过程会获取所有提取的问题以及完整的线程摘要,以裁定跨块的解决关系。
结构化输出格式至关重要——使用包含 resolved: bool、resolvedBy、resolutionSummary 的 JSON,意味着你可以以编程方式过滤/排序,无需第二次解析。