当前位置: 首页 > news >正文

[智能体设计模式] 第11章:目标设定与监控模式

智能体需具备明确目标感与进度追踪能力,才能高效达成结果。目标设定与监控模式的核心是:为智能体设定具体目标,赋予其生成计划、追踪进度、判断目标是否达成的能力,而非仅停留在信息处理或工具调用层面。

模式概述

智能体的“规划”本质是根据高层目标生成中间步骤/子目标,结合工具使用、流程编排等完成复杂任务。优秀的规划能力让智能体可应对非单步问题、适应动态变化、编排复杂工作流,从响应式系统升级为主动达成目标的系统(类似旅行规划:明确目的地→出发点→分步执行→动态调整)。

核心应用场景

  • 客户支持自动化:目标“解决客户账单问题”,监控对话、查询数据、调整账单,通过客户反馈判断是否成功。
  • 个性化学习系统:目标“提升学生代数理解”,跟踪练习进度、准确率,动态调整教学策略。
  • 项目管理助手:目标“确保里程碑X按时完成”,监控任务状态、资源情况,及时预警延误。
  • 自动化交易机器人:目标“风险可控下最大化收益”,监控市场数据、风险指标,自动执行交易。
  • 自动驾驶:目标“安全从A地到B地”,实时监控环境、自身状态,动态调整驾驶行为。
  • 内容审核:目标“移除有害内容”,监控新内容、跟踪误判率,调整过滤标准或升级人工审核。

实战代码示例(LangChain + OpenAI)

功能说明

智能体自主迭代生成Python代码,核心流程:接收编程需求+质量目标→生成代码→评估→优化,循环至目标达成(最多5次迭代),最终输出带注释的可执行文件。

依赖安装

pip install langchain_openai openai python-dotenv

创建.env文件,配置:OPENAI_API_KEY=你的API密钥

核心代码

# MIT License
# Copyright (c) 2025 Mahtab Syed
"""
目标设定与监控模式实战:AI代码生成智能体
功能:
- 接收编程需求(use_case)和质量目标(goals)
- 迭代生成、评估、优化Python代码(最多5次迭代)
- 目标达成判断:LLM仅返回True/False
- 最终保存带注释的可执行.py文件
"""import os
import random
import re
from pathlib import Path
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv, find_dotenv# 加载环境变量
_ = load_dotenv(find_dotenv())
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
if not OPENAI_API_KEY:raise EnvironmentError("请设置OPENAI_API_KEY环境变量")# 初始化LLM
llm = ChatOpenAI(model="gpt-4o",  # 无访问权限可替换为其他OpenAI模型temperature=0.3,openai_api_key=OPENAI_API_KEY,
)# 工具函数
def generate_prompt(use_case: str, goals: list[str], previous_code: str = "", feedback: str = "") -> str:"""生成代码生成/优化的提示词"""base_prompt = f"""
你是AI编程助手,根据以下需求编写Python代码:
用例:{use_case}
目标:
{chr(10).join(f"‑ {g.strip()}" for g in goals)}
"""if previous_code:base_prompt += f"\n之前生成的代码:\n{previous_code}"if feedback:base_prompt += f"\n反馈意见:\n{feedback}\n"base_prompt += "\n仅返回修改后的Python代码,不要额外注释或解释"return base_promptdef get_code_feedback(code: str, goals: list[str]) -> str:"""评估代码是否满足目标,生成反馈"""feedback_prompt = f"""
你是Python代码评审员,根据以下目标评估代码:
{chr(10).join(f"‑ {g.strip()}" for g in goals)}
代码:
{code}
请指出是否满足目标,需改进的点(清晰度、简洁性、正确性、边界处理、测试覆盖等)
"""return llm.invoke(feedback_prompt)def goals_met(feedback_text: str, goals: list[str]) -> bool:"""根据反馈判断目标是否达成(返回True/False)"""review_prompt = f"""
目标:
{chr(10).join(f"‑ {g.strip()}" for g in goals)}
代码反馈:
\"\"\"{feedback_text}\"\"\"
基于以上反馈,目标是否全部达成?仅返回True或False
"""response = llm.invoke(review_prompt).content.strip().lower()return response == "true"def clean_code_block(code: str) -> str:"""清理代码块(去除```标记)"""lines = code.strip().splitlines()if lines and lines[0].strip().startswith("```"):lines = lines[1:]if lines and lines[-1].strip() == "```":lines = lines[:-1]return "\n".join(lines).strip()def add_comment_header(code: str, use_case: str) -> str:"""为代码添加头部注释"""comment = f"# 功能:实现以下用例\n# {use_case.strip()}\n"return comment + "\n" + codedef save_code_to_file(code: str, use_case: str) -> str:"""保存代码到文件(生成简洁文件名)"""# 生成简短文件名summary_prompt = f"用1个单词(不超过10字符)概括用例,用于文件名:\n{use_case}"raw_summary = llm.invoke(summary_prompt).content.strip()short_name = re.sub(r"[^a-zA-Z0-9_]", "", raw_summary.replace(" ", "_").lower())[:10]filename = f"{short_name}_{random.randint(1000, 9999)}.py"filepath = Path.cwd() / filenamewith open(filepath, "w") as f:f.write(code)print(f"代码已保存至:{filepath}")return str(filepath)# 主智能体函数
def run_code_agent(use_case: str, goals_input: str, max_iterations: int = 5) -> str:"""运行代码生成智能体"""goals = [g.strip() for g in goals_input.split(",")]print(f"\n用例:{use_case}")print("目标:")for g in goals:print(f" - {g}")previous_code = ""feedback = ""for i in range(max_iterations):print(f"\n=== 迭代 {i + 1}/{max_iterations} ===")# 生成/优化代码prompt = generate_prompt(use_case, goals, previous_code, feedback.content if isinstance(feedback, dict) else feedback)code_response = llm.invoke(prompt)code = clean_code_block(code_response.content.strip())print(f"\n生成的代码:\n{'='*50}\n{code}\n{'='*50}")# 评估代码feedback = get_code_feedback(code, goals)feedback_text = feedback.content.strip()print(f"\n反馈意见:\n{'='*50}\n{feedback_text}\n{'='*50}")# 判断是否达成目标if goals_met(feedback_text, goals):print("目标已全部达成,停止迭代")breakprint("目标未达成,准备下一轮优化")previous_code = code# 保存最终代码final_code = add_comment_header(code, use_case)return save_code_to_file(final_code, use_case)# 测试运行
if __name__ == "__main__":print("AI代码生成智能体启动")# 示例1:计算二进制间隙use_case_input = "编写代码计算给定正整数的二进制间隙(BinaryGap)"goals_input = "代码简洁易懂, 功能正确, 处理所有边界情况, 仅接收正整数输入, 附带示例打印结果"run_code_agent(use_case_input, goals_input)# 示例2:统计目录及子目录文件数(按需启用)# use_case_input = "统计当前目录及所有子目录的文件总数并打印"# goals_input = "代码简洁易懂, 功能正确, 处理边界情况, 忽略性能优化建议, 不使用unittest/pytest"# run_code_agent(use_case_input, goals_input)# 示例3:统计Word文档字数/字符数(按需启用)# use_case_input = "接收命令行输入的Word文档(doc/docx),统计字数和字符数并打印"# goals_input = "代码简洁易懂, 功能正确, 处理边界情况"# run_code_agent(use_case_input, goals_input)

