
最近在探索AI智能体开发时发现很多项目停留在简单的“问答”或“工具调用”层面缺乏深度的自主决策和持续学习能力。一个真正有价值的智能体应该像一位经验丰富的顾问不仅能理解当前任务更能基于历史经验、环境反馈和内在目标主动规划、决策并优化自身行为。这正是“定了么智能体”所尝试构建的“东方智慧 × 自我决策成长体系”的核心。本文将深入拆解这一体系的设计理念与实现路径。我们将从智能体的基本概念出发逐步构建一个具备目标管理、反思学习和策略进化的智能体原型。无论你是对AI智能体开发感兴趣的初学者还是希望为现有系统注入“灵魂”的进阶开发者都能从本文中获得一套可复用的方法论和代码实践。1. 背景与核心概念什么是“自我决策成长体系”在讨论具体实现之前我们首先要厘清几个关键概念。智能体Agent在AI语境下通常指一个能够感知环境、自主决策并执行行动以实现目标的软件实体。它不同于传统的程序其核心在于“自主性”。“定了么”的涵义在这里“定了么”并非一个外部产品而是对智能体核心状态的隐喻——目标是否确定定了决策是否做出定了行动是否执行定了它描绘了智能体从模糊意向到坚定执行的完整决策闭环。东方智慧的内核我们借鉴的不是玄学而是东方哲学中系统化、辩证的思维模型例如“知行合一”强调认知知与行动行的统一。智能体不应只懂分析更要能行动并在行动后反思更新认知。“吾日三省吾身”体现了持续反思与自我优化的精神。智能体需要定期回顾历史决策与结果总结经验教训。“顺势而为”关注环境适应性。智能体的决策需考虑外部环境的变化灵活调整策略。自我决策成长体系便是融合上述理念的一个技术框架。它使智能体具备目标管理能力能设定、拆解并动态调整目标。情境感知与推理能力能理解复杂环境评估不同选择的利弊。行动执行与反思能力能执行具体动作并根据结果反馈进行有效性评估。策略迭代进化能力能将成功的决策模式固化为经验策略并持续优化。简单说我们要构建的不仅是一个“执行者”更是一个“思考者”和“学习者”。2. 环境准备与版本说明我们将使用Python作为主要开发语言并借助LangChain框架来构建智能体的基础骨架因为它提供了良好的智能体抽象和工具集成能力。同时我们会用到一个大语言模型LLM作为智能体的“大脑”。核心环境与版本操作系统Windows 10/11, macOS 或 Linux (Ubuntu 20.04) 均可。Python版本 3.9 或 3.10。建议使用虚拟环境venv或conda。关键库langchain0.1.0智能体框架核心。langchain-openai0.0.5用于集成OpenAI模型或其他兼容API的模型。python-dotenv1.0.0管理环境变量如API密钥。可选组件记忆存储为了持久化智能体的经验可以使用轻量级数据库如sqlite3Python内置或chromadb用于向量化记忆存储。模型服务本文示例使用OpenAI GPT-4/3.5-Turbo的API你也可以替换为本地部署的Ollama如Llama 3、通义千问、DeepSeek等任何兼容LangChain的ChatModel。项目初始化# 创建项目目录并进入 mkdir dinglime_agent cd dinglime_agent # 创建虚拟环境以venv为例 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate # 安装核心依赖 pip install langchain langchain-openai python-dotenv环境变量配置在项目根目录创建.env文件用于安全存储API密钥。# .env 文件内容 OPENAI_API_KEY你的OpenAI_API密钥 # 如果使用其他模型例如通义千问 # DASHSCOPE_API_KEY你的DashScope_API密钥3. 核心架构与原理拆解“定了么智能体”的体系可以抽象为一个三层循环架构它构成了智能体自我成长的核心引擎。3.1 三层循环架构外层循环目标审视与设定功能这是智能体的战略层。它定期或由事件触发审视当前长期目标是否合理是否与环境变化匹配并可能提出新的高阶目标或调整现有目标。类比类似于公司的年度战略规划。触发条件时间周期、重大环境变化、任务连续失败。中层循环任务规划与决策功能这是智能体的战术层。针对当前活跃的目标将其分解为具体的子任务序列并为每个子任务选择最合适的工具或方法策略。核心基于“东方智慧”进行决策。例如在多个可行方案中评估其“势”成功概率、资源消耗选择“顺势而为”的最优解。输出一个可执行的行动计划。内层循环行动执行与反思功能这是智能体的执行层。忠实地执行行动计划中的每一个步骤观察结果并与预期进行对比。关键环节“省”反思行动完成后立即进行复盘。“行动是否达到预期为什么有何意外收获或损失” 反思的结果将形成一条“经验”存入记忆库。输出任务结果、成功/失败标志、新产生的经验数据。3.2 核心组件定义记忆库存储智能体的全部“经验”。每条经验包含情境(S)、决策(A)、结果(R)、反思(I)。这构成了一个完整的SARI单元是智能体学习的原材料。策略库存储从成功经验中抽象出的决策模式。例如“当遇到类型为X的问题且在情境Y下采用决策Z的成功率很高”。策略是经验的升华。评估器一个用于量化决策好坏、结果价值的模块。它可能基于规则也可能基于另一个轻量级模型。它为“反思”提供依据。目标树一个动态数据结构用于管理智能体的目标层级关系如核心目标 - 关键结果 - 任务。4. 完整实战案例构建一个“学习型技术调研助手”让我们通过一个具体案例来落地上述体系。我们将构建一个智能体其核心目标是“持续跟踪并掌握AIGC领域的最新开源项目与技术动态”。4.1 项目结构与核心模块定义首先创建我们的项目文件结构。dinglime_agent/ ├── .env ├── main.py # 主程序入口 ├── core/ │ ├── __init__.py │ ├── agent.py # 智能体核心类 │ ├── memory.py # 记忆与经验存储 │ ├── strategist.py # 策略管理与决策 │ └── evaluator.py # 结果评估器 ├── tools/ # 智能体可用的工具集 │ ├── __init__.py │ ├── web_search.py # 网络搜索工具 │ └── code_analyzer.py # 代码分析工具 └── utils/ └── __init__.py4.2 实现记忆与经验存储我们从最基础的记忆模块开始。这里使用一个简单的列表在内存中模拟生产环境可替换为数据库。# core/memory.py from typing import List, Dict, Any, Optional from datetime import datetime from pydantic import BaseModel class Experience(BaseModel): 一条经验即SARI单元 situation: str # 情境描述 action: str # 采取的决策/行动 result: str # 行动导致的结果 insight: str # 反思与洞见 timestamp: datetime value_score: float 0.0 # 评估器给出的价值分数 class Memory: 智能体的记忆库 def __init__(self): self.experiences: List[Experience] [] self.strategies: List[Dict] [] # 简单的策略列表 def add_experience(self, situation: str, action: str, result: str, insight: str): 添加一条新经验 exp Experience( situationsituation, actionaction, resultresult, insightinsight, timestampdatetime.now() ) self.experiences.append(exp) print(f[记忆] 经验已记录{situation[:50]}...) return exp def get_relevant_experiences(self, query: str, k: int 3) - List[Experience]: 根据查询检索相关经验简化版基于关键词匹配 # 生产环境应使用向量数据库进行语义检索 relevant [] query_lower query.lower() for exp in self.experiences[-20:]: # 检索最近20条 if query_lower in exp.situation.lower() or query_lower in exp.action.lower(): relevant.append(exp) if len(relevant) k: break return relevant def derive_strategy(self, experience: Experience): 从高价值经验中推导策略简化示例 if experience.value_score 0.7: # 假设高分经验值得提炼 strategy { pattern: f当{experience.situation}时, recommended_action: experience.action, confidence: experience.value_score, source_exp_id: len(self.experiences) - 1 } self.strategies.append(strategy) print(f[策略] 新策略已生成{strategy[pattern][:30]}...)4.3 实现工具集智能体需要通过工具与环境交互。这里实现两个基础工具。# tools/web_search.py import requests from typing import List # 注意此处仅为示例实际需使用合规的搜索引擎API class WebSearchTool: 模拟网络搜索工具请替换为真实API name web_search description 在互联网上搜索最新的技术资讯和开源项目信息。输入应为搜索关键词。 def run(self, query: str) - str: print(f[工具-搜索] 正在搜索{query}) # 模拟API调用和结果解析 # 真实情况调用Serper API、Google Custom Search等 mock_results [ f1. 开源项目‘LangChain’发布v0.1版本增强了智能体工作流。, f2. 论文《Self-Improving AI Agents》提出新型反思架构。, f3. ‘AutoGen’微软框架更新支持多智能体协作。 ] return \n.join(mock_results[:3]) # 返回前3条结果 # tools/code_analyzer.py class CodeAnalyzerTool: 模拟代码分析工具 name analyze_github_trending description 分析GitHub Trending页面的项目总结技术栈和特点。输入可为空或指定语言。 def run(self, language: str ) - str: print(f[工具-分析] 分析GitHub Trending语言{language if language else 所有}) mock_analysis - 项目A: 一个基于RAG的问答系统使用FastAPI和Pinecone本周星标增长500。 - 项目B: 轻量级LLM微调框架支持LoRA代码简洁适合初学者。 - 项目C: 可视化智能体状态调试工具使用React和WebSockets。 return mock_analysis4.4 构建智能体核心与决策流程这是最核心的部分我们将智能体的三层循环思想融入其运行步骤中。# core/agent.py import os from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_react_agent from langchain.prompts import PromptTemplate from langchain.tools import Tool from .memory import Memory from tools.web_search import WebSearchTool from tools.code_analyzer import CodeAnalyzerTool from dotenv import load_dotenv load_dotenv() class DinglimeAgent: 定了么智能体 def __init__(self, name: str TechResearchAssistant): self.name name self.llm ChatOpenAI(modelgpt-4, temperature0.2, api_keyos.getenv(OPENAI_API_KEY)) self.memory Memory() self.current_goal 持续跟踪并掌握AIGC领域的最新开源项目与技术动态 self.cycle_count 0 # 初始化工具 web_search_tool Tool.from_function( funcWebSearchTool().run, nameweb_search, descriptionWebSearchTool.description ) code_analyzer_tool Tool.from_function( funcCodeAnalyzerTool().run, nameanalyze_github_trending, descriptionCodeAnalyzerTool.description ) self.tools [web_search_tool, code_analyzer_tool] # 构建带有反思提示的智能体 self.prompt self._create_reflective_prompt() self.agent create_react_agent(self.llm, self.tools, self.prompt) self.agent_executor AgentExecutor(agentself.agent, toolsself.tools, verboseTrue, handle_parsing_errorsTrue) def _create_reflective_prompt(self) - PromptTemplate: 创建融合了反思机制的提示词模板 template 你是一个具有自我反思和成长能力的技术调研助手定了么智能体。 你的核心目标是{goal} 你拥有以下记忆和经验 {relevant_experiences} 请遵循“思考-行动-观察-反思”的循环 1. 思考分析当前任务参考历史经验规划步骤。 2. 行动使用工具执行。工具包括{tool_descriptions} 3. 观察记录工具返回的结果。 4. 反思本轮结束后必须生成一条“反思”总结得失为后续行动提供指导。 当前任务{input} 开始你的循环 return PromptTemplate.from_template(template) def _retrieve_context(self, task: str) - str: 为当前任务检索相关的历史经验和策略 relevant_exps self.memory.get_relevant_experiences(task) context 近期相关经验\n if relevant_exps: for exp in relevant_exps: context f- 情境{exp.situation}\n 行动{exp.action}\n 结果{exp.result[:100]}...\n 反思{exp.insight}\n\n else: context 暂无直接相关经验。\n return context def run_cycle(self, task_input: str): 执行一个完整的‘思考-行动-观察-反思’循环中层内层循环 self.cycle_count 1 print(f\n{*60}) print(f第 {self.cycle_count} 轮循环 | 目标{self.current_goal}) print(f任务{task_input}) print(*60) # 1. 检索相关记忆作为上下文 context self._retrieve_context(task_input) # 2. 准备并运行智能体 tool_descs \n.join([f{t.name}: {t.description} for t in self.tools]) full_input { goal: self.current_goal, relevant_experiences: context, tool_descriptions: tool_descs, input: task_input } try: response self.agent_executor.invoke(full_input) raw_output response.get(output, ) except Exception as e: raw_output f执行出错{e} # 3. 解析输出分离“行动结果”和“反思” # 这里简化处理实际应用中需要更精细的解析或让LLM结构化输出。 lines raw_output.split(\n) action_result, reflection , in_reflection False for line in lines: if 反思 in line or 反思: in line: in_reflection True if in_reflection: reflection line \n else: action_result line \n reflection reflection.strip() or 本次行动未明确生成反思内容。 action_result action_result.strip() print(f\n[行动结果]\n{action_result[:500]}...) print(f\n[反思]\n{reflection}) # 4. 评估与记忆存储模拟评估器打分 # 简化评估如果结果包含有效信息且反思有内容则给予较高分 value_score 0.5 if len(action_result) 50 and len(reflection) 20: value_score 0.8 if 出错 in action_result: value_score 0.2 # 5. 将本轮循环转化为经验存入记忆 new_exp self.memory.add_experience( situationtask_input, actionf使用工具执行调研任务, resultaction_result[:200], # 存摘要 insightreflection ) new_exp.value_score value_score # 6. 尝试从高价值经验中提炼策略 if value_score 0.7: self.memory.derive_strategy(new_exp) return action_result, reflection def review_and_adjust_goal(self): 外层循环定期审视并调整目标 print(f\n{#*60}) print(【外层循环启动】目标审视与调整) print(#*60) review_prompt f 你是一名战略规划师。请审视智能体的当前目标{self.current_goal} 基于过去{self.cycle_count}轮循环的经验如下判断该目标是否依然合适 是否需要聚焦、拓宽或转向请给出具体的调整建议1-2句话。 经验摘要{[(exp.situation[:30], exp.value_score) for exp in self.memory.experiences[-5:]]} try: review_response self.llm.invoke(review_prompt) suggestion review_response.content print(f目标审视建议{suggestion}) # 这里可以添加逻辑根据建议自动或半自动地调整 self.current_goal except Exception as e: print(f目标审视过程出错{e})4.5 主程序与运行演示最后我们创建一个主程序来驱动智能体运行多个循环并模拟外层循环的触发。# main.py from core.agent import DinglimeAgent import time def main(): print(启动‘定了么智能体-技术调研助手’...) agent DinglimeAgent() # 模拟连续执行多个任务中层/内层循环 tasks [ 搜索今天关于‘大语言模型智能体’的最新论文或博客文章。, 查看GitHub上当前有哪些热门的AIGC相关Python库。, 了解‘RAG’技术最近一周有什么新的实践或优化方案。 ] for task in tasks: agent.run_cycle(task) time.sleep(1) # 模拟间隔 # 模拟在若干轮后触发外层循环 print(\n\n模拟运行一段时间后...) time.sleep(2) agent.review_and_adjust_goal() # 查看积累的记忆和策略 print(f\n\n智能体运行结束。共产生{len(agent.memory.experiences)}条经验。) print(f提炼出{len(agent.memory.strategies)}条策略。) if agent.memory.strategies: print(策略示例, agent.memory.strategies[0]) if __name__ __main__: main()运行与预期输出在终端激活虚拟环境后运行python main.py。你将看到类似以下的输出清晰地展示了智能体的思考、行动、反思和成长过程。启动‘定了么智能体-技术调研助手’... 第 1 轮循环 | 目标持续跟踪并掌握AIGC领域的最新开源项目与技术动态 任务搜索今天关于‘大语言模型智能体’的最新论文或博客文章。 [工具-搜索] 正在搜索大语言模型智能体 最新论文 博客 [行动结果] 根据搜索发现一篇名为《Self-Improving AI Agents》的论文被提及... ... [反思] 本次搜索找到了目标信息。反思关键词“大语言模型智能体”比较宽泛下次可以加上“2024”、“review”等限定词提高效率。同时应优先关注顶会如NeurIPS, ACL的预印本。 ... 【记忆】 经验已记录搜索今天关于‘大语言模型智能体’的最新论文或博客文章。... 【策略】 新策略已生成当搜索今天关于‘大语言模型智能体’的最新论文...5. 常见问题与排查思路在实现和运行此类自我进化智能体时你可能会遇到以下问题问题现象可能原因解决思路智能体陷入循环无法做出决策1. 提示词Prompt中指令不清晰。2. 工具定义或返回格式有误导致解析失败。3. LLM本身存在“循环思考”倾向。1. 优化Prompt明确每一步的结束条件加入“如果无法解决请总结当前信息并停止”。2. 检查工具函数的输入输出确保符合LangChain Tool的规范。使用verboseTrue查看详细日志。3. 设置max_iterations参数限制最大步数或降低temperature减少随机性。记忆检索不准确找不到相关经验1. 基于关键词的检索方式过于简单。2. 经验SARI的situation字段描述太模糊。1.升级记忆检索引入向量数据库如Chroma, FAISS将经验和查询转换为向量进行语义相似度搜索。2.优化经验结构化在记录situation时用更规范的语言描述例如包含关键实体、状态和约束条件。反思内容空洞无法形成有效策略1. LLM生成的反思过于笼统如“下次要更好”。2. 缺乏明确的反思引导框架。1.设计结构化反思模板强制要求LLM按点输出例如“1. 成功点2. 失败点3. 根本原因4. 可复用的模式”。2.引入评估器实现一个更精细的评估器为结果打分并将分数反馈给反思环节让反思更有依据。外层循环目标调整过于频繁或不触发触发条件设计不合理。设计更科学的触发机制-定量触发每完成N个任务循环后触发。-定性触发当连续失败次数超过阈值或环境发生剧变通过监控外部API感知时触发。-混合触发结合定时和事件驱动。运行速度慢成本高1. 每轮循环调用LLM次数过多。2. 记忆检索或策略匹配计算量大。1.优化Prompt减少不必要的上下文压缩历史经验。2.缓存机制对常见或相似的任务直接使用缓存的经验或策略结果避免重复调用LLM。3.使用轻量级模型对于反思、评估等非核心推理任务可使用更小、更快的模型。6. 最佳实践与工程建议将“自我决策成长体系”应用于实际项目时遵循以下建议可以大幅提升成功率和可维护性。1. 目标设计SMART原则为智能体设定的初始目标应遵循SMART原则具体的、可衡量的、可实现的、相关的、有时限的。例如将“跟踪AIGC动态”优化为“每周从Hacker News、Arxiv和GitHub Trending中筛选出至少5个星标增长超过100的AIGC相关项目并生成一份技术亮点摘要报告”。明确的目标能让评估和反思更有依据。2. 经验与策略的存储与索引生产级记忆库务必使用专业的向量数据库如Chroma, Weaviate, Pinecone存储经验。为每条经验生成高质量的向量嵌入是关键可以单独用一个Embedding模型处理situation和result字段。策略的版本管理策略本身也会迭代。应为策略添加版本号、创建时间、生效条件和置信度。当环境变化导致策略失效时应有降级或回滚机制。3. 安全与边界控制行动沙盒智能体执行的任何写操作如发邮件、修改文件、调用付费API必须在严格的沙盒环境或模拟器中先行测试。特别是基于LLM的智能体可能存在“幻觉”导致危险动作。人工审核环在关键决策点如目标重大调整、执行高风险操作前引入人工审核。可以设计为智能体生成待办事项由人类确认后再执行。伦理与偏见审查定期检查记忆库中的经验和策略防止其学习并固化有害的偏见或模式。可以设置一个“伦理评估器”作为过滤层。4. 评估体系的构建评估器是成长体系的“指挥棒”。不要只依赖一个简单的规则或LLM打分。建议构建多维度评估任务完成度是否达成了预设的子目标结果质量产出的信息是否准确、相关、完整可结合RAG做事实核查效率成本消耗的Token数、API调用次数、时间成本是否在合理范围策略新颖性是否探索了新的、有效的解决问题路径5. 可观测性与调试为智能体的每个核心环节感知、决策、行动、反思添加详细的日志。日志应结构化包含cycle_idphaseinput_dataoutput_dataused_toolsdecision_reasoning(如果可能) 这能让你在出现问题时像调试传统软件一样清晰地回溯智能体的“思考”过程。6. 渐进式成长与冷启动一个空的智能体最初表现会很差。不要期望它从一开始就完美。种子经验在启动初期可以人工注入一些高质量的经验SARI单元作为初始策略的来源。模仿学习可以先让智能体在“观察模式”下运行记录人类专家处理同类任务的过程将其转化为初始经验。课程学习从简单、明确的任务开始逐步增加任务的复杂度和模糊性让智能体稳步成长。构建一个具备“东方智慧”的自我成长智能体是一个将系统性思维、工程实践和AI能力深度融合的过程。它不再是简单的提示工程而是设计一个能够持续学习、适应并进化的数字生命体雏形。本文提供的框架和代码是一个起点你可以在此基础上为智能体注入更丰富的工具、更精准的评估和更强大的记忆使其在特定的垂直领域真正发挥出“顾问”级的价值。