0


【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案

  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

在这里插入图片描述


本文通过一个案例来学习下如何让 LangChain 写代码并自动执行输出结果。

本文案例来自:https://python.langchain.com/docs/expression_language/cookbook/code_writing

0. 完整代码

先来跑通demo代码

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import(
    ChatPromptTemplate,)from langchain_experimental.utilities import PythonREPL
from langchain_openai import ChatOpenAI

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

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

```python
....
```"""
prompt = ChatPromptTemplate.from_messages([("system", template),("human","{input}")])

model = ChatOpenAI()def_sanitize_output(text:str):
    _, after = text.split("```python")return after.split("```")[0]

chain = prompt | model | StrOutputParser()| _sanitize_output | PythonREPL().run

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

执行结果:

在这里插入图片描述

1. 代码学习

这段代码实现的功能:当接收到用户提问时,通过调用大模型来写Python代码,通过执行Python代码输出Python代码的运行结果。上面的demo中,用户提问2+2等于几,Python程序执行结果为4。

案例很简单,但也有值得学习的地方。

(1)首先是前面的传统chain部分,

prompt | model | StrOutputParser

就是将用户提问和系统设定的Prompt给到大模型,然后大模型输出结果,通过

StrOutputParser

将结果转换成字符串格式。

StrOutputParser

的作用:将大模型的输出转换成字符串格式。如果是LLM的返回,保持原样(LLM的返回本来就是字符串),如果是ChatModel的返回,它会输出

.content

中的信息作为结果字符串。

在这里插入图片描述
这里面可以重点关注下给系统设定的Prompt:限定了只输出Python代码,并且用Markdown的形式,并且还给了输出格式的例子。最大限度地保证大模型输出地Python代码是可以运行的。

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

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

```python
....
```"""

(2)

_sanitize_output

函数,将大模型输出的Markdown格式的Python代码提取出来,其实这里就是去掉前面的 “python” 和后面的 “”。所以,前面的Prompt就显得至关重要了,一定将输出格式限制死了,有一点不对就会提取Python代码出错。

(3)

PythonREPL().run

,从代码中也能猜出它就是用来在内部运行 Python 程序的,它是LangChain封装的一个用来执行Python代码的类。

run

函数的几个注意点:

  • 参数为完整的要执行的Python代码
  • 其返回结果为 Python 代码中通过 print 函数打印的内容,如下示例代码,print(1+1),才能返回2。
from langchain_experimental.utilities import PythonREPL
python_repl =PythonREPL()
python_repl.run("print(1+1)") # 有返回值,2

python_repl.run("print(1+1)") # 无返回值,空的

本文中demo程序生成的Python代码,有使用

print

在这里插入图片描述
看下PythonREPL的源码,原理很简单,就是调用了一下

exec

函数执行代码,然后将标准输出中的内容放到队列中。执行完之后

return queue.get()

,将标准输出内容作为结果返回。

所以从源码也可以知道,它不止会返回

print

打印出来的内容,任何输出到标准输出中的信息它都会返回,例如程序报错、警告等。
在这里插入图片描述

本文到这里就结束了。通过本文,我们主要是学习了如何让大模型写Python程序并自动执行。其实最大的收获就是知道了有

PythonREPL

这么个东西,更深一点知道了

PythonREPL

的运行原理,后面即使不用LangChain,也能自己写一段类似的功能。

如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

在这里插入图片描述


本文转载自: https://blog.csdn.net/Attitude93/article/details/136272444
版权归原作者 同学小张 所有, 如有侵权,请联系我们删除。

“【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案”的评论:

还没有评论