AI开发-python-langchain框架(3-12-AI 直接生成并执行 Python 代码 )

LangChain PythonREPL + 大模型:让 AI 直接生成并执行 Python 代码

在大模型的实际应用中,我们经常遇到一个痛点:大模型擅长理解和推理,但在精准计算、逻辑运算上容易出错
LangChain 实验性工具库中的 PythonREPL ,完美解决了这个问题。它能让大模型直接生成 Python 代码,并且自动运行代码、输出精准结果,实现真正的「AI 自主计算」。
今天这篇文章,就带大家彻底搞懂:PythonREPL + 大模型 如何实现「自然语言提问 → 生成 Python 代码 → 自动执行代码 → 返回精准答案」的全流程能力。


一、核心主角:LangChain PythonREPL 到底是什么?

PythonREPL 是 LangChain 生态中极具实用价值的工具,专门用于动态执行 Python 代码
它的核心能力:

  • 接收字符串格式的 Python 代码
  • 在独立环境中直接运行代码
  • 自动返回执行结果
  • 无缝对接大模型输出,零格式转换成本

简单说:它就是大模型的「代码执行器」,让大模型不再只输出文字,而是能真正运行代码、完成计算任务。


二、最强组合:PythonREPL + 大模型的核心能力

这两者结合后,会产生远超单一模型的强大能力:

1. 大模型负责「理解 + 生成代码」

  • 理解自然语言问题(数学题、逻辑题、计算题等)
  • 根据问题自动生成可运行的 Python 代码
  • 严格遵循指令,只输出纯代码,不携带多余内容

2. PythonREPL 负责「执行代码 + 返回结果」

  • 接收模型生成的代码
  • 全自动执行,无需人工复制、运行
  • 返回最精准、最可靠的计算结果
  • 全程无人工干预,真正自动化

这就是这套方案的核心价值:大模型负责「动脑生成代码」,PythonREPL 负责「动手运行代码」,强强联合,实现 100% 精准计算。


三、完整实现流程:清晰易懂,全程自动化

整个实现逻辑非常简洁,一共四步:

1. 对接大模型

配置兼容 OpenAI 接口的大模型,设定参数,保证代码生成稳定、准确。

2. 提示词约束

通过提示模板,强制模型只返回纯 Python 代码,不返回解释、文字、格式符号。

3. 代码清洗

自动清理模型可能附带的标签、代码块标记,保证代码纯净可执行。

4. PythonREPL 自动执行

将清洗后的代码直接传入 PythonREPL,一键执行,立即输出结果
全程不需要人工写代码、不需要手动运行,真正实现AI 全自动计算


四、这套方案的核心优势(为什么一定要用?)

  1. 计算绝对精准彻底解决大模型口算错误问题,代码执行结果 100% 可靠。
  2. 全流程自动化从提问到答案,中间生成代码、执行代码全部自动完成。
  3. 零门槛集成基于 LangChain 生态,依赖少、接入快,几行核心逻辑即可实现。
  4. 场景无限扩展可用于数学计算、公式推导、数据处理、逻辑判断、简单脚本生成等。
  5. 模型能力翻倍让普通大模型瞬间拥有「代码生成 + 代码执行」双重能力,实用性大幅提升。

五、实际效果演示(直观感受强大能力)

以数学应用题为例:3 箱苹果重 45 千克。一箱梨比一箱苹果多 5 千克,6 箱梨重多少千克?
这套系统会自动完成:

  1. 大模型读懂题目 → 生成对应的 Python 计算代码
  2. 自动清洗代码格式
  3. PythonREPL 自动执行代码
  4. 直接输出最终答案

你只需要输入问题,剩下全部交给 AI + PythonREPL 自动完成。


六、总结

LangChain PythonREPL 与大模型的结合,是大模型从「文字回答」走向「实际执行」的关键能力。

  • 大模型提供「理解与代码生成」
  • PythonREPL 提供「代码执行与精准计算」

两者结合,让 AI 不再是只会说话的助手,而是能写代码、能运行代码、能给出精准结果的智能工具
这种能力不仅适用于数学计算,还能扩展到数据处理、自动化脚本、逻辑验证等大量实际场景,是大模型工程化、实用化的必备技巧!
代码实现:

复制代码
#pip install langchain-experimental
#pip install langchain-core==0.1.52 langchain-experimental==0.0.54

from langchain_experimental.utilities import PythonREPL
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
import re

#测试执行python代码
python_repl = PythonREPL()
result = python_repl.run("print(1+3)")
print(f"执行结果:{result}")


