Agent无反馈规划【实践】

基于LLM的元协调器Agent框架:构建多Agent协作系统的核心架构与实践 在人工智能领域,多智能体系统通过任务分解与协作解决复杂问题,其核心在于协调机制的设计。元协调器作为管理Agent的Agent,采用基于大型语言模型的规划器进行任务理解与分解,结合确定性工作流引擎实现可靠执行。这一架构模式在自动化工作流、复杂客服系统和研究助手等场景中具有重要技术价值,能够显著提升任务处理的灵活性与可靠性。本文以yonghyeokrhee/meta-coordinator-agent-template项目为例,深入解析了其协调器核心、Agent注册发现、工作流引擎等关键组件,并探讨了提示词工程 阅读详情

概括

规划模块是智能体理解问题并可靠寻找解决方案的关键。任务分解的流行技术包括思维链(COT)和思维树(TOT),分别可以归类为单路径推理和多路径推理,还有更复杂的思维图(GOT)
本文重在实践,理论知识简单概括,具体可参考:

方法核心结构关键能力arXiv 链接
Chain-of-Thought线性链循序渐进的推理2201.11903
Tree of Thoughts思维树探索、回溯、前瞻性搜索2305.10601
Graph of Thoughts思维图聚合、循环、任意思维融合2308.09687

COT

COT通常使用prompt工程来完成。核心的原因是因为大语言模型就是基于COT模式(线性)进行思考答复的,所以只需要花很少的成本就可以训练大模型回答得更精确。

Zero-shot

LLM:llama2-chinese:13b(现在的模型都很聪明了,需要找一个史前老模型来模拟)
举例:
请添加图片描述
通常我们是上面这种直接询问问题,这种模式完全依赖LLM的能力,有可能会直接出结果,也有可能进行思考后再出结果。
可以看到上面的回答是不准确的,正确答案是9个
那如果我们换一个问法呢?
请添加图片描述
很奇怪为什么在prompt后面加一个“Let’s think step by step”就能激发模型的潜在能力?
这种技术就是强制让模型一步一步思考,对问题进行分治,分治后的小问题模型解答起来可能就会轻松很多了,这种技术就叫做:Zero-shot
还有其他神器么?
在这里插入图片描述
来自:https://arxiv.org/abs/2205.11916
第二列是准确率,位居第一的就是“Let’s think step by step”

One-shot & few-shot

再来看一个Zero-shot解决不了的案例
请添加图片描述
没办法一步一步思考也解决不了,可能是对小偷被抓、归还等概念理解不准确导致的,那有没有可能让大模型更了解我们这种场景呢?
请添加图片描述
我们现在不仅让大模型一步一步思考,并且我们提供一个案例,并且进行了分步思考和解答(实际应用只需要在prompt前后加上具体场景案例就行了)稍微对prompt改动就可以让模型回答正确。这种方法就叫做One-shot
同理再多加几个case这种就叫做few-shot

TOT

TOT的核心思想是维护一个树结构,每个节点代表一个部分解决方案,然后通过扩展(生成新的想法)和评估来搜索解决方案。
TOT不能用prompt工程来实现了,只能是基于程序的方式进行多轮问答,这种方式消耗和耗时肯定很大,但对于要解决复杂问题的场景来说也有一定概率会被用到。

ToT 框架通常包含四个步骤:

  1. 思维分解: 将问题分解成多个连续的推理步骤。
  2. 思维生成: 在每一个步骤上,生成多种可能的“思维”(即下一步该怎么走的不同想法)。
  3. 思维评估: 使用启发式方法(如模型自我评估)来评估每个思维的潜在价值。
  4. 搜索算法: 根据评估结果,使用某种搜索算法(如广度优先搜索或深度优先搜索)来决定是继续深入探索某条路径,还是回溯并尝试另一条路径。

用之前的模型来举例:
请添加图片描述
模型无法回答这种高难度的问题(我们可能感觉不是很难)
这个时候我们怎么才能不改变模型本身的情况下得到正确答案呢?
在树的数据结构中,我们常用的回溯法来解决问题,那么应用在大模型上是否也可以呢?

TOT思维树解答过程 - 五人排名问题

