背景简介
我们知道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