智能体(Agent)实践:构建能自主创作并点评春联的AI助手
智能体(Agent)实践:构建能自主创作并点评春联的AI助手
最近在捣鼓AI应用,发现一个挺有意思的方向:让AI不仅能干活,还能自己评价自己干的活,然后越干越好。这背后就是智能体(Agent)技术。今天,我就想和大家聊聊,怎么用这个思路,亲手搭建一个能写春联、还能自己点评修改的AI小助手。
你可能用过一些AI写对联的工具,输入几个关键词,它给你生成一副。但生成的对联好不好,合不合平仄,有没有意境,通常还得靠我们自己来判断。我这个项目的目标,就是让AI自己来完成这个“创作-评审”的闭环。它不仅能根据你的要求生成春联,还能像一位懂行的老师傅一样,按照文学标准去点评这副对联,如果觉得不够好,它还能主动修改优化,直到拿出一个像样的作品。
整个过程就像组建了一个小团队:一个负责创作的“文案”,一个负责把关的“主编”,还有一个协调两者的“项目经理”。下面,我就带你一步步把这个“团队”搭建起来,看看AI智能体到底能有多“智能”。
1. 场景与构想:为什么需要会自我评审的AI?
在动手之前,我们先想想,一个能自我点评的春联生成器,到底有什么用?
最直接的,它解决了“生成即结束”的问题。很多AI工具生成内容后,质量如何全凭用户感觉。对于春联这种有明确格式(上下联字数相等、对仗工整、平仄协调)和意境要求的文体,普通用户可能很难做出专业评判。让AI自己来评审,相当于给生成过程加了一个质量检查环节。
其次,它能实现个性化迭代。比如,你觉得生成的对联“年味”不足,或者希望更“文雅”一些。在传统模式下,你只能不断修改提示词,碰运气。而在我们的智能体系统里,你可以把“年味要足”、“用词典雅”作为评审标准。AI生成第一稿后,会依据这些标准进行评审,发现不足,然后有针对性地进行修改,生成第二稿、第三稿……直到满足要求。
这其实就是智能体(Agent)的核心思想:感知(生成对联)、思考(依据标准评审)、行动(修改优化),在一个循环中不断逼近目标。接下来,我们就来看看怎么实现它。
2. 系统设计:组建我们的AI“小团队”
要构建这个系统,我们需要明确几个核心角色和它们的工作流程。整个系统可以看作由三个智能体协同工作:
- 创作智能体(Writer Agent):它的任务很单纯,就是根据用户输入的主题或关键词,创作出一副春联。它需要理解春联的基本结构(上联、下联、横批)和文学特点。
- 评审智能体(Critic Agent):它扮演“质检员”和“导师”的角色。手里拿着一份评审标准清单,比如“对仗是否工整”、“平仄是否和谐”、“意境是否贴合主题”、“用词是否新颖”等。创作智能体交稿后,就由它来逐条打分,并给出具体的修改建议。
- 调度智能体(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):手动管理多个智能体的状态、记忆和调用链会很繁琐。使用现成的框架能极大提升开发效率。这里我推荐 LangChain 或 LlamaIndex。它们都提供了高层次的抽象,让我们能像搭积木一样定义智能体、工具和工作流。特别是 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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐
所有评论(0)