# 1. 初始化 LLM(保持不变)
DEEPSEEK_API_KEY = "123"  # 替换为实际的 API Key
llm = ChatOpenAI(
    api_key=DEEPSEEK_API_KEY,
    base_url="http://qwen3-32b-awq.model.xjipc.com/openai/v1",  # Deepseek 的 API 基础地址
    model="qwen3-32b-awq",  # Deepseek 对话模型(可选:deepseek-chat-pro 等高级模型)
    temperature=0.7,  # 温度参数(0-1,越低越稳定)
    max_tokens=1024  # 最大生成 tokens
)




promptFormat = """{query}

请根据上面的问题,生成Python代码计算出问题的答案,最后计算出来的结果用print()打印出来,请直接返回Python代码,不要返回其他任何内容的字符串
"""
prompt = ChatPromptTemplate.from_template(promptFormat)
output_parser = StrOutputParser()

chain = prompt | llm | output_parser
result = chain.invoke({"query":"3箱苹果重45千克。一箱梨比一箱苹果多5千克,6箱梨重多少千克?"})
print('-----返回python代码-----')
print(result)


def remove_think_tags(text):
    """
    移除字符串中<think></think>标签及其内容

    Args:
        text: 包含think标签的字符串

    Returns:
        移除think标签及其内容后的字符串
    """
    # 支持多行内容和标签可能有的属性
    pattern = r'<think[^>]*>.*?</think>'
    result = re.sub(pattern, '', text, flags=re.DOTALL)

    # 清理空白字符
    result = result.strip()
    result = re.sub(r'\n{3,}', '\n\n', result)  # 限制连续换行
    return result

#去掉<think>标签之间的内容
result =  remove_think_tags(result)

#去掉返回值中不需要的部分
def parsePython(codeStr):
    codeStr = codeStr.replace("```","")
    codeStr = codeStr.replace("python", "")
    return codeStr

result =  parsePython(result)
print('**************')
print(result)
print('**************')
print('-----返回python执行结果-----')
print(python_repl.run(result))

结果输出:

执行结果:4

-----返回python代码-----

<think>

好的,我现在得解决这个问题。题目是说,3箱苹果重45千克。一箱梨比一箱苹果多5千克,问6箱梨重多少千克?

首先,我应该先理清楚已知条件和要求。首先,苹果的部分:3箱苹果总重45千克,那每箱苹果的重量应该是45除以3,也就是15千克。对吧?所以每箱苹果是15kg。

然后,题目说一箱梨比一箱苹果多5千克。那梨每箱的重量就是苹果每箱的重量加上5。也就是15+5=20千克每箱梨。对吧?

接下来,问题是要算6箱梨的总重量。那应该就是每箱梨的重量乘以6。也就是20*6=120千克。所以答案应该是120千克。

那现在我要怎么用Python代码来实现这个过程呢?首先,我需要计算每箱苹果的重量。已知3箱苹果总重45kg,所以apple_per_box = 45 / 3。得到15。然后,梨每箱就是15+5=20。然后乘以6得到总重量。

所以代码步骤大概是这样的:

  1. 计算每箱苹果的重量:apples_total = 45,boxes_apples =3 → per_apple = apples_total / boxes_apples

  2. 梨每箱重量是per_apple +5

  3. 梨的箱数是6,总重量就是(per_apple +5)*6

  4. 输出结果

那Python代码应该怎样写呢?比如:

apples_total = 45

apple_boxes = 3

per_apple = apples_total / apple_boxes

pear_per_box = per_apple +5

pear_boxes =6

total_pears = pear_per_box * pear_boxes

print(total_pears)

这样应该就能得到正确的结果了。然后运行的话应该输出120.0?或者是否需要处理成整数?不过题目中的数值都是整数,可能希望得到整数结果。不过45除以3是整数,所以没问题。但如果是其他情况可能有小数,这里应该没问题。所以直接打印即可。

那这段代码应该就能解决问题了。检查一下步骤是否正确。是的。所以生成的代码应该就是这样的。

</think>

```python

apples_total = 45

apple_boxes = 3

per_apple = apples_total / apple_boxes

pear_per_box = per_apple + 5

pear_boxes = 6

total_pears = pear_per_box * pear_boxes

print(total_pears)

```

**************

apples_total = 45

apple_boxes = 3

per_apple = apples_total / apple_boxes

pear_per_box = per_apple + 5

pear_boxes = 6

total_pears = pear_per_box * pear_boxes

print(total_pears)

**************

-----返回python执行结果-----

120.0

更多学习资料尽在 老虎网盘资源