如何使用Python-LangChain框架直接生成并执行AI代码?

摘要:LangChain PythonREPL + 大模型:让 AI 直接生成并执行 Python 代码 在大模型的实际应用中,我们经常遇到一个痛点:大模型擅长理解和推理,但在精准计算、逻辑运算上容易出错。 而 LangChai
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 全自动计算。
四、这套方案的核心优势(为什么一定要用?) 计算绝对精准彻底解决大模型口算错误问题,代码执行结果 100% 可靠。 全流程自动化从提问到答案,中间生成代码、执行代码全部自动完成。 零门槛集成基于 LangChain 生态,依赖少、接入快,几行核心逻辑即可实现。 场景无限扩展可用于数学计算、公式推导、数据处理、逻辑判断、简单脚本生成等。 模型能力翻倍让普通大模型瞬间拥有「代码生成 + 代码执行」双重能力,实用性大幅提升。
五、实际效果演示(直观感受强大能力) 以数学应用题为例:3 箱苹果重 45 千克。一箱梨比一箱苹果多 5 千克,6 箱梨重多少千克? 这套系统会自动完成: 大模型读懂题目 → 生成对应的 Python 计算代码 自动清洗代码格式 PythonREPL 自动执行代码 直接输出最终答案 你只需要输入问题,剩下全部交给 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 更多学习资料尽在 老虎网盘资源