根节点 (深度0)
│
├── 状态: [] (空状态)
│   评估: 可行 - 初始状态
│   ↓
│
├── 深度1 - 尝试E在第一位
│   │
│   ├── 状态: [E] ✓
│   │   评估: 可行 - E可以是第一名
│   │   ↓
│   │
│   ├── 深度2 - 尝试A
│   │   │
│   │   ├── 状态: [E, A] ✓
│   │   │   评估: 可行 - 不违反约束
│   │   │   ↓
│   │   │
│   │   ├── 深度3 - 尝试B
│   │   │   │
│   │   │   ├── 状态: [E, A, B] ✗
│   │   │   │   评估: 不可行 - A要在B前面,但E已占第一位
│   │   │   │   ← 回溯
│   │   │   │
│   │   │   └── 状态: [E, A, C] ✓
│   │   │       评估: 可行 - 继续探索
│   │   │       ↓
│   │   │
│   │   └── ... (继续分支)
│   │
│   └── 深度2 - 尝试其他选择
│       │
│       ├── 状态: [E, B] ✗
│       │   评估: 不可行 - A要在B前面
│       │   ← 回溯
│       │
│       └── 状态: [E, C] ✓
│           评估: 可行 - 继续探索
│           ↓
│
├── 深度1 - 尝试E在最后一位
│   │
│   ├── 状态: [A, E] ✗
│   │   评估: 不可行 - E必须在第一或最后,不能在中位
│   │   ← 回溯
│   │
│   └── 状态: [?, E] ✓
│       评估: 可行 - E在最后
│       ↓
│
└── 深度1 - 尝试其他人第一位
    │
    ├── 状态: [A] ✓
    │   评估: 可行 - A可以是第一名
    │   ↓
    │
    ├── 状态: [B] ✗
    │   评估: 不可行 - A要在B前面
    │   ← 回溯
    │
    └── 状态: [C] ✓
        评估: 可行 - 继续探索
        ↓

完整搜索路径示例:

深度0: [] → 评估: 可行
    ↓
深度1: [E] → 评估: 可行
    ↓
深度2: [E, A] → 评估: 可行
    ↓
深度3: [E, A, B] → 评估: 不可行 ← 回溯
    ↓
深度3: [E, A, C] → 评估: 可行
    ↓
深度4: [E, A, C, B] → 评估: 不可行 ← 回溯
    ↓
深度4: [E, A, C, D] → 评估: 不可行 ← 回溯
    ↓
深度3: [E, A, D] → 评估: 不可行 ← 回溯
    ↓
深度2: [E, B] → 评估: 不可行 ← 回溯
    ↓
深度2: [E, C] → 评估: 可行
    ↓
深度3: [E, C, A] → 评估: 可行
    ↓
深度4: [E, C, A, B] → 评估: 可行
    ↓
深度5: [E, C, A, B, D] → 评估: 完整解 ✓

最终解决方案: [E, C, A, B, D]

TOT过程特点:
✓ 思维生成:每个节点生成多个可能的下一步
✓ 思维评估:Ollama评估每个状态的可行性  
✓ 深度优先:优先探索一个分支到最深
✓ 回溯机制:遇到死路时返回上一层
✓ 状态空间:系统性地探索所有可能路径
✓ 约束传播:利用约束条件剪枝无效分支

图形符号说明:
✓  - 可行状态
✗  - 不可行状态(剪枝)
↓  - 继续深度探索  
←  - 回溯到上一层
?  - 待确定的位置
  1. 让模型自己先进行思考,利用分治的思想,只需要他思考排名第一的情况有哪些?最好能按照可信度排序
  2. 然后让模型自己自己思考当前这种情况是否违背题意(剪枝)
  3. 再让模型思考下一步,下一个排名(当然对DFS进行适当修改也可以的,因为现在模型能力很强可以一下子推理出多步,不一定要一步一步运行,可以减少和模型的交互次数)
  4. 重复上面1~3直到得出你想要的所有答案

参考代码:

import requests
import json
from typing import List, Dict, Any, Optional
import time
import re
from openai import OpenAI


