智能体(Agent)实践:构建能自主创作并点评春联的AI助手

最近在捣鼓AI应用,发现一个挺有意思的方向:让AI不仅能干活,还能自己评价自己干的活,然后越干越好。这背后就是智能体(Agent)技术。今天,我就想和大家聊聊,怎么用这个思路,亲手搭建一个能写春联、还能自己点评修改的AI小助手。

你可能用过一些AI写对联的工具,输入几个关键词,它给你生成一副。但生成的对联好不好,合不合平仄,有没有意境,通常还得靠我们自己来判断。我这个项目的目标,就是让AI自己来完成这个“创作-评审”的闭环。它不仅能根据你的要求生成春联,还能像一位懂行的老师傅一样,按照文学标准去点评这副对联,如果觉得不够好,它还能主动修改优化,直到拿出一个像样的作品。

整个过程就像组建了一个小团队:一个负责创作的“文案”,一个负责把关的“主编”,还有一个协调两者的“项目经理”。下面,我就带你一步步把这个“团队”搭建起来,看看AI智能体到底能有多“智能”。

1. 场景与构想:为什么需要会自我评审的AI?

在动手之前,我们先想想,一个能自我点评的春联生成器,到底有什么用?

最直接的,它解决了“生成即结束”的问题。很多AI工具生成内容后,质量如何全凭用户感觉。对于春联这种有明确格式(上下联字数相等、对仗工整、平仄协调)和意境要求的文体,普通用户可能很难做出专业评判。让AI自己来评审,相当于给生成过程加了一个质量检查环节。

其次,它能实现个性化迭代。比如,你觉得生成的对联“年味”不足,或者希望更“文雅”一些。在传统模式下,你只能不断修改提示词,碰运气。而在我们的智能体系统里,你可以把“年味要足”、“用词典雅”作为评审标准。AI生成第一稿后,会依据这些标准进行评审,发现不足,然后有针对性地进行修改,生成第二稿、第三稿……直到满足要求。

这其实就是智能体(Agent)的核心思想:感知(生成对联)、思考(依据标准评审)、行动(修改优化),在一个循环中不断逼近目标。接下来,我们就来看看怎么实现它。

2. 系统设计:组建我们的AI“小团队”

要构建这个系统,我们需要明确几个核心角色和它们的工作流程。整个系统可以看作由三个智能体协同工作:

  1. 创作智能体(Writer Agent):它的任务很单纯,就是根据用户输入的主题或关键词,创作出一副春联。它需要理解春联的基本结构(上联、下联、横批)和文学特点。
  2. 评审智能体(Critic Agent):它扮演“质检员”和“导师”的角色。手里拿着一份评审标准清单,比如“对仗是否工整”、“平仄是否和谐”、“意境是否贴合主题”、“用词是否新颖”等。创作智能体交稿后,就由它来逐条打分,并给出具体的修改建议。
  3. 调度智能体(Orchestrator Agent):它是这个团队的“项目经理”。负责接收用户需求,指派创作智能体开工;收到初稿后,召唤评审智能体来检查;如果评审结果不达标(比如综合评分低于某个阈值),它就命令创作智能体根据评审意见进行修改,开启新一轮循环;如果达标,则将最终作品呈现给用户。

它们之间的工作流程,我画了一个简单的示意图,看起来更直观:

用户输入“新春快乐”
    |
    v
[调度智能体] 接收指令,解析需求
    |
    v
[调度智能体] 调用 -> [创作智能体]:“请创作一副关于‘新春快乐’的春联”
    |
    v
[创作智能体] 生成初稿:上联:Xxxx;下联:Xxxx;横批:Xxxx
    |
    v
[调度智能体] 调用 -> [评审智能体]:“请评审这副春联”
    |
    v
[评审智能体] 评审:对仗(8/10),平仄(7/10),意境(6/10)... 建议:下联意境可更贴合“快乐”。
    |
    v
[调度智能体] 判断:综合分7.5,未达优秀线(8.0),启动迭代。
    |
    v
[调度智能体] 调用 -> [创作智能体]:“根据评审意见修改:下联意境需更贴合‘快乐’。”
    |
    v
[创作智能体] 生成修改稿...
    |
    v
(循环直至评审达标或达到最大迭代次数)
    |
    v
[调度智能体] 输出最终春联及评审报告。

有了这个蓝图,我们就可以开始挑选工具,动手编码了。

3. 技术选型与核心工具

实现上述设计,我们需要两类核心工具:一个强大的语言模型作为智能体的“大脑”,和一个能方便协调多个智能体的开发框架。

  • 语言模型(LLM):这是智能体的智慧源泉。我们需要它既能理解指令进行创作,又能进行逻辑分析和评判。像 GPT-4、Claude 3 或者国内的一些优秀大模型(如文心一言、通义千问、DeepSeek 等)的 API 都非常合适。它们能很好地理解我们的自然语言指令,扮演不同的角色。本文的示例代码将使用 OpenAI 风格的 API 进行演示,你可以轻松替换为其他兼容的模型。
  • 智能体框架(Agent Framework):手动管理多个智能体的状态、记忆和调用链会很繁琐。使用现成的框架能极大提升开发效率。这里我推荐 LangChainLlamaIndex。它们都提供了高层次的抽象,让我们能像搭积木一样定义智能体、工具和工作流。特别是 LangChain 的 AgentExecutor 和多智能体编排功能,非常适合我们这个场景。

