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

本站文章一览:

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
1天前
|
机器学习/深度学习 人工智能 测试技术
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
PsycoLLM 是合肥工业大学推出的中文心理大语言模型,基于高质量心理数据集训练,支持心理健康评估、多轮对话和情绪识别,为心理健康领域提供技术支持。
79 51
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
|
4天前
|
数据采集 人工智能 搜索推荐
SocraticLM:通过 AI 提问引导学生主动思考,中科大与科大讯飞联合推出苏格拉底式教育大模型
SocraticLM 是由中科大和科大讯飞联合开发的苏格拉底式教学大模型,通过提问引导学生主动思考,提供个性化教学,显著提升教学效果。
34 9
SocraticLM:通过 AI 提问引导学生主动思考,中科大与科大讯飞联合推出苏格拉底式教育大模型
|
1天前
|
人工智能 自然语言处理 API
阿里云百炼xWaytoAGI共学课DAY1 - 必须了解的企业级AI应用开发知识点
本课程旨在介绍阿里云百炼大模型平台的核心功能和应用场景,帮助开发者和技术小白快速上手,体验AI的强大能力,并探索企业级AI应用开发的可能性。
|
1天前
|
人工智能 前端开发 算法
科技云报到:从大模型到云端,“AI+云计算”还能讲出什么新故事
科技云报到:从大模型到云端,“AI+云计算”还能讲出什么新故事
|
2天前
|
存储 人工智能 Serverless
7分钟玩转 AI 应用,函数计算一键部署 AI 生图大模型
人工智能生成图像(AI 生图)的领域中,Stable Diffusion WebUI 以其强大的算法和稳定的输出质量而闻名。它能够快速地从文本描述中生成高质量的图像,为用户提供了一个直观且高效的创作平台。而 ComfyUI 则以其用户友好的界面和高度定制化的选项所受到欢迎。ComfyUI 的灵活性和直观性使得即使是没有技术背景的用户也能轻松上手。本次技术解决方案通过函数计算一键部署热门 AI 生图大模型,凭借其按量付费、卓越弹性、快速交付能力的特点,完美实现低成本,免运维。
|
6天前
|
人工智能 供应链 安全
面向高效大模型推理的软硬协同加速技术 多元化 AI 硬件引入评测体系
本文介绍了AI硬件评测体系的三大核心方面:统一评测标准、平台化与工具化、多维度数据消费链路。通过标准化评测流程,涵盖硬件性能、模型推理和训练性能,确保评测结果客观透明。平台化实现资源管理与任务调度,支持大规模周期性评测;工具化则应对紧急场景,快速适配并生成报告。最后,多维度数据消费链路将评测数据结构化保存,服务于综合通用、特定业务及专业性能分析等场景,帮助用户更好地理解和使用AI硬件。
|
8月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
641 1
|
8月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
176 0
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
907 0
|
5月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
131 0