背景简介
我们知道GPT模型对于内容的输出,是对下一个字符的预测,通过概率选出下一个文本。
而且我们也知道,训练样本是非常庞大的,对于GPT来说,也是有可能学习过1 + 1 = 2
的。
当我们向GPT询问1+1
时,完全可以通过概率来推测出结果是2
但是当我们要求GPT计算:12311111111111111
+ 999999988888888111
时,显然训练样本中不可能出现这么抽象的内容。
那我们该如何让大模型进行计算呢???
安装依赖
pip install --upgrade --quiet langchain-core langchain-experimental langchain-openai
编写代码
提示词内容
"""Write some python code to solve the user's problem.
Return only python code in Markdown format, e.g.:
```python
....
```"""
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(
model="gpt-3.5-turbo",
)
def _sanitize_output(text: str):
_, after = text.split("```python")
result = after.split("```")[0]
print("---code---")
print(text)
print("---code---")
return result
chain = prompt | model | StrOutputParser() | _sanitize_output | PythonREPL().run
message = chain.invoke({"input": "whats 2 plus 2"})
print(f"message: {message}")
运行代码
我们可以看到,大模型先生成了一段代码,并进行计算,输出了结果。
➜ python3 test11.py
---code---
\```python
result = 2 + 2
print(result)
\```
---code---
Python REPL can execute arbitrary code. Use with caution.
message: 4