class TOTSolver:
    def __init__(
            self,
            model: str = "gpt-3.5-turbo",
            api_key: Optional[str] = None,
            base_url: str = ""
    ):
        self.model = model
        self.client = OpenAI(api_key=api_key, base_url=base_url)  # 如果 api_key 为 None,会自动读取环境变量 OPENAI_API_KEY

    def query_openai(self, prompt: str, max_retries: int = 3) -> str:
        """向 OpenAI 发送查询请求"""
        messages = [
            {"role": "user", "content": prompt}
        ]

        for attempt in range(max_retries):
            try:
                response = self.client.chat.completions.create(
                    model=self.model,
                    messages=messages,
                    timeout=60,
                    temperature=0.0  # 为了确定性,可设为 0
                )
                return response.choices[0].message.content.strip()
            except Exception as e:
                print(f"Attempt {attempt + 1} failed: {e}")
                if attempt < max_retries - 1:
                    time.sleep(2)
                else:
                    return ""

    def _parse_text_response(self, response: str) -> Dict[str, Any]:
        """解析文本响应,处理包含JSON代码块的情况"""

        # 方法1:尝试提取JSON代码块
        json_match = re.search(r'```json\s*(.*?)\s*```', response, re.DOTALL)
        if json_match:
            try:
                json_str = json_match.group(1)
                return json.loads(json_str)
            except:
                pass  # 如果提取的JSON无效,继续尝试其他方法

        # 方法2:尝试直接查找JSON对象
        json_match = re.search(r'\{.*?\}', response, re.DOTALL)
        if json_match:
            try:
                json_str = json_match.group(0)
                return json.loads(json_str)
            except:
                pass

        # 方法3:基于关键词的文本分析
        response_lower = response.lower()

        # 检查可行性
        feasible_keywords = ["feasible: true", "可行", "合理", "可以", "正确", "feasible", "reasonable", "valid", "yes"]
        infeasible_keywords = ["feasible: false", "不可行", "不合理", "违反", "错误", "infeasible", "invalid", "violat",
                               "no"]

        feasible = any(keyword in response_lower for keyword in feasible_keywords)
        infeasible = any(keyword in response_lower for keyword in infeasible_keywords)

        # 提取原因
        reason = "无法确定具体原因"
        reason_patterns = [
            r'reason[:\s]*["\']?(.*?)["\']?[\s,}]',
            r'原因[:\s]*["\']?(.*?)["\']?',
            r'because[:\s]*["\']?(.*?)["\']?'
        ]

        for pattern in reason_patterns:
            match = re.search(pattern, response, re.IGNORECASE)
            if match:
                reason = match.group(1).strip()
                break

        # 提取置信度
        confidence = "中"
        if "high" in response_lower or "高" in response_lower:
            confidence = "高"
        elif "low" in response_lower or "低" in response_lower:
            confidence = "低"

        return {
            "feasible": feasible and not infeasible,
            "reason": reason if reason != "无法确定具体原因" else response[:200] + "..." if len(
                response) > 200 else response,
            "confidence": confidence
        }

    def evaluate_state(self, current_state: List[str], remaining_items: List[str], constraints: str) -> Dict[str, Any]:
        """评估当前状态的可行性"""
        prompt = f"""
        分析以下排名状态的合理性,只需要判断当前已确定的排名是否和约束条件冲突,尚未排名的人员会安排在后面:
        当前已确定的排名(从前到后依次是第1名、第2名...):{current_state if current_state else "空"}
        尚未排名的人员:{remaining_items}
        约束条件:{constraints}

        请分析:
        1. 当前已确定的排名是否违反任何约束条件?
        2. 当前状态是否还有继续探索的价值?

        请用以下JSON格式回答,不要额外解释,不要写注释:
        {{
        "feasible": true/false,
            "reason": "理由",
            "confidence": "高/中/低"
        }}
        """
        response = self.query_openai(prompt)
        # print(f"评估当前状态的可行性:prompt={prompt}\nres={response}")

        # 尝试多种解析方法
        try:
            # 方法1:直接解析JSON
            if response.strip().startswith('{'):
                return json.loads(response.strip())
        except:
            # res = response.replace('\t', '').replace('\n', '').replace('\r', '')
            # print(f"json格式解析错误:res={res}")
            pass

        # 方法2:提取JSON对象
        json_match = re.search(r'\{.*?\}', response, re.DOTALL)
        if json_match:
            try:
                return json.loads(json_match.group(0))
            except:
                res = response.replace('\t', '').replace('\n', '').replace('\r', '')
                print(f"json格式解析错误:res={res}")
                pass

        # 方法3:使用改进的文本解析
        return self._parse_text_response(response)

    def _parse_state_generation(self, response: str, current_state: List[str], remaining_items: List[str]) -> List[
        List[str]]:
        """解析状态生成响应,处理多种格式"""
        states = []

        response = response.strip()
        json_str = ""
        if response.startswith('{') and response.endswith('}'):
            # 方法1:直接提取json
            json_str = response
        else:
            # 方法2:提取JSON对象
            json_match = re.search(r'\{.*?\}', response, re.DOTALL)
            if json_match:
                json_str = json_match.group(1)
        if len(json_str) != 0:
            try:
                data = json.loads(json_str)
                if "states" in data and isinstance(data["states"], list):
                    for state in data["states"]:
                        if isinstance(state, list) and len(state) == len(current_state) + 1:
                            states.append(state)
            except:
                res = response.replace('\t', '').replace('\n', '').replace('\r', '')
                print(f"json格式解析错误:res={res}")
                pass

        # 方法2:尝试提取所有类似列表的结构
        list_patterns = [
            r'\[[^\]]*\]',  # 标准列表格式
            r'排名[::\s]*([A-Z][,\s]*[A-Z]*)',  # 中文排名格式
            r'order[:\s]*([A-Z][,\s]*[A-Z]*)'  # 英文排名格式
        ]

        found_states = []
        for pattern in list_patterns:
            matches = re.findall(pattern, response, re.IGNORECASE)
            for match in matches:
                if isinstance(match, str):
                    # 处理列表格式 [A, B, C]
                    if match.startswith('['):
                        try:
                            state = eval(match)
                            if isinstance(state, list):
                                found_states.append(state)
                        except:
                            continue
                    # 处理逗号分隔格式 A, B, C
                    else:
                        try:
                            items = [item.strip() for item in match.split(',')]
                            if all(item in current_state + remaining_items for item in items):
                                found_states.append(items)
                        except:
                            continue

        # 验证并添加有效状态
        for state in found_states:
            # 检查状态是否包含当前状态且只多一个元素
            if (len(state) == len(current_state) + 1 and
                    all(item in state for item in current_state) and
                    all(item in current_state + remaining_items for item in state)):
                states.append(state)

        # 方法3:如果没有找到有效状态,生成所有可能组合
        if not states:
            print("未解析到有效状态,生成所有可能组合")
            for item in remaining_items:
                new_state = current_state + [item]
                states.append(new_state)

        # 去重
        unique_states = []
        seen = set()
        for state in states:
            state_tuple = tuple(state)
            if state_tuple not in seen:
                seen.add(state_tuple)
                unique_states.append(state)

        return unique_states

    # 生成下一步可能的状态
    def generate_next_states(self, current_state: List[str], remaining_items: List[str], constraints: str) -> List[
        List[str]]:
        prompt = f"""
        给定当前状态和约束条件,生成所有合理的下一步状态,下一步只需要让当前状态多一个项目:
        当前状态:{current_state}
        剩余项目:{remaining_items}
        约束条件:{constraints}

        请列出所有符合约束条件的下一步可能状态。
        按合理性从高到低排序。

        请用以下JSON格式回答,不要额外解释,不要写注释:
        {{
        "states": [
                ["A", ...],
                ["D", ...],
                ...
            ]
        }}
        """

        response = self.query_openai(prompt)
        # print(f"生成下一步可能的状态:prompt={prompt}\nres={response}")
        return self._parse_state_generation(response, current_state, remaining_items)

    def is_complete_solution(self, state: List[str], all_items: List[str], constraints: str) -> bool:
        """检查是否为完整解决方案"""
        if set(state) != set(all_items):
            return False

        prompt = f"""
        检查以下排名是否满足所有约束条件:
        完整排名:{state}
        所有人员:{all_items}
        约束条件:{constraints}
        这个排名是否完全满足所有约束条件?
        请用以下JSON格式回答,不要额外解释,不要写注释:
        {{
            "complete": true/false,
            "reason": "简要说明"
        }}
        """
        response = self.query_openai(prompt)
        # print(f"检查是否为完整:prompt={prompt}\nres={response}")

        # 尝试解析JSON响应
        try:
            json_match = re.search(r'\{.*?\}', response, re.DOTALL)
            if json_match:
                result = json.loads(json_match.group(0))
                return result.get("complete", False)
        except:
            pass

        # 基于关键词判断
        response_lower = response.lower()
        complete_keywords = ["complete: true", "是", "满足", "正确", "valid", "yes", "true"]
        incomplete_keywords = ["complete: false", "否", "不满足", "错误", "invalid", "no", "false"]

        complete = any(keyword in response_lower for keyword in complete_keywords)
        incomplete = any(keyword in response_lower for keyword in incomplete_keywords)

        return complete and not incomplete

    def solve(self, items: List[str], constraints: str, max_depth: int = 10) -> Optional[List[str]]:
        """使用TOT方法解决问题"""

        def depth_first_search(current_state: List[str], remaining_items: List[str], depth: int) -> Optional[List[str]]:
            if depth > max_depth:
                return None

            print(f"深度 {depth}: 探索状态 {current_state}")

            if len(current_state) != 0:
                # 评估当前状态
                evaluation = self.evaluate_state(current_state, remaining_items, constraints)
                print(f"评估结果: {evaluation}")

                if not evaluation.get("feasible", True):
                    return None

                # 检查是否完成
                if self.is_complete_solution(current_state, items, constraints):
                    print(f"找到解决方案: {current_state}")
                    return current_state

            # 生成下一步状态
            next_states = self.generate_next_states(current_state, remaining_items, constraints)
            print(f"生成 {len(next_states)} 个下一步状态 {next_states}")

            # 深度优先搜索
            for next_state in next_states:
                new_remaining = [item for item in remaining_items if item not in next_state]
                result = depth_first_search(next_state, new_remaining, depth + 1)
                if result is not None:
                    return result

            return None

        return depth_first_search([], items, 0)


