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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:


本文通过一个案例来学习下如何让 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知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
1天前
|
机器学习/深度学习 算法 索引
Python常用极简代码
Python常用极简代码
23 5
|
1天前
|
Python
Python实用案例代码详解
Python实用案例代码详解
|
1天前
|
Python
python 代码脚本汇编
python 代码脚本汇编
13 0
|
1天前
|
分布式计算 API 开发者
编写高质量Python代码的方法
编写高质量Python代码的方法
12 0
|
1月前
|
算法 编译器 开发者
如何提高Python代码的性能:优化技巧与实践
本文探讨了如何提高Python代码的性能,重点介绍了一些优化技巧与实践方法。通过使用适当的数据结构、算法和编程范式,以及利用Python内置的性能优化工具,可以有效地提升Python程序的执行效率,从而提升整体应用性能。本文将针对不同场景和需求,分享一些实用的优化技巧,并通过示例代码和性能测试结果加以说明。
|
9天前
|
算法 搜索推荐 开发者
解锁Python代码的速度之谜:性能瓶颈分析与优化实践
探索Python性能优化,关注解释器开销、GIL、数据结构选择及I/O操作。使用cProfile和line_profiler定位瓶颈,通过Cython减少解释器影响,多进程避开GIL,优化算法与数据结构,以及借助asyncio提升I/O效率。通过精准优化,Python可应对高性能计算挑战。【6月更文挑战第15天】
15 1
|
1月前
|
人工智能 Python
Python中的反对称矩阵:理论、应用与代码实践
Python中的反对称矩阵:理论、应用与代码实践
40 1
|
1月前
|
存储 算法 搜索推荐
如何提升Python代码的性能:优化技巧与实践
本文将介绍如何通过优化技巧和实践方法来提升Python代码的性能。从避免不必要的循环和函数调用,到利用内置函数和库,再到使用适当的数据结构和算法,我们将深入探讨各种提升Python代码性能的方法,帮助开发者写出更高效的程序。
|
1月前
|
设计模式 缓存 数据安全/隐私保护
使用装饰器优化 Python 代码的技巧与实践
使用装饰器优化 Python 代码的技巧与实践
70 0
|
开发工具 git Python
Git:Python代码开发到服务器上测试实践
Git:Python代码开发到服务器上测试实践
143 0