PythonREPL组件能够运行python代码,比如以下代码:
PythonREPL().run('print(12*9)')
实现的基本思路:
- 获取用户的提问
- 通过提示词工程让大模型输出提问对应的python代码
- 从回答中提取纯python代码
- 把纯python代码丢给PythonREPL组件去运行
- 输出代码执行结果
以下是代码实现:
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_community.chat_models import ChatTongyi
from langchain_core.runnables import RunnableLambda
from langchain_experimental.utilities import PythonREPL
# 创建一个大模型
llm = ChatTongyi()
# 创建一个让大模型编写代码的提示词模板
template_code = """请通过编写Python代码来回答对应问题。此问题是:{question}
注意仅需要通过Python代码回答,不要添加其他说明文字。
代码示例如下:
```python
result = 2 * 8
print(result)
```
"""
# 大模型回答的代码不能直接用,用get_code方法处理成纯python代码
def get_code(x):
return x.split("```python")[1].split("```")[0]
# 创建一个提示词
prompt = PromptTemplate.from_template(template_code)
# 创建一个自定义链
chain_code = prompt | llm | StrOutputParser() | RunnableLambda(get_code) | PythonREPL().run
print(chain_code.invoke({"question":"99除于4等于几?结果保留2位小数点"}))
# Output >> 24.75