Langchain如何自动执行python代码 | AI应用开发

在当今的数据科学和人工智能领域,自动化代码生成与执行已成为提升效率与灵活性的重要手段。本文将详细介绍如何使用LangChain中的PythonREPL功能,实现大型语言模型(LLM)生成代码,并自动执行这些代码。通过这一流程,我们能够让大模型生成代码,然后通过代码执行来获取大语言模型通过文本生成本身不能很好完成的任务,特别是一些计算任务。

一、环境准备

首先,确保你的开发环境中已安装LangChain及其相关依赖。若尚未安装,可通过pip轻松完成:

pip install langchain

此外,还需配置好Python解释器及所需库(如datetime等),以确保PythonREPL能够顺利运行。

二、创建PythonREPL实例

在LangChain中,PythonREPL作为一个工具,允许我们执行任意Python代码。以下代码展示了如何创建PythonREPL实例:

from langchain_experimental.utilities import PythonREPL

# 初始化PythonREPL实例
python_repl = PythonREPL()

# 指定需要用到的全局的库
python_repl.globals = {"datetime": datetime}

三、利用大型语言模型生成代码

接下来,我们将利用大型语言模型(LLM)生成Python代码。此处假设你已有一个训练好的LLM模型,并可通过API进行访问。以下是一个利用LLM生成代码的示例:

这里使用讯飞星火的api接口来做演示


from openai import OpenAI
from langchain.llms.base import LLM
from typing import Any, List, Optional
from langchain.callbacks.manager import CallbackManagerForLLMRun
class SparkLLM(LLM):
    llm_client: Any = None

    def __init__(self):
        super().__init__()
        self.llm_client = OpenAI(
            api_key="xxx", # APIPassword
            base_url = 'https://spark-api-open.xf-yun.com/v1' # 指向讯飞星火的请求地址
            )
    def _call(self, prompt : str, stop: Optional[List[str]] = None,
                run_manager: Optional[CallbackManagerForLLMRun] = None,
                **kwargs: Any):
        response = self.llm_client.chat.completions.create(
                model='4.0Ultra', # 指定请求的版本
                messages = [
                    {"role": "system", "content": "你是一个智能AI助手,擅长编写合格的代码"},
                    {"role": "user", "content": prompt}
                ],
                temperature=0.7,  # 控制生成文本的随机性。越低越确定,越高越随机。
                top_p=0.9,       # 核采样 (Nucleus sampling)。top_p=0.9表示只考虑概率质量前90%的词。
                max_tokens=4096,  # 最大生成的token数量。
                stream=False      # 开启流式输出
            )
        return response.choices[0].message.content
    @property
    def _llm_type(self) -> str:
        return "sparkllm"

from replicate import Replicate  # 假设使用Replicate来访问LLM模型



# 实例化LLM模型(此处以replicate库为例,实际使用时需替换为你的LLM模型)
llm = SparkLLM()

# 给LLM模型一个提示,生成我们需要的Python代码
prompt = """
请编写一个Python函数,该函数接受一个整数n作为输入,
并返回从1到n(包含n)的所有整数的和。
"""
generated_code = llm(prompt)

print(generated_code)

生成的代码可能如下所示:

def sum_integers(n):
    total = 0
    for i in range(1, n + 1):
        total += i
    return total

四、在PythonREPL中执行生成的代码

现在,我们已在PythonREPL中执行上述生成的代码。利用python_repl.run方法,可轻松实现这一点:

# 执行生成的代码,并捕获输出
execution_result = python_repl.run(generated_code)
print("执行结果:")
print(execution_result)

但请注意,由于generated_code中未包含直接调用sum_integers函数的语句,因此execution_result可能无具体输出。为验证函数功能,我们需添加调用语句,如:

code_with_call = f"{generated_code}\nprint(sum_integers(10))"
execution_result = python_repl.run(code_with_call)
print("执行结果:")
print(execution_result)

