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

CodeAct范式

rag系列文章目录

文章目录

  • rag系列文章目录
  • 前言
  • 一、为什么需要CodeAct
  • 二、存在的问题
  • 三、实践
  • 总结


前言

在大模型agent领域,比较常见的是ReAct范式,它的核心思想是把推理(Reasoning)和行动(Acting,通常是工具调用)结合起来。LLM 一边输出“思考过程”,一边决定调用什么工具或采取什么行动,再根据观察结果继续推理。

而CodeAct的核心思想是让 LLM 输出 可执行代码(而不是自然语言的行动指令),然后在安全环境里执行代码,执行结果再反馈给模型,进入下一轮。


一、为什么需要CodeAct

之所以需要CodeAct,是因为大模型没法进行继续,或者大模型计算的准确度不高。比如文本中提到a和b,而c等于a加上b,让大模型输出c的值,大模型输出很可能不准确。
还有需要画图的时候,大模型没法直接画图,而写代码就很方便。

CodeAct主要适用于以下场景:
1、 复杂计算 / 数学推理
2、 数据处理 / 科学计算 / 可视化
3、 编程题(如 HumanEval、MBPP)
4、 高精度要求的场景(减少 LLM “口算” 出错)

二、存在的问题

CodeAct 虽然能提升 LLM 的推理能力,但它也带来了一些新的挑战。

  1. 正确性验证困难
    • 问题:
    LLM 生成的代码执行结果,未必和用户问题语义完全对齐。
    如果代码逻辑有 bug,但运行能返回“貌似合理”的结果,用户可能难以察觉。
    • 风险:
    得到错误答案,但因为有“代码支撑”,用户会过度信任。
    • 缓解思路:
    增加冗余验证:同一任务用不同实现思路多跑几次,交叉对比结果。
    引入“结果检查器”模型(Verifier)对输出进行二次验证。

  2. 代码执行的稳定性
    • 问题:
    代码可能包含致命错误(死循环、内存溢出、调用非法库等)。
    代码注入攻击风险:用户或模型生成的代码可能试图访问敏感资源。
    • 风险:
    执行环境崩溃、资源耗尽、安全漏洞。
    • 缓解思路:
    沙箱执行(限制内存、CPU、磁盘、网络)。
    设置超时和资源上限。
    仅允许白名单库和函数。

  3. 调试与可解释性
    • 问题:
    当结果不对时,很难判断是 LLM 推理错误,还是代码实现错误。
    调试成本高:需要人工检查 LLM 输出的多段代码。
    • 风险:
    难以快速定位问题,导致系统可靠性差。
    • 缓解思路:
    要求 LLM 输出代码+解释。
    生成单元测试,自动验证关键函数。

  4. 性能与效率
    • 问题:
    LLM 可能生成冗长、低效的代码(如暴力算法)。
    多轮执行反馈模式增加延迟。
    • 风险:
    响应慢,计算资源浪费。
    • 缓解思路:
    使用 Code Optimization Agent,对生成代码做优化。
    预置高效工具库(避免 LLM 重复造轮子)。

三、实践

以下使用langgraph构建CodeAct工作图,如下所示:
在这里插入图片描述
代码如下:

from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, END, START
from langchain.schema import BaseOutputParser
from typing import TypedDict
from dotenv import load_dotenv
import traceback
import os
# Load environment variables
load_dotenv()
assert os.getenv("OPENAI_API_KEY"), "OPENAI_API_KEY not set in .env"
# Typed state with retry support
class AgentState(TypedDict, total=False):instruction: strcode: stroutput: strerror: strtraceback: strretries: int
# Extract Python code from LLM response
class CodeExtractor(BaseOutputParser):def parse(self, text: str) -> str:import rematch = re.search(r"```python(.*?)```", text, re.DOTALL)return match.group(1).strip() if match else text.strip()
# Step 1: Generate code
def generate_code(state: AgentState) -> AgentState:llm = ChatOpenAI(temperature=0, model="gpt-4")prompt = f"Write Python code to do the following task:\n\n{state['instruction']}"response = llm.invoke(prompt)code = CodeExtractor().parse(response.content)return {**state,"code": code}
# Step 2: Execute the code
def execute_code(state: AgentState) -> AgentState:try:local_vars = {}exec(state["code"], {}, local_vars)output = local_vars.get("result", "Execution completed. No `result` variable found.")return {**state,"output": output,"error": None,"traceback": None}except Exception as e:retries = state.get("retries", 0) + 1return {**state,"error": str(e),"traceback": traceback.format_exc(),"retries": retries}
# Branch logic: Retry if error and below max
MAX_RETRIES = 3
def error_handler(state: AgentState) -> str:if "error" in state and state.get("retries", 0) < MAX_RETRIES:return "generate_code"return END
# Build LangGraph
builder = StateGraph(AgentState)
builder.add_node("generate_code", generate_code)
builder.add_node("execute_code", execute_code)
builder.add_edge(START, "generate_code")
builder.add_edge("generate_code", "execute_code")
builder.add_conditional_edges("execute_code", error_handler)
graph = builder.compile()
# Run the agent
if __name__ == "__main__":user_input = "Plot a sine wave using matplotlib and numpy"initial_state: AgentState = {"instruction": user_input, "retries": 0}result = graph.invoke(initial_state)print("\n--- Final Result ---")if "output" in result:print("Output:\n", result["output"])else:print("Error:\n", result.get("error", "Unknown error"))print("Traceback:\n", result.get("traceback", "No traceback"))

