2023-09-17 11:19:16 +08:00
|
|
|
|
from langchain import PromptTemplate
|
|
|
|
|
|
from langchain.chains import LLMMathChain
|
2023-09-17 16:19:50 +08:00
|
|
|
|
from server.utils import wrap_done, get_ChatOpenAI
|
2023-09-17 11:19:16 +08:00
|
|
|
|
from configs.model_config import LLM_MODEL, TEMPERATURE
|
|
|
|
|
|
from langchain.chat_models import ChatOpenAI
|
|
|
|
|
|
from langchain.callbacks.manager import CallbackManagerForToolRun
|
|
|
|
|
|
|
|
|
|
|
|
_PROMPT_TEMPLATE = """将数学问题翻译成可以使用Python的numexpr库执行的表达式。使用运行此代码的输出来回答问题。
|
|
|
|
|
|
问题: ${{包含数学问题的问题。}}
|
|
|
|
|
|
```text
|
|
|
|
|
|
${{解决问题的单行数学表达式}}
|
|
|
|
|
|
```
|
|
|
|
|
|
...numexpr.evaluate(query)...
|
|
|
|
|
|
```output
|
|
|
|
|
|
${{运行代码的输出}}
|
|
|
|
|
|
```
|
|
|
|
|
|
答案: ${{答案}}
|
|
|
|
|
|
|
|
|
|
|
|
这是两个例子:
|
|
|
|
|
|
|
|
|
|
|
|
问题: 37593 * 67是多少?
|
|
|
|
|
|
```text
|
|
|
|
|
|
37593 * 67
|
|
|
|
|
|
```
|
|
|
|
|
|
...numexpr.evaluate("37593 * 67")...
|
|
|
|
|
|
```output
|
|
|
|
|
|
2518731
|
|
|
|
|
|
|
|
|
|
|
|
答案: 2518731
|
|
|
|
|
|
|
|
|
|
|
|
问题: 37593的五次方根是多少?
|
|
|
|
|
|
```text
|
|
|
|
|
|
37593**(1/5)
|
|
|
|
|
|
```
|
|
|
|
|
|
...numexpr.evaluate("37593**(1/5)")...
|
|
|
|
|
|
```output
|
|
|
|
|
|
8.222831614237718
|
|
|
|
|
|
|
|
|
|
|
|
答案: 8.222831614237718
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
问题: 2的平方是多少?
|
|
|
|
|
|
```text
|
|
|
|
|
|
2 ** 2
|
|
|
|
|
|
```
|
|
|
|
|
|
...numexpr.evaluate("2 ** 2")...
|
|
|
|
|
|
```output
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
答案: 4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
现在,这是我的问题:
|
|
|
|
|
|
问题: {question}
|
|
|
|
|
|
"""
|
|
|
|
|
|
PROMPT = PromptTemplate(
|
|
|
|
|
|
input_variables=["question"],
|
|
|
|
|
|
template=_PROMPT_TEMPLATE,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def calculate(query: str):
|
|
|
|
|
|
model = get_ChatOpenAI(
|
|
|
|
|
|
streaming=False,
|
|
|
|
|
|
model_name=LLM_MODEL,
|
|
|
|
|
|
temperature=TEMPERATURE,
|
|
|
|
|
|
)
|
|
|
|
|
|
llm_math = LLMMathChain.from_llm(model, verbose=True, prompt=PROMPT)
|
|
|
|
|
|
ans = llm_math.run(query)
|
|
|
|
|
|
return ans
|