def main():
    # 初始化TOT求解器
    solver = TOTSolver(")

    # 问题定义(可以替换为任何类似问题)
    items = ["A", "B", "C", "D", "E"]
    constraints = """
    A的排名比B高。
    C的排名在D之后。
    E不是第一名就是最后一名。
    B的排名比D高。
    """

    print("开始TOT求解过程...")
    print(f"项目: {items}")
    print(f"约束条件: {constraints}")
    print("-" * 50)

    # 使用深度优先搜索
    solution = solver.solve(items, constraints)

    if not solution:
        print("未找到任何解决方案")


if __name__ == "__main__":
    main()

实践代码有点作弊,因为用的模型不是上面的llama2,我也尝试了好多小模型,因为分治后的问题本身也有点复杂,所以很难模拟,最后还是使用gpt3来跑
日志:

深度 0: 探索状态 []
生成 5 个下一步状态 [['A'], ['D'], ['B'], ['C'], ['E']]
深度 1: 探索状态 ['A']
评估结果: {'feasible': True, 'reason': '当前已确定的排名没有违反任何约束条件', 'confidence': '高'}
生成 4 个下一步状态 [['A', 'B'], ['A', 'D'], ['A', 'E'], ['A', 'C']]

深度 2: 探索状态 ['A', 'B']
评估结果: {'feasible': True, 'reason': '当前已确定的排名没有违反任何约束条件', 'confidence': '高'}
生成 4 个下一步状态 [['A', 'B', 'C'], ['A', 'B', 'E'], ['A', 'D', 'C'], ['A', 'D', 'E']]

深度 3: 探索状态 ['A', 'B', 'C']
评估结果: {'feasible': True, 'reason': '当前已确定的排名没有违反任何约束条件', 'confidence': '高'}
生成 8 个下一步状态 [['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'E'], ['A', 'B', 'D', 'C'], ['A', 'B', 'E', 'C'], ['A', 'D', 'B', 'C'], ['A', 'E', 'B', 'C'], ['D', 'A', 'B', 'C'], ['E', 'A', 'B', 'C']]

深度 4: 探索状态 ['A', 'B', 'C', 'D']
评估结果: {'feasible': True, 'reason': '当前已确定的排名没有违反任何约束条件', 'confidence': '高'}
生成 6 个下一步状态 [['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'D', 'C', 'E'], ['A', 'D', 'B', 'C', 'E'], ['A', 'D', 'C', 'B', 'E'], ['D', 'A', 'B', 'C', 'E'], ['D', 'A', 'C', 'B', 'E']]

深度 5: 探索状态 ['A', 'B', 'C', 'D', 'E']
评估结果: {'feasible': True, 'reason': '当前已确定的排名没有违反任何约束条件', 'confidence': '高'}
找到解决方案: ['A', 'B', 'C', 'D', 'E']

可以一次递归,5层就解决问题了,说明gpt3本身能力就很强,TOT的思想还是能体现出来

GOT

还没实践过,不过思路应该和TOT很像了,树转图

https://arxiv.org/abs/2308.09687

核心思想: 它允许任何图结构来表示和生成思维

  • 聚合: 可以将多个思维合并成一个新的、更强大的思维(例如,将多个推理线索综合起来)。
  • 循环: 思维可以形成环,用于迭代精化。
  • 任何拓扑: 不受树结构的限制,可以模拟更复杂的推理模式。
    作者提出了一种专门的查询语言(Graph of Thoughts Query Language, GQL)来方便地配置这些推理图。在排序、集合操作等任务上,其性能超过了 ToT 和 CoT。

其他参考:https://blog.youkuaiyun.com/Lvbaby_/article/details/131811653?spm=1001.2014.3001.5506

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的一种解决办法 考虑到 2020 版的时候是直接在全局变量里指定具体地址,但是 2024 版本是写成 1055@localhost ,并且之后在站里搜相关 Ansys 的问题都指向 1055 端口被占用,虽然问题不一样,但是本着死马当活马医,就按照。我最近在跑超透镜结构,听说2024版本现在有GPU加速可以用,就把Lumerical从2020升到2024版本,结果发现一开头的破解办法完全不一样了。一开始安装的时候以为2020没有删干净,导致2024版的安装一直锁着目标地址,解决办法参考。的办法来操作,在关闭了。 阅读详情

相关推荐

DW1000芯片实战:如何用UWB技术打造10厘米精度的室内定位系统(附Arduino代码)

本文是一份基于DW1000芯片和UWB技术的实战指南,详细介绍了如何从零构建一个精度可达10厘米的室内定位系统。内容涵盖硬件选型与连接、软件环境配置、核心的双向测距算法实现,并深入探讨了信号干扰抑制、功耗优化等实战挑战,为物联网开发者提供了完整的Arduino代码和部署思路。

root9的博客 497

基于AI Agent与自进化设计:自动化生成学术海报的技术实践

在学术传播与工程实践中,信息可视化是提升沟通效率的关键技术。其核心原理在于将复杂数据与概念通过视觉元素进行结构化呈现,以降低认知负荷。随着人工智能技术的突破,特别是大语言模型(LLM)与智能体(Agent)架构的发展,自动化设计流程正成为可能,其技术价值在于将研究者从繁琐的排版工作中解放,聚焦于核心内容创作。自进化设计(Self-Evolving Design)作为其前沿应用,通过“生成-评估-反馈”的闭环迭代机制,能够基于规则或模型反馈持续优化设计产出。这一技术尤其适用于需要遵循严格规范且追求视觉清晰度的

weixin_30617797的博客 467

Android逆向实战:通过smali/baksmali动态注入DEX逻辑

本文详细介绍了在无源码条件下对Android应用进行动态逻辑注入的实战方法。通过使用smali和baksmali工具对DEX文件进行反编译、修改与重打包,实现在目标方法中插入自定义代码(如日志打印),并分享了定位目标、处理寄存器、避免常见错误的实用技巧与避坑指南。

weixin_29008691的博客 363

Agent如何选择并调用外部工具?工具使用、决策与多轮反馈机制详解

如果说“记忆”让Agent能成长、进化,那么“工具”就赋予它改变外部世界的能力。从函数调用到操作系统,从网页搜索到企业系统接入,未来的Agent将成为真正具备“行动力”的数字智能体。而工具调用,正是这场变革的核心起点。

gs80140的专栏 1562

VH6501实战:手把手教你用CANoe脚本精准触发CAN总线干扰(附避坑点)

本文详细介绍了使用VH6501和CANoe脚本精准触发CAN总线干扰的实战技巧,包括触发位置控制、ValidityMask配置和干扰序列设置等关键步骤。通过具体代码示例和常见问题排查指南,帮助工程师避开实际应用中的常见陷阱,提升CAN总线干扰测试的准确性和效率。

weixin_33709219的博客 369

Kerberos基础及KDC服务(理论知识)

kerberos基础理论讲解+KDC服务

Siobhan_Mxin的博客 9710

Agent 规划提示词:从原理到高效实践

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960208的博客 541

Temporal Noise Reduction(TNR)时序去噪技术解析:原理、平台实践与工程调优路径

随着高画质夜景拍照和高清视频拍摄需求的持续增长,图像传感器在低照度环境下输出信号的噪声问题日益突出。相比空间域降噪(SNR),时序去噪(Temporal Noise Reduction, TNR)利用帧间信息进行融合处理,具备更高的信噪比提升效率及更强的边缘保护能力,已成为移动影像ISP链路中的核心环节。本文系统剖析TNR的算法原理、平台实现机制与工程调试路径,并基于实际开发案例分析其在不同场景下的效果差异及调优方法,为工程师提供从理论到实操的完整路径参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3199

智能体(Agent)架构解析:从感知到行动的技术闭环

智能体(Agent)作为人工智能领域的重要技术范式,通过感知-规划-行动-观察的闭环机制实现自主决策。其核心技术包括基于Transformer的多模态感知处理、动态规划算法选择以及安全可靠的动作执行。在工程实践中,HuggingFace等工具链大幅降低了多模态感知模块的开发门槛,而Redis等内存数据库则为上下文感知提供了高效存储方案。这种架构在自动驾驶、智能客服等场景展现出强大适应性,特别是在需要实时环境交互的系统中,智能体的动态重规划能力成为关键优势。随着LLM技术的融合,现代Agent正逐步突破封闭环

weixin_30924087的博客 336

S7-1200 PLC PID功能 | 调节PID参数

S7-1200 PLC PID功能 | 调节PID参数

Robot_PLC_HMI_Automation 1万+

【ESP32接入国产大模型之Deepseek】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之Deepseek。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘鸣谢B站UP星汇极客ESP32对接DeepSeek API,实现AI大模型交互功能。

vor234的博客 1万+

大模型智能体(Agent)完全指南:从入门到精通,一篇全搞定,建议收藏

Agent 是一种基于大模型(LLM)构建的智能体,它不仅能理解用户的指令,还能自主思考、规划、调用工具、执行任务并根据反馈调整行为,最终完成复杂的目标。简单来说,Agent 就是一个会动脑+动手的 AI 助手。感知:理解用户输入、环境信息、上下文等思考:进行逻辑推理、任务分解、决策判断行动:调用外部工具执行操作记忆:存储和调用历史信息,支持多轮对话与长期记忆用户问:“服务器磁盘快满了,怎么办”

ytt0523_com的博客 958

在 SAP BTP 上为应用开启多租户能力:基于 SaaS Provisioning 和 XSUAA 的完整实践指南

本文介绍了在SAP BTP上配置多租户应用的实战指南。主要内容包括: 多租户架构概述:解释provider子账户、consumer子账户和tenant的概念,以及数据隔离机制。 安全配置:在xs-security.json中设置tenant-mode为shared,并为SaaS Provisioning服务添加回调scope授权。 路由配置:通过manifest.yml设置TENANT_HOST_PATTERN来定义多租户访问模式,确保不同租户通过不同子域名访问同一应用。 服务绑定:将XSUAA和SaaS

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 144

AI Agent开发实战:从原理到生产级应用完整指南

AI Agent(人工智能智能体)是能够自主规划、执行任务并与环境交互的智能系统。其核心原理基于大语言模型(LLM)的推理能力,通过感知、规划、工具调用等模块实现复杂目标分解与执行。在技术价值层面,AI Agent突破了传统对话AI的局限,能够调用外部工具、处理多轮交互,显著提升自动化水平。应用场景涵盖智能客服、业务流程自动化、数据分析等多个领域。本文聚焦AI Agent开发实战,深入解析ReAct推理范式、多Agent协作架构,并提供从环境配置到生产部署的完整代码示例,帮助开发者掌握LLM Agent的核

weixin_33743661的博客 410

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

AI Agent 面试题 481:如何在Agent中实现基于模拟的前瞻规划?

目标导向规划 是 AI Agent 技术体系中的重要组成部分。简单来说,它涉及到 Agent 如何在 规划与推理 层面实现智能化的行为和决策。在实际应用中,目标导向规划 的核心目标是让 Agent 能够更加高效、准确地完成特定任务。这需要我们深入理解其底层原理和实现机制。从学术角度来看,目标导向规划 的研究可以追溯到人工智能的早期阶段。早在 1950 年代,Alan Turing 就提出了关于机器智能的基本设想。而随着深度学习和大语言模型的发展,目标导向规划 的内涵和外延都发生了根本性的变化。

weixin_42618497的博客 186

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

大模型Agent落地实战:从核心原理到工业级任务规划器开发

本文介绍了大模型Agent从核心原理到工业级任务规划器开发的实战指南。重点解析了Agent"感知-规划-执行-反馈"的闭环架构,详细阐述了工业级任务规划器的开发过程,包括技术选型、核心模块实现和优化策略。文章通过代码示例展示了结构化需求解析、依赖关系处理和异常处理等关键环节,并总结了Prompt设计、依赖验证、工具解耦等工业级落地最佳实践。最终指出大模型Agent落地需要大模型语义理解与传统算法验证的协同,通过工程化手段确保稳定性,才能实现真正的产业级应用。

wudu_123456的博客 827

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

AI Agent 30天速成|Day10 笔记

任务分解(Task Decomposition)决策树。

Ql6ozDTCL的博客 159

AI Agent 面试题 475:如何通过强化学习提升Agent的规划能力?

目标导向规划 是 AI Agent 技术体系中的重要组成部分。简单来说,它涉及到 Agent 如何在 规划与推理 层面实现智能化的行为和决策。在实际应用中,目标导向规划 的核心目标是让 Agent 能够更加高效、准确地完成特定任务。这需要我们深入理解其底层原理和实现机制。从学术角度来看,目标导向规划 的研究可以追溯到人工智能的早期阶段。早在 1950 年代,Alan Turing 就提出了关于机器智能的基本设想。而随着深度学习和大语言模型的发展,目标导向规划 的内涵和外延都发生了根本性的变化。

weixin_42618497的博客 86

AI大模型Agent是不是就是各种Prompt的堆叠?

摘要: AI大模型Agent是否仅是Prompt工程的争论持续发酵。一方认为Agent本质是Prompt的排列组合,强调精巧的文本设计;另一方则指出企业级Agent需集成任务调度、状态管理等系统工程。技术专家提出Agent公式:LLM+计划+执行+反馈,强调状态管理是关键。争论揭示了技术发展的阶段性——从初级Prompt工程到高级系统架构的演进。结论认为,Agent既是语言艺术,更是系统工程,需要综合Prompt设计、状态管理等多维度能力。这场讨论推动了对AI Agent本质的深层思考,反映了技术变革的复杂

javatiange的博客 840

从 ReAct 到自主规划 Agent:构建下一代智能体的技术全景

大语言模型(LLM)的横空出世让人机交互迈上了新台阶,但当面对真正复杂的现实任务时,它的短板也暴露无遗。事实幻觉、缺乏实时信息、规划能力不足、错误传播——这些问题让“一次生成”的范式在多步骤任务中显得力不从心。Agent 的本质,是为 LLM 装上“手”和“眼”,让它不仅能“想”,还能“做”。要让 AI 真正像人一样工作,它需要经历这样的循环:观察 → 思考 → 行动 → 反馈 → 再思考。这个闭环,就是 Agent 能力演进的底层逻辑。ReAct(Reasoning + Acting)由 Yao 等人于

油墨香^-^的博客 100

保姆级教程:从零搭建你的第一个AI Agent

本文是一篇面向初学者的AI Agent开发教程,主要包含以下内容: AI Agent概述:介绍了AI Agent与普通LLM的区别,强调其具备自主规划、调用工具、迭代执行的ReAct循环机制,以及大脑(LLM)、工具(Tools)、记忆(Memory)三大核心组件。 环境准备:详细说明了如何创建Python虚拟环境、安装依赖库(OpenAI/Python-dotenv等),并初始化项目目录结构。 核心组件实现: 封装LLM客户端,支持多API提供商(OpenAI/DeepSeek/智谱GLM) 构建工具系统

凤年徐的博客 2万+

零基础学 Agent :拆解一个 Agent 的「零件清单」——8 个模块逐一讲透 第 2 期

第二期来了!

2601_95101216的博客 562

AI Agent 面试题 474:Agent的规划能力与LLM的推理能力之间的关系是什么?

推理链设计 是 AI Agent 技术体系中的重要组成部分。简单来说,它涉及到 Agent 如何在 规划与推理 层面实现智能化的行为和决策。在实际应用中,推理链设计 的核心目标是让 Agent 能够更加高效、准确地完成特定任务。这需要我们深入理解其底层原理和实现机制。从学术角度来看,推理链设计 的研究可以追溯到人工智能的早期阶段。早在 1950 年代,Alan Turing 就提出了关于机器智能的基本设想。而随着深度学习和大语言模型的发展,推理链设计 的内涵和外延都发生了根本性的变化。功能维度。

weixin_42618497的博客 140

AI|大模型入门(五):揭秘智能体(Agent)

摘要: Agent是融合感知、规划、执行与复盘能力的智能助手,通过任务分解(CoT)、动态反馈(ReAct/Reflexion)和工具调用(如API)实现自动化。实践场景包括测试报告生成、多Agent协同及长期记忆应用。低代码平台(如Coze、腾讯元器)简化开发,支持零基础用户快速构建智能体,推动AI从“回答”升级为“行动”。测试领域可结合CI/CD与钉钉API实现冒烟测试全流程自动化。

霍格沃兹测试学院的博客 1332

004、规划模块(一):目标分解与任务规划基础

《机器人导航Agent的任务拆解困境与规划模块优化》 摘要:本文探讨了Agent任务规划中的核心挑战——目标拆解与执行逻辑缺失。通过实际案例(如会议室导航失败、机械臂越限)揭示了常见问题:LLM直接生成动作序列易遗漏关键步骤、状态表述模糊导致误判、资源竞争引发死锁等。作者提出了两种规划方法(自顶向下模板化与动态重规划)及四项实践建议:1)采用结构化状态表示;2)设置递归深度限制;3)建立执行监控闭环;4)维护资源预约表。特别强调混合方法(规则+LLM校验)的稳定性,并建议保留人工干预接口。规划模块的设计质量

sundong_81的博客 510

AI Agent 面试题 479:如何实现Agent的渐进式规划(Incremental Planning)?

目标导向规划 是 AI Agent 技术体系中的重要组成部分。简单来说,它涉及到 Agent 如何在 规划与推理 层面实现智能化的行为和决策。在实际应用中,目标导向规划 的核心目标是让 Agent 能够更加高效、准确地完成特定任务。这需要我们深入理解其底层原理和实现机制。从学术角度来看,目标导向规划 的研究可以追溯到人工智能的早期阶段。早在 1950 年代,Alan Turing 就提出了关于机器智能的基本设想。而随着深度学习和大语言模型的发展,目标导向规划 的内涵和外延都发生了根本性的变化。

weixin_42618497的博客 179
上一篇: Mysql为什么有时候会选错索引
帅东
博客等级 码龄11年 676粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值