此外,我们还需要为评审智能体定义一套清晰的、可量化的评审标准。这套标准将作为提示词(Prompt)的一部分,指导模型进行评审。例如:

review_criteria = """
请你作为春联评审专家,对以下春联进行打分(每项1-10分)并给出简要修改建议:
1.  **对仗工整度**:上下联对应位置的词性、结构是否对称。
2.  **平仄和谐度**:是否符合春联基本的平仄规律,读起来是否朗朗上口。
3.  **意境贴合度**:内容是否贴合给定的主题或关键词。
4.  **用词新颖度**:是否避免陈词滥调,有一定新意。
5.  **整体美观度**:从整体上看,是否是一副好对联。

请以JSON格式输出,包含各项得分、总分和具体修改建议。
"""

有了这些准备,我们就可以开始编写核心代码了。

4. 分步实现:从零搭建智能体系统

我们假设你已经配置好了 Python 环境,并安装了必要的库(如 langchain, openai)。下面我们分模块来实现。

4.1 第一步:搭建基础环境与模型连接

首先,我们设置好模型客户端。这里以 OpenAI 为例,如果你使用其他模型,只需更换 ChatOpenAI 的配置即可。

import os
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain.memory import ConversationBufferMemory
from langchain.tools import Tool
from langchain.prompts import PromptTemplate
import json

# 设置你的API密钥(请替换为你的实际密钥,或从环境变量读取)
os.environ["OPENAI_API_KEY"] = "your-api-key-here"

# 初始化语言模型,我们使用gpt-3.5-turbo,成本较低且效果足够
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
# 对于创作,温度可以稍高(如0.8-0.9)以增加创造性;对于评审,温度应较低(如0.2)以保证稳定性。
llm_creative = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.85)
llm_critical = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.2)

4.2 第二步:定义创作与评审工具

我们将创作和评审功能封装成 Tool,这样智能体就可以像使用函数一样调用它们。

def create_couplet(topic: str) -> str:
    """创作春联的工具函数"""
    prompt = PromptTemplate.from_template(
        "你是一位精通中国传统文化、擅长创作春联的专家。请围绕“{topic}”这个主题,创作一副春联。\n"
        "要求:上联和下联均为7个字,对仗工整,平仄和谐,意境优美。并提供一个4个字的横批。\n"
        "请直接输出格式为:上联:...;下联:...;横批:...。"
    )
    chain = prompt | llm_creative
    result = chain.invoke({"topic": topic})
    return result.content

def review_couplet(couplet: str) -> str:
    """评审春联的工具函数"""
    criteria_prompt = """
    你是一位资深的春联评审专家。请严格根据以下标准,对这副春联进行评审:
    - 对仗工整度(10分):词性、结构是否对称。
    - 平仄和谐度(10分):读音是否抑扬顿挫,符合基本格律。
    - 意境贴合度(10分):是否生动表达了主题,意境是否优美。
    - 用词新颖度(10分):是否避免俗套,有巧思。
    - 整体美观度(10分):整体观感是否协调、美观。

    春联内容:{couplet}

    请按以下JSON格式输出你的评审结果:
    {{
        "scores": {{
            "antithesis": <分数>,
            "tonal_pattern": <分数>,
            "imagery": <分数>,
            "originality": <分数>,
            "overall": <分数>
        }},
        "total_score": <总分>,
        "feedback": "<具体的修改建议,指出优点和不足>"
    }}
    只需输出JSON,无需其他文字。
    """
    prompt = PromptTemplate.from_template(criteria_prompt)
    chain = prompt | llm_critical
    result = chain.invoke({"couplet": couplet})
    # 尝试解析JSON,如果失败则返回原始文本
    try:
        return json.loads(result.content)
    except json.JSONDecodeError:
        return {"error": "评审结果解析失败", "raw_output": result.content}

# 将函数封装成LangChain Tool
creation_tool = Tool(
    name="CreateCouplet",
    func=create_couplet,
    description="根据给定的主题创作一副春联(含横批)。输入应为一个描述主题的字符串。"
)

review_tool = Tool(
    name="ReviewCouplet",
    func=review_couplet,
    description="评审一副春联,并返回包含各项分数、总分和修改建议的JSON。输入应为完整的春联文本。"
)

4.3 第三步:构建调度智能体与工作流

这是最核心的一步。我们将创建一个调度智能体,它拥有创作和评审两个工具,并根据评审结果决定下一步行动。

from langchain.agents import AgentType, initialize_agent