生成的图片如下,该agent通过生成代码,并执行代码,获得了sin曲线。
在这里插入图片描述


总结

虽然CodeAct还有很多问题需要解决,但是随着大模型编程的能力越来越强,这些问题会大大缓解。CodeAct是一种新的方式,这种agent不仅仅会聊天,而且会主动code,深入思考,大大加强了agent处理复杂问题的能力。
参考文档: 1 2


文章转载自:

http://3IWhvAqS.nqyfm.cn
http://THgOnvSD.nqyfm.cn
http://I9QT8LKB.nqyfm.cn
http://VjGW4NSI.nqyfm.cn
http://JTCzm73H.nqyfm.cn
http://11fZzzn4.nqyfm.cn
http://SzYj2GyY.nqyfm.cn
http://IMG1T2xT.nqyfm.cn
http://L9tdWkyu.nqyfm.cn
http://SXiFGb2a.nqyfm.cn
http://IqNBhWsh.nqyfm.cn
http://PrMFpumu.nqyfm.cn
http://NRttA135.nqyfm.cn
http://LcfQHyxX.nqyfm.cn
http://kG71MKbX.nqyfm.cn
http://BWGOifkZ.nqyfm.cn
http://JXJgtZ2A.nqyfm.cn
http://VeMhUmvE.nqyfm.cn
http://PNepskql.nqyfm.cn
http://BdLbcc2h.nqyfm.cn
http://qTlKppcu.nqyfm.cn
http://fE0Br9qx.nqyfm.cn
http://kGutI2oV.nqyfm.cn
http://DPp7KdZq.nqyfm.cn
http://BjpTkRnn.nqyfm.cn
http://yukT0mSG.nqyfm.cn
http://QVyz8yrw.nqyfm.cn
http://aI32O1cZ.nqyfm.cn
http://vyABAhs9.nqyfm.cn
http://tR24C07Y.nqyfm.cn
http://www.dtcms.com/a/382388.html

相关文章:

  • 有监督机器学习算法案例(Python)
  • MaxStateSuper 已经成功实现了输入与状态的统一
  • 技术面:Spring (bean的生命周期、创建方式、注入方式、作用域)
  • HUST-STAR电控组视觉任务
  • Redis 高并发方案适用的场景
  • 【开题答辩全过程】以 E家洁管理系统为例,包含答辩的问题和答案
  • 李宏毅 Deep Learning
  • 公众号网页授权报错:redirect_uri域名与后台配置不一致,错误代码10003
  • [特殊字符] 每日前端宝藏库 | Day.js ⏳✨
  • 2025.9.13英语红宝书【必背11-15】
  • 解锁AI智能体:上下文工程如何成为架构落地的“魔法钥匙”
  • GPT 系列论文 gpt3-4 175B参数 + few-shot + 多模态输入 + RLHF + system
  • 机器学习系统框架:核心分类、算法与应用全景解析
  • AI+华为HarmonyOS开发工具DevEco Studio详细安装指南
  • 【Redis】-- 持久化
  • Mysql相关的面试题1
  • 数据结构(C语言篇):(十三)堆的应用
  • TupiTube,一款免费开源的 2D 动画创作工具
  • 机器学习-模型评估
  • JS 打造仿腾讯影视轮播导航
  • PEFT 统一框架UniPELT微调大模型介绍篇
  • 【每日资讯】-关于大语言模型的最新动态跟踪
  • 毫米波雷达液位计如何远程监控水位?
  • PTA算法简析
  • 无监督机器学习算法案例(Python)
  • 【Deep Seek】Python图片压缩小工具死循环异常修复
  • 使用 NVIDIA GPU 加速让 XGBoost 快速提升 46 倍
  • NightCafe Generator
  • jenkins脚本触发部署
  • nginx(介绍+源码安装+平滑升级和回滚)