核心流程

  1. 目标输入:用户提供编程需求(use_case)和质量目标(如“简洁易懂”“处理边界情况”)。
  2. 迭代循环:
    • 生成代码:基于需求和历史反馈生成/优化代码。
    • 自我评审:评估代码是否满足所有目标,生成反馈。
    • 目标判断:LLM判定是否达成目标(True/False)。
    • 优化迭代:未达成则基于反馈修正代码,重复循环(最多5次)。
  3. 结果输出:目标达成后,保存带注释的可执行代码文件。

注意事项

  1. 本示例为原理演示,非生产级代码,需人工验证最终代码可用性。
  2. 单一LLM同时负责生成和评审,可能存在判断偏差,建议生产环境采用多智能体分工(编程、评审、测试分离)。
  3. 存在无限循环风险,需通过max_iterations限制迭代次数。
  4. LLM可能产生“幻觉”,需结合人工测试确保代码正确性。
http://www.dtcms.com/a/613645.html

相关文章:

  • Modbus RTU 转 Modbus TCP:物联网网关实现中药产线巴赫曼与三菱PLC互联
  • 商城网站都有哪 些功能济南网签查询系统
  • Flink20 SQL 窗口函数概述
  • Java基础 | SpringBoot实现自启动的方式
  • 【ZeroRange WebRTC】UDP无序传输与丢包检测机制深度分析
  • 零基础建设网站视频教程抚州的电子商务网站建设公司
  • qt显示类控件--- Label
  • 【深度学习】基于Faster R-CNN与HRNet的豆类品种识别与分类系统
  • 专业建设网站公司东莞阿里巴巴代运营
  • 【深度学习】YOLOv10n-MAN-Faster实现包装盒flap状态识别与分类,提高生产效率
  • 网站备案需要费用吗中国容桂品牌网站建设
  • 知识图谱与中医古籍的数智化融合:中医药多智能体大模型系统的未来展望
  • wordpress全站cdn法人变更在哪个网站做公示
  • 鸿蒙开发TypeScript第六课:对象
  • 【Linux日新月异(四)】CentOS 7进程管理深度指南:掌控系统生命线
  • 如何避免新手对 instanceof 的误解?
  • 每周AI看 | OpenAI发布GPT-5.1、网易云商自研内部知识问答Agent、商汤开源空间智能大模型
  • 移动端部署噩梦终结者:动态稀疏视觉Transformer的量化实战
  • 【LeetCode刷题】找到字符串中所有字母异位词
  • 榆林城乡建设规划官方网站中国室内设计师
  • oneinstack wordpress成都官网seo服务
  • Go语言编译 | 探讨Go语言编译原理与优化技巧
  • 【深入理解】动静态库的制作、使用与加载原理(附详细操作指南)
  • OpenFeign:完整学习笔记
  • Vue 3 的Suspense组件:讲解如何使用_Suspense_处理异步组件加载状态
  • 【go.sixue.work】2.2 面向对象:接口与多态
  • 建设网站需要收费吗做淘客找单子的网站
  • 视频号直播视频录制
  • 抓取资源的网站怎么做珠海网站设计培训班
  • CPO(Co-Packaged Optics) 是整个数据中心互连范式的下一代核心