此时,execution_result将显示函数sum_integers(10)的返回值,即55。

在来一写使用langchain的例子:

    from langchain_core.prompts import PromptTemplate
    from langchain_core.output_parsers import StrOutputParser

    template = """Write some python code to solve the user's problem. 

    Return only python code in Markdown format, e.g.:

    \```python
    ....
    \```
    problem:{input}
    """
    prompt_template = PromptTemplate.from_template(template)

    def _sanitize_output(text: str):
        _, after = text.split("```python")

        print(after.split("```")[0])
        return after.split("```")[0]


    pythonrepl = PythonREPL()
    pythonrepl.globals = {"datetime": datetime}

    model = SparkLLM()
    chain = prompt_template | model | StrOutputParser() | _sanitize_output | pythonrepl.run

    result = chain.invoke({"input": "whats 2 plus 2"})
    print(result)

    result = chain.invoke({"input": "what time now?"})
    print(result)

五、安全性与效率考量

在使用PythonREPL执行动态生成的代码时,安全性与效率至关重要。为确保代码安全,建议在沙箱环境中执行,或对代码进行预先审查。同时,对于大型代码块或复杂计算,需关注执行效率,并适时优化。

六、结论

通过LangChain的PythonREPL功能,我们实现了大型语言模型生成代码的自动化执行。这一流程不仅提升了代码生成的灵活性,还简化了代码验证与优化过程。未来,随着技术的不断发展,相信这一流程将变得更加高效与智能。


本文详细介绍了如何使用LangChain的PythonREPL功能,实现大型语言模型生成代码的自动化执行。希望这一流程能为你的数据科学与人工智能项目带来便利与启发。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