# 调度智能体的提示词,定义了它的角色和决策逻辑
orchestrator_prompt = PromptTemplate.from_template(
    """你是一个春联创作项目的智能调度员。你的任务是协调创作和评审工作,以产出高质量春联。
    用户的需求是:{input}

    你的工作流程如下:
    1.  首先,调用`CreateCouplet`工具,根据用户需求创作第一稿春联。
    2.  然后,调用`ReviewCouplet`工具,对生成的春联进行评审。
    3.  分析评审结果中的`total_score`。
        - 如果总分 >= 8.0,任务成功,直接向用户输出最终春联和评审摘要。
        - 如果总分 < 8.0,你需要分析`feedback`中的修改建议。然后,**重新开始整个过程**,但要在新的指令中融入修改建议。例如:“基于‘意境需更喜庆’的评审意见,围绕‘新春’主题创作一副春联。”
    4.  最多重复此流程3次(包括第一次)。如果3次后仍未达到8分,则输出目前最好的版本及其评审结果。

    请严格按此流程执行。你每次的思考过程(Thought)和行动(Action)都至关重要。
    """
)

# 为调度智能体配备工具
tools = [creation_tool, review_tool]

# 创建调度智能体
orchestrator_agent = initialize_agent(
    tools=tools,
    llm=llm, # 调度智能体使用默认的、逻辑性强的LLM
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 使用ReAct代理框架,适合多步推理
    verbose=True, # 设置为True可以看到智能体的思考过程,非常有助于调试
    handle_parsing_errors=True,
    max_iterations=6, # 限制最大迭代步数,防止死循环
    early_stopping_method="generate",
    agent_kwargs={"prompt": orchestrator_prompt}
)

4.4 第四步:运行与测试

现在,让我们来运行这个系统,看看它如何工作。

# 测试一个主题
if __name__ == "__main__":
    user_request = "创作一副表达‘家庭和睦、幸福安康’的春联"
    print(f"用户需求:{user_request}")
    print("-" * 50)
    
    final_result = orchestrator_agent.invoke({"input": user_request})
    print("\n" + "="*50)
    print("【最终输出】")
    print(final_result["output"])

当你将 verbose=True 时,在控制台可以看到智能体详细的思考链(ReAct),例如:

Thought: 用户需要一副关于家庭和睦的春联。我应该先创作一稿。
Action: CreateCouplet
Action Input: 家庭和睦、幸福安康
Observation: 上联:家和万事兴隆景;下联:睦邻千秋福寿长;横批:合家欢乐
Thought: 我已经有了初稿,现在需要评审它。
Action: ReviewCouplet
Action Input: 上联:家和万事兴隆景;下联:睦邻千秋福寿长;横批:合家欢乐
Observation: {"scores": {"antithesis": 8, "tonal_pattern": 7, ...}, "total_score": 7.5, "feedback": "平仄可以更协调...‘睦邻’与上联‘家和’对仗稍宽..."}
Thought: 总分7.5未达到8分。我需要根据反馈修改。反馈建议关注平仄和对仗。我将重新创作,并融入“平仄更协调、对仗更工整”的要求。
Action: CreateCouplet
Action Input: 基于“平仄需更协调、对仗需更工整”的评审意见,围绕“家庭和睦、幸福安康”主题创作一副春联。
...

通过这样的迭代,系统最终会输出一个经过优化、且附带评审报告的结果。

5. 效果展示与场景延伸

运行几次后,你会发现这个系统确实能产出比单次生成质量更高的春联。更重要的是,整个过程是自动化的、可解释的。你能看到AI是如何思考、如何改进的。

这个“创作-评审”智能体模式,其应用场景远不止春联:

  • 内容创作与润色:可以用于自动撰写并优化营销文案、社交媒体帖子、新闻稿等。一个智能体负责起草,另一个负责检查语法、风格、品牌调性。
  • 代码生成与审查:一个智能体根据需求生成代码片段,另一个智能体则扮演“代码审查员”,检查代码风格、潜在错误和优化空间。
  • 智能客服与质检:客服智能体回答用户问题后,质检智能体可以评估回答的准确性和友好度,确保服务质量。
  • 教育辅助:智能体可以生成数学题或作文题,另一个智能体则负责提供解题步骤或批改作文,并给出学习建议。

它的核心价值在于将复杂的任务分解为可评估、可迭代的子步骤,并通过反馈循环持续改进输出质量。

6. 总结

通过这个构建春联创作点评助手的实践,我们亲手实现了一个简单的多智能体协作系统。它不再是一个单向的、黑盒的生成工具,而是一个具备感知、思考、行动和迭代能力的“小团队”。

这个项目的关键,在于清晰地定义角色(创作、评审)、制定可执行的评审标准、并设计一个有效的调度逻辑。LangChain 这类框架大大降低了实现这类工作流的复杂度。当然,目前的例子还比较基础,评审标准也可以更细化,迭代策略也可以更复杂(比如针对特定低分项进行定向修改)。

我觉得,智能体技术最有魅力的地方,就是让AI从“工具”变成了“伙伴”。它开始有了点“主观能动性”,虽然这背后还是我们设定的规则和逻辑。如果你对这方面感兴趣,不妨从这个春联助手开始,尝试把它改造成你的专属文案助手、代码搭档,或者任何你能想到的有趣应用。动手试一下,你会发现,让AI自己“卷”自己,效果往往比你想象的要好。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