84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
import os
|
||
|
||
tools_text = """code_interpreter: Call this tool to interact with the Code Interpreter API.
|
||
What is the Code Interpreter API useful for?
|
||
Code Interpreter is used to execute Python code to deal with the following tasks:
|
||
1. Solving mathematical problems, both quantitative and qualitative
|
||
2. Doing data analysis and visualization
|
||
3. Converting files between formats
|
||
Parameters:
|
||
```py
|
||
code
|
||
```
|
||
Enclose the code within triple backticks (```) at the beginning and end of the code.
|
||
"""
|
||
|
||
REACT_PROMPT = """Answer the following questions as best you can. You have access to the following tools:
|
||
|
||
{tools_text}
|
||
|
||
Use the following format:
|
||
|
||
Question: the input question you must answer
|
||
Thought: you should always think about what to do
|
||
Action: the action to take, should be one of [{tools_name_text}]
|
||
Action Input: the input to the action
|
||
Observation: the result of the action
|
||
... (this Thought/Action/Action Input/Observation can be repeated zero or more times)
|
||
Thought: I now know the final answer
|
||
Final Answer: the final answer to the original input question
|
||
|
||
Begin!
|
||
|
||
Question: {query}"""
|
||
|
||
fname_template = {
|
||
'zh': '文件{fname_str},',
|
||
'en_multi': 'Files {fname_str}. ',
|
||
'en': 'File {fname_str}. ',
|
||
}
|
||
|
||
|
||
class ReAct(object):
|
||
|
||
def __init__(self, query, lang='en', upload_file_paths=[]):
|
||
self.query = query
|
||
self.lang = lang
|
||
self.upload_file_paths = [f'`{os.path.basename(fname)}`' for fname in upload_file_paths]
|
||
|
||
self.fname_template = fname_template
|
||
self.react_template = REACT_PROMPT
|
||
self.prompt = ''
|
||
|
||
def build_prompt(self):
|
||
query = self._format_upload_fname() + self.query
|
||
tools_text = self._build_tools_text()
|
||
tools_name_text = self._build_tools_name_text()
|
||
planning_prompt = self.react_template.format(query=query,
|
||
tools_text=tools_text,
|
||
tools_name_text=tools_name_text)
|
||
|
||
self.prompt = planning_prompt
|
||
return planning_prompt
|
||
|
||
def _format_upload_fname(self):
|
||
prefix = ''
|
||
if self.upload_file_paths:
|
||
fname_str = ', '.join(self.upload_file_paths)
|
||
lang_key = 'en_multi' if self.lang == 'en' and len(self.upload_file_paths) > 1 else self.lang
|
||
fname_template = self.fname_template[lang_key]
|
||
prefix = fname_template.format(fname_str=fname_str)
|
||
return prefix
|
||
|
||
def _build_tools_text(self):
|
||
return tools_text
|
||
|
||
def _build_tools_name_text(self):
|
||
return 'code_interpreter'
|
||
|
||
def build_observation(self, observation):
|
||
return f'\nObservation: {observation}\nThought:'
|
||
|
||
def get_stop_words_list(self):
|
||
return ['Observation:', 'Observation:\n']
|