<think>好的,我需要向用户介绍如何基于LangChain开发一个Agent应用。首先,我得回忆一下LangChain的基本概念,以及Agent在其中扮演的角色。用户可能对LangChain有一定了解,但作为新手,他们需要一步步的指导。 首先,我应该明确Agent在LangChain中的作用。Agent是能够根据输入动态选择工具执行任务的智能体,它利用语言模型进行决策。接下来,开发一个Agent应用的基本步骤可能包括环境准备、安装依赖、选择语言模型、定义工具、创建Agent、集成链、测试优化和部署。 用户可能想知道具体每一步怎么做,比如如何安装LangChain,如何选择模型,比如OpenAI的模型或者开源的Hugging Face模型。这时候需要给出示例代码,比如安装命令pip install langchain openai,以及设置环境变量的例子。 然后定义工具部分,用户可能需要具体的工具示例,比如计算器或搜索引擎。这里需要说明如何用@tool装饰器创建自定义工具,或者使用预构建的工具,如SerpAPIWrapper。 创建Agent时,需要初始化语言模型,然后使用initialize_agent函数,指定Agent类型,比如zero-shot-react-description。要解释参数的作用,比如tools、llm、agent、verbose等。 集成链的部分可能需要说明如何将Agent与其他模块结合,比如记忆模块或文档加载器,以处理复杂任务。这部分需要简明扼要,避免太深入细节。 测试和优化阶段,用户需要知道如何验证Agent的功能,比如输入问题观察执行过程。同时,提示调整和参数优化也是重点,比如温度参数调整影响创造性。 部署部分要提到简单的命令行测试和实际的API服务部署,比如使用FastAPI封装,让用户了解后续步骤的可能方向。 还要考虑潜在的问题,比如工具的正确定义、API密钥的设置、错误处理等。可能需要提醒用户注意这些常见问题,避免开发中的障碍。 最后,总结整个流程,强调关键点,比如工具的定义、Agent的初始化和测试的重要性。确保用户有一个清晰的开发路线图,鼓励他们根据需求扩展功能。 需要检查是否所有步骤都符合系统级指令,比如数学公式的正确使用,但在这个主题中可能涉及较少。确保所有代码示例用正确的格式,行内代码用反引号,独立代码块用三个反引号。同时保持语言口语化,避免专业术语堆砌,分步骤解释清楚。 可能还需要对比不同类型的Agent和工具,帮助用户根据需求选择。例如,不同类型的Agent(如zero-shot、conversational)适用场景不同,需要简要说明。 总之,结构要清晰,逐步引导用户从环境搭建到部署,每个步骤给出必要解释和示例,确保他们能够跟随操作解决问题。同时提醒注意事项和优化技巧,提升应用的可靠性和效率。</think>以下是一步步指导你基于LangChain开发Agent应用的流程: ### 1. 环境准备 - 安装依赖库: ```bash pip install langchain openai python-dotenv ``` - 在`.env`文件设置API密钥(如OpenAI): ```python OPENAI_API_KEY="your_key_here" ``` ### 2. 初始化语言模型 ```python from langchain.llms import OpenAI from dotenv import load_dotenv load_dotenv() llm = OpenAI(temperature=0) # 控制输出随机性(0为确定性高) ``` ### 3. 定义工具(Tools) 工具是Agent执行任务的核心能力,可通过以下方式创建: **自定义工具示例** ```python from langchain.agents import tool @tool def custom_calculator(expression: str) -> float: """计算数学表达式,支持+-*/和括号""" try: return eval(expression) except: return "计算错误" ``` **使用预构建工具** ```python from langchain.utilities import SerpAPIWrapper search = SerpAPIWrapper() tools = [search] ``` ### 4. 创建Agent实例 ```python from langchain.agents import initialize_agent agent = initialize_agent( tools=tools, llm=llm, agent="zero-shot-react-description", # 零样本推理模式 verbose=True # 显示详细执行过程 ) ``` ### 5. 测试运行 ```python query = "北京当前温度是多少?换算成华氏度" result = agent.run(query) print(result) ``` 执行时会显示: ``` Thought: 需要先获取当前温度,再进行单位转换 Action: 调用搜索引擎 Observation: 北京当前气温25℃ Thought: 使用公式 (25×9/5)+32=77°F Final Answer: 北京现在25摄氏度,相当于77华氏度 ``` ### 6. 高级功能扩展 - **记忆模块**:添加`ConversationBufferMemory`实现多轮对话 ```python from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory() agent = initialize_agent(..., memory=memory) ``` - **文档处理**:结合`UnstructuredFileLoader`处理PDF/Word等文件 ```python from langchain.document_loaders import UnstructuredFileLoader loader = UnstructuredFileLoader("report.pdf") documents = loader.load() ``` ### 7. 性能优化技巧 - **提示工程**:通过`agent.agent.llm_chain.prompt`修改系统提示模板 - **参数调优**:调整`temperature`(0-1)平衡创造性与准确性 - **错误处理**:使用`try-except`包装工具函数捕获异常 ### 8. 部署应用 - **本地测试**:直接运行Python脚本 - **API服务化**:用FastAPI封装接口 ```python from fastapi import FastAPI app = FastAPI() @app.post("/ask") async def ask_agent(query: str): return {"response": agent.run(query)} ``` ### 关键概念说明 - **Agent类型**: - `zero-shot-react-description`:无历史记忆,适合简单任务 - `conversational-react-description`:支持多轮对话 - `self-ask-with-search`:自动验证中间结果 - **工具设计原则**: 1. 功能单一化(每个工具只做一件事) 2. 输入输出类型明确定义 3. 包含清晰的文档字符串(Agent根据描述选择工具) ### 常见问题排查 - **工具未被调用**:检查工具描述是否准确反映功能 - **API连接失败**:验证网络连接和密钥设置 - **无限循环**:设置`max_iterations=5`限制最大思考次数 通过以上步骤,你可以构建出能处理复杂工作流的智能体,例如: $$ 客户咨询 \rightarrow 语义解析 \rightarrow [数据库查询 \oplus 文档检索] \rightarrow 结果生成 $$ 其中$\oplus$表示行操作,箭头表示流程顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值